ItemComponent class
Пакет: com.hypixel.hytale.server.core.modules.entity.item
Файл: com/hypixel/hytale/server/core/modules/entity/item/ItemComponent.java
implements: Component<EntityStore>
Поля (32)
| Модификаторы | Тип | Имя |
|---|---|---|
|
ColorLight |
var1 |
|
|
var1 |
|
|
var1 |
|
boolean |
var1 |
|
TimeResource |
var10 |
|
World |
var2 |
|
ItemEntityConfig |
var2 |
|
Item |
var2 |
|
String |
var3 |
|
ItemEntityConfig |
var3 |
|
ItemEntityConfig |
var3 |
|
BlockType |
var3 |
|
ItemComponent |
var3 |
|
ItemEntityConfig |
var4 |
|
Float |
var4 |
|
float |
var4 |
|
TransformComponent |
var4 |
|
Holder |
var4 |
|
ItemStack |
var4 |
|
CircleIterator |
var5 |
|
Vector3d |
var5 |
|
ItemComponent |
var5 |
|
PickupItemComponent |
var5 |
|
ItemStackTransaction |
var5 |
|
Holder |
var6 |
|
Holder |
var6 |
|
ItemStack |
var6 |
|
Holder |
var7 |
|
PickupItemComponent |
var7 |
|
int |
var7 |
|
ItemComponent |
var8 |
|
float |
var9 |
Методы (20)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
boolean |
canPickUpboolean canPickUp() |
public |
float |
computeLifetimeSecondsfloat computeLifetimeSeconds(@Nonnull ComponentAccessor<EntityStore> var1) |
public |
boolean |
consumeNetworkOutdatedboolean consumeNetworkOutdated() |
public |
float |
getPickupRadiusfloat getPickupRadius(@Nonnull ComponentAccessor<EntityStore> var1) |
|
|
if if(var2 instanceof BlockMigrationExtraInfo) |
|
|
if if(this.pickupRange < 0.0F) |
|
|
if if(var2 != null) |
|
|
if if(this.pickupDelay <= 0.0F) |
|
|
if if(this.pickupThrottle <= 0.0F) |
|
|
if if(this.mergeDelay <= 0.0F) |
|
|
if if(var4 == null) |
|
|
if if(var5 == null) |
|
|
if if(var4 == null) |
public |
boolean |
isRemovedByPlayerPickupboolean isRemovedByPlayerPickup() |
public |
boolean |
pollMergeDelayboolean pollMergeDelay(float var1) |
public |
boolean |
pollPickupDelayboolean pollPickupDelay(float var1) |
public |
boolean |
pollPickupThrottleboolean pollPickupThrottle(float var1) |
public |
void |
setItemStackvoid setItemStack(@Nullable ItemStack var1) |
public |
void |
setPickupDelayvoid setPickupDelay(float var1) |
public |
void |
setRemovedByPlayerPickupvoid setRemovedByPlayerPickup(boolean var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.item;
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.component.Component;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Holder;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.math.iterator.CircleIterator;
class="kw">import com.hypixel.hytale.math.vector.Rotation3f;
class="kw">import com.hypixel.hytale.math.vector.Rotation3fc;
class="kw">import com.hypixel.hytale.math.vector.Vector3dUtil;
class="kw">import com.hypixel.hytale.protocol.ColorLight;
class="kw">import com.hypixel.hytale.server.core.asset.type.blocktype.config.BlockType;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.ItemEntityConfig;
class="kw">import com.hypixel.hytale.server.core.entity.UUIDComponent;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
class="kw">import com.hypixel.hytale.server.core.inventory.transaction.ItemStackTransaction;
class="kw">import com.hypixel.hytale.server.core.modules.entity.BlockMigrationExtraInfo;
class="kw">import com.hypixel.hytale.server.core.modules.entity.DespawnComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.EntityModule;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Intangible;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.tracker.NetworkId;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.PhysicsValues;
class="kw">import com.hypixel.hytale.server.core.modules.physics.component.Velocity;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.World;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.concurrent.ThreadLocalRandom;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">public class ItemComponent class="kw">implements Component<EntityStore> {
@Nonnull
class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
@Nonnull
class="kw">public class="kw">static class="kw">final BuilderCodec<ItemComponent> CODEC = BuilderCodec.builder(ItemComponent.class, ItemComponent::new)
.append(new KeyedCodec<>("Item", ItemStack.CODEC), (var0, var1, var2) -> {
var0.itemStack = var1;
if (var2 class="kw">instanceof BlockMigrationExtraInfo) {
String var3 = ((BlockMigrationExtraInfo)var2).getBlockMigration().apply(var1.getItemId());
if (!var3.equals(var1.getItemId())) {
var0.itemStack = new ItemStack(var3, var1.getQuantity(), var1.getMetadata());
}
}
}, (var0, var1) -> var0.itemStack)
.add()
.append(new KeyedCodec<>("StackDelay", Codec.FLOAT), (var0, var1) -> var0.mergeDelay = var1, var0 -> var0.mergeDelay)
.add()
.append(new KeyedCodec<>("PickupDelay", Codec.FLOAT), (var0, var1) -> var0.pickupDelay = var1, var0 -> var0.pickupDelay)
.add()
.append(new KeyedCodec<>("PickupThrottle", Codec.FLOAT), (var0, var1) -> var0.pickupThrottle = var1, var0 -> var0.pickupThrottle)
.add()
.append(new KeyedCodec<>("RemovedByPlayerPickup", Codec.BOOLEAN), (var0, var1) -> var0.removedByPlayerPickup = var1, var0 -> var0.removedByPlayerPickup)
.add()
.build();
class="kw">private class="kw">static class="kw">final float DROPPED_ITEM_VERTICAL_BOUNCE_VELOCITY = 3.25F;
class="kw">private class="kw">static class="kw">final float DROPPED_ITEM_HORIZONTAL_BOUNCE_VELOCITY = 3.0F;
class="kw">public class="kw">static class="kw">final float DEFAULT_PICKUP_DELAY = 0.5F;
class="kw">public class="kw">static class="kw">final float PICKUP_DELAY_DROPPED = 1.5F;
class="kw">public class="kw">static class="kw">final float PICKUP_THROTTLE = 0.25F;
class="kw">public class="kw">static class="kw">final float DEFAULT_MERGE_DELAY = 1.5F;
@Nullable
class="kw">private ItemStack itemStack;
class="kw">private boolean isNetworkOutdated;
class="kw">private float mergeDelay = 1.5F;
class="kw">private float pickupDelay = 0.5F;
class="kw">private float pickupThrottle;
class="kw">private boolean removedByPlayerPickup;
class="kw">private float pickupRange = -1.0F;
@Nonnull
class="kw">public class="kw">static ComponentType<EntityStore, ItemComponent> getComponentType() {
class="kw">return EntityModule.get().getItemComponentType();
}
class="kw">public ItemComponent() {
}
class="kw">public ItemComponent(@Nullable ItemStack var1) {
this.itemStack = var1;
}
class="kw">public ItemComponent(@Nullable ItemStack var1, float var2, float var3, float var4, boolean var5) {
this.itemStack = var1;
this.mergeDelay = var2;
this.pickupDelay = var3;
this.pickupThrottle = var4;
this.removedByPlayerPickup = var5;
}
@Nullable
class="kw">public ItemStack getItemStack() {
class="kw">return this.itemStack;
}
class="kw">public void setItemStack(@Nullable ItemStack var1) {
this.itemStack = var1;
this.isNetworkOutdated = true;
this.pickupRange = -1.0F;
}
class="kw">public void setPickupDelay(float var1) {
this.pickupDelay = var1;
}
class="kw">public float getPickupRadius(@Nonnull ComponentAccessor<EntityStore> var1) {
if (this.pickupRange < 0.0F) {
World var2 = var1.getExternalData().getWorld();
ItemEntityConfig var3 = var2.getGameplayConfig().getItemEntityConfig();
ItemEntityConfig var4 = this.itemStack != null ? this.itemStack.getItem().getItemEntityConfig() : null;
this.pickupRange = var4 != null && var4.getPickupRadius() != -1.0F ? var4.getPickupRadius() : var3.getPickupRadius();
}
class="kw">return this.pickupRange;
}
class="kw">public float computeLifetimeSeconds(@Nonnull ComponentAccessor<EntityStore> var1) {
ItemEntityConfig var2 = this.itemStack != null ? this.itemStack.getItem().getItemEntityConfig() : null;
ItemEntityConfig var3 = var1.getExternalData().getWorld().getGameplayConfig().getItemEntityConfig();
Float var4 = var2 != null && var2.getTtl() != null ? var2.getTtl() : var3.getTtl();
class="kw">return var4 != null ? var4 : 120.0F;
}
@Nullable
class="kw">public ColorLight computeDynamicLight() {
ColorLight var1 = null;
Item var2 = this.itemStack != null ? this.itemStack.getItem() : null;
if (var2 != null) {
if (var2.hasBlockType()) {
BlockType var3 = BlockType.getAssetMap().getAsset(this.itemStack.getBlockKey());
if (var3 != null && var3.getLight() != null) {
var1 = var3.getLight();
}
} else if (var2.getLight() != null) {
var1 = var2.getLight();
}
}
class="kw">return var1;
}
class="kw">public boolean pollPickupDelay(float var1) {
if (this.pickupDelay <= 0.0F) {
class="kw">return true;
}
this.pickupDelay -= var1;
class="kw">return this.pickupDelay <= 0.0F;
}
class="kw">public boolean pollPickupThrottle(float var1) {
this.pickupThrottle -= var1;
if (this.pickupThrottle <= 0.0F) {
this.pickupThrottle = 0.25F;
class="kw">return true;
} else {
class="kw">return false;
}
}
class="kw">public boolean pollMergeDelay(float var1) {
this.mergeDelay -= var1;
if (this.mergeDelay <= 0.0F) {
this.mergeDelay = 1.5F;
class="kw">return true;
} else {
class="kw">return false;
}
}
class="kw">public boolean canPickUp() {
class="kw">return this.pickupDelay <= 0.0F;
}
class="kw">public boolean isRemovedByPlayerPickup() {
class="kw">return this.removedByPlayerPickup;
}
class="kw">public void setRemovedByPlayerPickup(boolean var1) {
this.removedByPlayerPickup = var1;
}
class="kw">public boolean consumeNetworkOutdated() {
boolean var1 = this.isNetworkOutdated;
this.isNetworkOutdated = false;
class="kw">return var1;
}
@Nonnull
class="kw">public ItemComponent clone() {
class="kw">return new ItemComponent(this.itemStack, this.mergeDelay, this.pickupDelay, this.pickupThrottle, this.removedByPlayerPickup);
}
@Nonnull
class="kw">public class="kw">static Holder<EntityStore>[] generateItemDrops(
@Nonnull ComponentAccessor<EntityStore> var0, @Nonnull List<ItemStack> var1, @Nonnull Vector3d var2, @Nonnull Rotation3fc var3
) {
if (var1.size() == 1) {
Holder var6 = generateItemDrop(var0, var1.getFirst(), var2, var3, 0.0F, 3.25F, 0.0F);
class="kw">return var6 == null ? Holder.emptyArray() : new Holder[]{var6};
} else {
float var4 = ThreadLocalRandom.current().nextFloat() * (float) (Math.PI * 2);
CircleIterator var5 = new CircleIterator(Vector3dUtil.ZERO, 3.0, var1.size(), var4);
class="kw">return var1.stream().map(var4x -> {
Vector3d var5 = var5.next();
class="kw">return generateItemDrop(var0, var4x, var2, var3, (float)var5.x(), 3.25F, (float)var5.z());
}).filter(Objects::nonNull).toArray(Holder[]::new);
}
}
@Nullable
class="kw">public class="kw">static Holder<EntityStore> generateItemDrop(
@Nonnull ComponentAccessor<EntityStore> var0,
@Nullable ItemStack var1,
@Nonnull Vector3d var2,
@Nonnull Rotation3fc var3,
float var4,
float var5,
float var6
) {
if (var1 != null && !var1.isEmpty() && var1.isValid()) {
Holder var7 = EntityStore.REGISTRY.newHolder();
ItemComponent var8 = new ItemComponent(var1);
var7.addComponent(getComponentType(), var8);
var7.addComponent(TransformComponent.getComponentType(), new TransformComponent(var2, var3));
var7.ensureAndGetComponent(Velocity.getComponentType()).set(var4, var5, var6);
var7.ensureComponent(PhysicsValues.getComponentType());
var7.ensureComponent(UUIDComponent.getComponentType());
var7.ensureComponent(Intangible.getComponentType());
float var9 = var8.computeLifetimeSeconds(var0);
TimeResource var10 = var0.getResource(TimeResource.getResourceType());
var7.addComponent(DespawnComponent.getComponentType(), DespawnComponent.despawnInSeconds(var10, var9));
class="kw">return var7;
} else {
LOGGER.at(Level.WARNING).log("Attempted to drop invalid item %s at %s", var1, var2);
class="kw">return null;
}
}
@Nullable
class="kw">public class="kw">static Holder<EntityStore> generatePickedUpItem(
@Nonnull Ref<EntityStore> var0, @Nonnull ComponentAccessor<EntityStore> var1, @Nonnull Ref<EntityStore> var2, @Nonnull Vector3d var3
) {
if (!var0.isValid()) {
LOGGER.at(Level.WARNING).log("Attempted to generate picked up item from invalid entity reference %s", var0.getIndex());
class="kw">return null;
} else {
TransformComponent var4 = var1.getComponent(var0, TransformComponent.getComponentType());
if (var4 == null) {
LOGGER.at(Level.WARNING).log("Attempted to generate picked up item from entity %s without a TransformComponent", var0.getIndex());
class="kw">return null;
} else {
ItemComponent var5 = var1.getComponent(var0, getComponentType());
if (var5 == null) {
LOGGER.at(Level.WARNING).log("Attempted to generate picked up item from entity %s without an ItemComponent", var0.getIndex());
class="kw">return null;
} else {
Holder var6 = EntityStore.REGISTRY.newHolder();
PickupItemComponent var7 = new PickupItemComponent(var2, new Vector3d(var3));
var6.addComponent(PickupItemComponent.getComponentType(), var7);
var6.addComponent(getComponentType(), var5.clone());
var6.addComponent(TransformComponent.getComponentType(), var4.clone());
var6.ensureComponent(PreventItemMerging.getComponentType());
var6.ensureComponent(Intangible.getComponentType());
var6.addComponent(NetworkId.getComponentType(), new NetworkId(var0.getStore().getExternalData().takeNextNetworkId()));
var6.ensureComponent(EntityStore.REGISTRY.getNonSerializedComponentType());
class="kw">return var6;
}
}
}
}
@Nonnull
class="kw">public class="kw">static Holder<EntityStore> generatePickedUpItem(
@Nonnull ItemStack var0, @Nonnull Vector3d var1, @Nonnull ComponentAccessor<EntityStore> var2, @Nonnull Ref<EntityStore> var3
) {
Holder var4 = EntityStore.REGISTRY.newHolder();
PickupItemComponent var5 = new PickupItemComponent(var3, new Vector3d(var1));
var4.addComponent(PickupItemComponent.getComponentType(), var5);
var4.addComponent(getComponentType(), new ItemComponent(new ItemStack(var0.getItemId())));
var4.addComponent(TransformComponent.getComponentType(), new TransformComponent(new Vector3d(var1), new Rotation3f(Rotation3f.IDENTITY)));
var4.ensureComponent(PreventItemMerging.getComponentType());
var4.ensureComponent(Intangible.getComponentType());
var4.addComponent(NetworkId.getComponentType(), new NetworkId(var2.getExternalData().takeNextNetworkId()));
var4.ensureComponent(EntityStore.REGISTRY.getNonSerializedComponentType());
class="kw">return var4;
}
@Nullable
class="kw">public class="kw">static ItemStack addToItemContainer(@Nonnull Store<EntityStore> var0, @Nonnull Ref<EntityStore> var1, @Nonnull ItemContainer var2) {
if (!var1.isValid()) {
class="kw">return null;
}
ItemComponent var3 = var0.getComponent(var1, getComponentType());
if (var3 != null && !(var3.pickupDelay > 0.0F)) {
ItemStack var4 = var3.getItemStack();
if (var4 == null) {
class="kw">return null;
} else {
ItemStackTransaction var5 = var2.addItemStack(var4);
ItemStack var6 = var5.getRemainder();
if (var6 != null && !var6.isEmpty()) {
var3.setPickupDelay(0.25F);
var3.setItemStack(var6);
int var7 = var4.getQuantity() - var6.getQuantity();
class="kw">return var7 <= 0 ? null : var4.withQuantity(var7);
} else {
var0.removeEntity(var1, RemoveReason.REMOVE);
class="kw">return var4;
}
}
} else {
class="kw">return null;
}
}
}