Location enum
Пакет: com.hypixel.hytale.builtin.triggervolumes.effect.builtin
Файл: com/hypixel/hytale/builtin/triggervolumes/effect/builtin/ItemCondition.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
IN_HAND,
HOTBAR,
INVENTORY, |
CARRIED |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.triggervolumes.effect.builtin;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerCondition;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerContext;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.TriggerEventType;
class="kw">import com.hypixel.hytale.builtin.triggervolumes.effect.builtin.conditions.PlayerCountCondition;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.codecs.EnumCodec;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.server.core.entity.entities.Player;
class="kw">import com.hypixel.hytale.server.core.inventory.ActiveSlotInventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.InventoryComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.CombinedItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackSlotTransaction;
class="kw">import com.hypixel.hytale.server.core.modules.interaction.components.CarriedBlock;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonString;
class="kw">import org.bson.BsonValue;
class="kw">public class ItemCondition class="kw">extends TriggerCondition {
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<ItemCondition> CODEC = BuilderCodec.builder(ItemCondition.class, ItemCondition::new, BASE_CODEC)
.append(new KeyedCodec<>("Item", Codec.STRING), (var0, var1) -> var0.itemId = var1, var0 -> var0.itemId)
.add()
.append(new KeyedCodec<>("Location", new EnumCodec<>(ItemCondition.Location.class), false), (var0, var1) -> var0.location = var1, var0 -> var0.location)
.add()
.append(new KeyedCodec<>("Quantity", Codec.INTEGER, false), (var0, var1) -> var0.quantity = var1, var0 -> var0.quantity)
.add()
.append(new KeyedCodec<>("Consume", Codec.BOOLEAN, false), (var0, var1) -> var0.consume = var1, var0 -> var0.consume)
.add()
.append(
new KeyedCodec<>("Comparison", new EnumCodec<>(PlayerCountCondition.Comparison.class), false),
(var0, var1) -> var0.comparison = var1,
var0 -> var0.comparison
)
.add()
.append(new KeyedCodec<>("EmptyInventory", Codec.BOOLEAN, false), (var0, var1) -> var0.emptyInventory = var1, var0 -> var0.emptyInventory)
.add()
.append(new KeyedCodec<>("MetadataKey", Codec.STRING, false), (var0, var1) -> var0.metadataKey = var1, var0 -> var0.metadataKey)
.add()
.append(new KeyedCodec<>("MetadataValue", Codec.STRING, false), (var0, var1) -> var0.metadataValue = var1, var0 -> var0.metadataValue)
.add()
.build();
@Nullable
class="kw">private String itemId;
@Nonnull
class="kw">private ItemCondition.Location location = ItemCondition.Location.IN_HAND;
class="kw">private int quantity = 1;
class="kw">private boolean consume;
@Nonnull
class="kw">private PlayerCountCondition.Comparison comparison = PlayerCountCondition.Comparison.AT_LEAST;
class="kw">private boolean emptyInventory;
@Nonnull
class="kw">private String metadataKey = "";
@Nonnull
class="kw">private String metadataValue = "";
class="kw">public ItemCondition() {
}
@Nonnull
class="kw">public class="kw">static ItemCondition create(@Nonnull TriggerEventType var0, @Nonnull String var1, @Nonnull ItemCondition.Location var2, int var3) {
ItemCondition var4 = new ItemCondition();
var4.setEventType(var0);
var4.itemId = var1;
var4.location = var2;
var4.quantity = var3;
class="kw">return var4;
}
@Override
class="kw">public boolean test(@Nonnull TriggerContext var1) {
Store var2 = var1.getStore();
Ref var3 = var1.getEntityRef();
if (var2.getComponent(var3, Player.getComponentType()) == null) {
class="kw">return false;
}
if (this.emptyInventory) {
CombinedItemContainer var7 = InventoryComponent.getCombined(var2, var3, InventoryComponent.EVERYTHING);
class="kw">return var7.countItemStacks(var0 -> !ItemStack.isEmpty(var0)) == 0;
}
if (this.itemId != null && !this.itemId.isBlank()) {
int var4 = Math.max(0, this.quantity);
int var5 = class="kw">switch (this.location != null ? this.location : ItemCondition.Location.IN_HAND) {
case IN_HAND -> this.countStack(InventoryComponent.getItemInHand(var2, var3));
case HOTBAR -> {
InventoryComponent.Hotbar var6 = var2.getComponent(var3, InventoryComponent.Hotbar.getComponentType());
yield var6 != null ? this.countStacks(var6.getInventory()) : 0;
}
case INVENTORY -> this.countStacks(InventoryComponent.getCombined(var2, var3, InventoryComponent.EVERYTHING));
case CARRIED -> this.countStack(this.getCarriedItemStack(var2, var3));
};
class="kw">return this.matches(var5, var4);
} else {
class="kw">return true;
}
}
class="kw">private boolean matches(int var1, int var2) {
class="kw">return class="kw">switch (this.comparison) {
case AT_LEAST -> var1 >= var2;
case AT_MOST -> var1 <= var2;
case EXACTLY -> var1 == var2;
case NOT_EQUALS -> var1 != var2;
case MORE_THAN -> var1 > var2;
case LESS_THAN -> var1 < var2;
};
}
@Override
class="kw">public void applyOnAccept(@Nonnull TriggerContext var1) {
if (this.consume && !this.emptyInventory && this.itemId != null && !this.itemId.isBlank()) {
int var2 = Math.max(0, this.quantity);
if (var2 != 0) {
this.consumeMatchedItems(var1, var2);
}
}
}
class="kw">private void consumeMatchedItems(@Nonnull TriggerContext var1, int var2) {
class="kw">switch (this.location != null ? this.location : ItemCondition.Location.IN_HAND) {
case IN_HAND:
this.consumeFromActiveInventory(var1, var2);
break;
case HOTBAR:
InventoryComponent.Hotbar var5 = var1.getStore().getComponent(var1.getEntityRef(), InventoryComponent.Hotbar.getComponentType());
if (var5 != null) {
this.consumeFromContainer(var5.getInventory(), var2);
}
break;
case INVENTORY:
this.consumeFromContainer(InventoryComponent.getCombined(var1.getStore(), var1.getEntityRef(), InventoryComponent.EVERYTHING), var2);
break;
case CARRIED:
Store var3 = var1.getStore();
Ref var4 = var1.getEntityRef();
if (this.countStack(this.getCarriedItemStack(var3, var4)) > 0) {
var3.removeComponent(var4, CarriedBlock.getComponentType());
}
}
}
@Nullable
class="kw">private ItemStack getCarriedItemStack(@Nonnull Store<EntityStore> var1, @Nonnull Ref<EntityStore> var2) {
CarriedBlock var3 = var1.getComponent(var2, CarriedBlock.getComponentType());
class="kw">return var3 != null ? var3.toItemStack() : null;
}
class="kw">private void consumeFromContainer(@Nonnull ItemContainer var1, int var2) {
for (short var3 = 0; var3 < var1.getCapacity() && var2 > 0; var3++) {
ItemStack var4 = var1.getItemStack(var3);
if (this.countStack(var4) != 0) {
int var5 = Math.min(var2, var4.getQuantity());
ItemStackSlotTransaction var6 = var1.removeItemStackFromSlot(var3, var4, var5);
if (var6.succeeded() && !ItemStack.isEmpty(var6.getOutput())) {
var2 -= var6.getOutput().getQuantity();
}
}
}
}
class="kw">private void consumeFromActiveInventory(@Nonnull TriggerContext var1, int var2) {
InventoryComponent.Tool var3 = var1.getStore().getComponent(var1.getEntityRef(), InventoryComponent.Tool.getComponentType());
if (var3 == null || !var3.isUsingToolsItem() || !this.consumeFromActiveSlot(var3, var2)) {
InventoryComponent.Hotbar var4 = var1.getStore().getComponent(var1.getEntityRef(), InventoryComponent.Hotbar.getComponentType());
if (var4 != null) {
this.consumeFromActiveSlot(var4, var2);
}
}
}
class="kw">private boolean consumeFromActiveSlot(@Nonnull ActiveSlotInventoryComponent var1, int var2) {
byte var3 = var1.getActiveSlot();
if (var3 == -1) {
class="kw">return false;
}
ItemStack var4 = var1.getInventory().getItemStack(var3);
if (this.countStack(var4) < var2) {
class="kw">return false;
}
var1.getInventory().removeItemStackFromSlot(var3, var4, var2);
class="kw">return true;
}
class="kw">private int countStacks(@Nonnull ItemContainer var1) {
class="kw">return var1.countItemStacks(var1x -> this.itemId.equals(var1x.getItemId()) && this.matchesMetadata(var1x));
}
class="kw">private int countStack(@Nullable ItemStack var1) {
class="kw">return !ItemStack.isEmpty(var1) && this.itemId.equals(var1.getItemId()) && this.matchesMetadata(var1) ? var1.getQuantity() : 0;
}
class="kw">private boolean matchesMetadata(@Nonnull ItemStack var1) {
if (this.metadataKey.isBlank()) {
class="kw">return true;
}
BsonDocument var2 = var1.getMetadata();
if (var2 == null) {
class="kw">return false;
}
BsonValue var3 = var2.get(this.metadataKey);
if (var3 == null) {
class="kw">return false;
}
if (this.metadataValue.isBlank()) {
class="kw">return true;
}
String var4 = var3 class="kw">instanceof BsonString var5 ? var5.getValue() : var3.toString();
class="kw">return this.metadataValue.equals(var4);
}
class="kw">public enum Location {
IN_HAND,
HOTBAR,
INVENTORY,
CARRIED;
Location() {
}
}
}