ItemMergeSystem class
Пакет: com.hypixel.hytale.server.core.modules.entity.item
Файл: com/hypixel/hytale/server/core/modules/entity/item/ItemMergeSystem.java
extends: EntityTickingSystem<EntityStore>
Поля (22)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
float |
RADIUS |
|
|
break |
|
SpatialResource |
var10 |
|
TimeResource |
var11 |
|
TransformComponent |
var12 |
|
Vector3d |
var13 |
|
List |
var14 |
|
Ref |
var15 |
|
ItemComponent |
var18 |
|
ItemStack |
var19 |
|
int |
var20 |
|
int |
var21 |
|
float |
var22 |
|
ColorLight |
var23 |
|
DynamicLight |
var24 |
|
float |
var25 |
|
ItemComponent |
var6 |
|
ItemStack |
var7 |
|
|
var7 |
|
|
var7 |
|
Item |
var8 |
|
int |
var9 |
Методы (6)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
|
for for(Ref var17 : var14) |
|
|
if if(var7 != null) |
|
|
if if(var20 < var9) |
|
|
if if(var21 <= var9) |
|
|
if if(var23 != null) |
|
|
if if(var24 != null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.modules.entity.item;
class="kw">import com.hypixel.hytale.component.ArchetypeChunk;
class="kw">import com.hypixel.hytale.component.CommandBuffer;
class="kw">import com.hypixel.hytale.component.ComponentType;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.RemoveReason;
class="kw">import com.hypixel.hytale.component.ResourceType;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.spatial.SpatialResource;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.protocol.ColorLight;
class="kw">import com.hypixel.hytale.server.core.asset.type.item.config.Item;
class="kw">import com.hypixel.hytale.server.core.inventory.ItemStack;
class="kw">import com.hypixel.hytale.server.core.modules.entity.DespawnComponent;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.DynamicLight;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.Interactable;
class="kw">import com.hypixel.hytale.server.core.modules.entity.component.TransformComponent;
class="kw">import com.hypixel.hytale.server.core.modules.time.TimeResource;
class="kw">import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class ItemMergeSystem class="kw">extends EntityTickingSystem<EntityStore> {
class="kw">public class="kw">static class="kw">final float RADIUS = 2.0F;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, ItemComponent> itemComponentComponentType;
@Nonnull
class="kw">private class="kw">final ComponentType<EntityStore, Interactable> interactableComponentType;
@Nonnull
class="kw">private class="kw">final ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> itemSpatialComponent;
@Nonnull
class="kw">private class="kw">final Query<EntityStore> query;
class="kw">public ItemMergeSystem(
@Nonnull ComponentType<EntityStore, ItemComponent> var1,
@Nonnull ComponentType<EntityStore, Interactable> var2,
@Nonnull ResourceType<EntityStore, SpatialResource<Ref<EntityStore>, EntityStore>> var3
) {
this.itemComponentComponentType = var1;
this.itemSpatialComponent = var3;
this.interactableComponentType = var2;
this.query = Query.and(var1, TransformComponent.getComponentType(), Query.not(var2), Query.not(PreventItemMerging.getComponentType()));
}
@Nonnull
@Override
class="kw">public Query<EntityStore> getQuery() {
class="kw">return this.query;
}
@Override
class="kw">public boolean isParallel(int var1, int var2) {
class="kw">return false;
}
@Override
class="kw">public void tick(float var1, int var2, @Nonnull ArchetypeChunk<EntityStore> var3, @Nonnull Store<EntityStore> var4, @Nonnull CommandBuffer<EntityStore> var5) {
ItemComponent var6 = var3.getComponent(var2, this.itemComponentComponentType);
assert var6 != null;
ItemStack var7 = var6.getItemStack();
if (var7 != null) {
Item var8 = var7.getItem();
int var9 = var8.getMaxStack();
if (var9 > 1 && var7.getQuantity() < var9) {
if (var6.pollMergeDelay(var1)) {
SpatialResource var10 = var4.getResource(this.itemSpatialComponent);
TimeResource var11 = var4.getResource(TimeResource.getResourceType());
TransformComponent var12 = var3.getComponent(var2, TransformComponent.getComponentType());
assert var12 != null;
Vector3d var13 = var12.getPosition();
List var14 = SpatialResource.getThreadLocalReferenceList();
var10.getSpatialStructure().ordered(var13, 2.0, var14);
Ref var15 = var3.getReferenceTo(var2);
for (Ref var17 : var14) {
if (var17.isValid() && !var17.equals(var15)) {
ItemComponent var18 = var4.getComponent(var17, this.itemComponentComponentType);
assert var18 != null;
ItemStack var19 = var18.getItemStack();
if (var19 != null && !var5.getArchetype(var17).contains(this.interactableComponentType) && var7.isStackableWith(var19)) {
int var20 = var19.getQuantity();
if (var20 < var9) {
int var21 = var7.getQuantity() + var20;
if (var21 <= var9) {
var5.removeEntity(var17, RemoveReason.REMOVE);
var18.setItemStack(null);
var7 = var7.withQuantity(var21);
} else {
var18.setItemStack(var7.withQuantity(var21 - var9));
float var22 = var18.computeLifetimeSeconds(var5);
DespawnComponent.trySetDespawn(var5, var11, var17, var5.getComponent(var17, DespawnComponent.getComponentType()), var22);
ColorLight var23 = var18.computeDynamicLight();
if (var23 != null) {
DynamicLight var24 = var5.getComponent(var17, DynamicLight.getComponentType());
if (var24 != null) {
var24.setColorLight(var23);
} else {
var5.putComponent(var17, DynamicLight.getComponentType(), new DynamicLight(var23));
}
}
var7 = var7.withQuantity(var9);
}
var6.setItemStack(var7);
float var25 = var6.computeLifetimeSeconds(var5);
DespawnComponent.trySetDespawn(var5, var11, var15, var3.getComponent(var2, DespawnComponent.getComponentType()), var25);
if (var7.getQuantity() >= var9) {
break;
}
}
}
}
}
}
}
}
}
}