CommandBuffer class

Пакет: com.hypixel.hytale.component

Файл: com/hypixel/hytale/component/CommandBuffer.java

implements: ComponentAccessor<ECS_TYPE>

Поля (12)

МодификаторыТипИмя
boolean var1
CommandBuffer var1
boolean var1
assert var1
Ref[] var3
Ref var3
Throwable var3
Throwable var3
Component var3
Component var3
Throwable var4
Component var4

Методы (27)

МодификаторыВозвратСигнатура
abstract throw new AssertionErrorthrow new AssertionError("setThread should only be called when assertions are enabled!")
abstract throw new AssertionErrorthrow new AssertionError("CommandBuffer must be empty when returned to store!")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("EntityReference is already in use!")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("EntityReference is not for the correct store!")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Not tracking any ref!")
public void addEntitiesvoid addEntities(@Nonnull Holder<ECS_TYPE>[] var1, int var2, @Nonnull Ref<ECS_TYPE>[] var3, int var4, int var5, @Nonnull AddReason var6)
void consumevoid consume()
boolean consumeWasTrackedRefRemovedboolean consumeWasTrackedRefRemoved()
public <T extends Component<ECS_TYPE>> void ensureComponent<T extends Component<ECS_TYPE>> void ensureComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2)
for for(int var4 = 0; var4 < var1.length; var4++)
for for(int var7 = var4; var7 < var4 + var5; var7++)
if if(this.parentBuffer != null)
if if(this.parentBuffer != null)
if if(this.parentBuffer != null)
if if(var3 != null)
if if(this.parentBuffer != null)
if if(this.trackedRef == null)
if if(!var1)
public void mergeParallelvoid mergeParallel(@Nonnull CommandBuffer<ECS_TYPE> var1)
public void removeEntityvoid removeEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull RemoveReason var2)
public <T extends Component<ECS_TYPE>> void replaceComponent<T extends Component<ECS_TYPE>> void replaceComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3)
public void runvoid run(@Nonnull Consumer<Store<ECS_TYPE>> var1)
public boolean setThreadboolean setThread()
private void testRemovedTrackedvoid testRemovedTracked(@Nonnull Ref<ECS_TYPE> var1)
void trackvoid track(@Nonnull Ref<ECS_TYPE> var1)
public void tryRemoveEntityvoid tryRemoveEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull RemoveReason var2)
public void validateEmptyvoid validateEmpty()

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.component;

class="kw">import com.hypixel.hytale.common.util.DebugFlags;
class="kw">import com.hypixel.hytale.component.event.EntityEventType;
class="kw">import com.hypixel.hytale.component.event.EntityHolderEventType;
class="kw">import com.hypixel.hytale.component.event.WorldEventType;
class="kw">import com.hypixel.hytale.component.system.EcsEvent;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.Deque;
class="kw">import java.util.function.Consumer;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class CommandBuffer<ECS_TYPE> class="kw">implements ComponentAccessor<ECS_TYPE> {
   @Nonnull
   class="kw">private class="kw">final Store<ECS_TYPE> store;
   @Nonnull
   class="kw">private class="kw">final Deque<Consumer<Store<ECS_TYPE>>> queue = new ArrayDeque<>();
   @Nullable
   class="kw">private Ref<ECS_TYPE> trackedRef;
   class="kw">private boolean trackedRefRemoved;
   @Nullable
   class="kw">private CommandBuffer<ECS_TYPE> parentBuffer;
   @Nullable
   class="kw">private Thread thread;

   class="kw">protected CommandBuffer(@Nonnull Store<ECS_TYPE> var1) {
      this.store = var1;
      assert this.setThread();
   }

   @Nonnull
   class="kw">public Store<ECS_TYPE> getStore() {
      class="kw">return this.store;
   }

   class="kw">public void run(@Nonnull Consumer<Store<ECS_TYPE>> var1) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var1);
   }

   @Override
   class="kw">public <T class="kw">extends Component<ECS_TYPE>> T getComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
      assert Thread.currentThread() == this.thread;
      class="kw">return this.store.__internal_getComponent(var1, var2);
   }

   @Nonnull
   @Override
   class="kw">public Archetype<ECS_TYPE> getArchetype(@Nonnull Ref<ECS_TYPE> var1) {
      assert Thread.currentThread() == this.thread;
      class="kw">return this.store.__internal_getArchetype(var1);
   }

   @Nonnull
   @Override
   class="kw">public <T class="kw">extends Resource<ECS_TYPE>> T getResource(@Nonnull ResourceType<ECS_TYPE, T> var1) {
      assert Thread.currentThread() == this.thread;
      class="kw">return this.store.__internal_getResource(var1);
   }

   @Nonnull
   @Override
   class="kw">public ECS_TYPE getExternalData() {
      class="kw">return this.store.getExternalData();
   }

   @Nonnull
   @Override
   class="kw">public Ref<ECS_TYPE>[] addEntities(@Nonnull Holder<ECS_TYPE>[] var1, @Nonnull AddReason var2) {
      assert Thread.currentThread() == this.thread;
      Ref[] var3 = new Ref[var1.length];

      for (int var4 = 0; var4 < var1.length; var4++) {
         var3[var4] = new Ref<>(this.store);
      }

      this.queue.add(var3x -> var3x.addEntities(var1, var3, var2));
      class="kw">return var3;
   }

   @Nonnull
   @Override
   class="kw">public Ref<ECS_TYPE> addEntity(@Nonnull Holder<ECS_TYPE> var1, @Nonnull AddReason var2) {
      assert Thread.currentThread() == this.thread;
      Ref var3 = new Ref<>(this.store);
      this.queue.add(var3x -> var3x.addEntity(var1, var3, var2));
      class="kw">return var3;
   }

   class="kw">public void addEntities(@Nonnull Holder<ECS_TYPE>[] var1, int var2, @Nonnull Ref<ECS_TYPE>[] var3, int var4, int var5, @Nonnull AddReason var6) {
      assert Thread.currentThread() == this.thread;

      for (int var7 = var4; var7 < var4 + var5; var7++) {
         var3[var7] = new Ref<>(this.store);
      }

      this.queue.add(var6x -> var6x.addEntities(var1, var2, var3, var4, var5, var6));
   }

   @Nonnull
   class="kw">public Ref<ECS_TYPE> addEntity(@Nonnull Holder<ECS_TYPE> var1, @Nonnull Ref<ECS_TYPE> var2, @Nonnull AddReason var3) {
      if (var2.isValid()) {
         throw new IllegalArgumentException("EntityReference is already in use!");
      }

      if (var2.getStore() != this.store) {
         throw new IllegalArgumentException("EntityReference is not for the correct store!");
      }

      assert Thread.currentThread() == this.thread;
      this.queue.add(var3x -> var3x.addEntity(var1, var2, var3));
      class="kw">return var2;
   }

   @Nonnull
   class="kw">public Holder<ECS_TYPE> copyEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull Holder<ECS_TYPE> var2) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var2x -> var2x.copyEntity(var1, var2));
      class="kw">return var2;
   }

   class="kw">public void tryRemoveEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull RemoveReason var2) {
      assert Thread.currentThread() == this.thread;
      Throwable var3 = DebugFlags.CAPTURE_THROWABLES ? new Throwable() : null;
      this.queue.add(var3x -> {
         if (var1.isValid()) {
            var3x.removeEntity(var1, var3x.getRegistry().newHolder(), var2, var3);
         }
      });
      if (var1.equals(this.trackedRef)) {
         this.trackedRefRemoved = true;
      }

      if (this.parentBuffer != null) {
         this.parentBuffer.testRemovedTracked(var1);
      }
   }

   class="kw">public void removeEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull RemoveReason var2) {
      assert Thread.currentThread() == this.thread;
      Throwable var3 = DebugFlags.CAPTURE_THROWABLES ? new Throwable() : null;
      this.queue.add(var3x -> var3x.removeEntity(var1, var3x.getRegistry().newHolder(), var2, var3));
      if (var1.equals(this.trackedRef)) {
         this.trackedRefRemoved = true;
      }

      if (this.parentBuffer != null) {
         this.parentBuffer.testRemovedTracked(var1);
      }
   }

   @Nonnull
   @Override
   class="kw">public Holder<ECS_TYPE> removeEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull Holder<ECS_TYPE> var2, @Nonnull RemoveReason var3) {
      assert Thread.currentThread() == this.thread;
      Throwable var4 = DebugFlags.CAPTURE_THROWABLES ? new Throwable() : null;
      this.queue.add(var4x -> var4x.removeEntity(var1, var2, var3, var4));
      if (var1.equals(this.trackedRef)) {
         this.trackedRefRemoved = true;
      }

      if (this.parentBuffer != null) {
         this.parentBuffer.testRemovedTracked(var1);
      }

      class="kw">return var2;
   }

   class="kw">public <T class="kw">extends Component<ECS_TYPE>> void ensureComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var2x -> {
         if (var1.isValid()) {
            var2x.ensureComponent(var1, var2);
         }
      });
   }

   @Nonnull
   @Override
   class="kw">public <T class="kw">extends Component<ECS_TYPE>> T ensureAndGetComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
      assert Thread.currentThread() == this.thread;
      Component var3 = this.store.__internal_getComponent(var1, var2);
      if (var3 != null) {
         class="kw">return var3;
      }

      Component var4 = this.store.getRegistry()._internal_getData().createComponent(var2);
      this.queue.add(var3x -> {
         if (var1.isValid()) {
            var3x.addComponent(var1, var2, var4);
         }
      });
      class="kw">return var4;
   }

   @Nonnull
   @Override
   class="kw">public <T class="kw">extends Component<ECS_TYPE>> T addComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
      assert Thread.currentThread() == this.thread;
      Component var3 = this.store.getRegistry()._internal_getData().createComponent(var2);
      this.queue.add(var3x -> {
         if (var1.isValid()) {
            var3x.addComponent(var1, var2, var3);
         }
      });
      class="kw">return var3;
   }

   @Override
   class="kw">public <T class="kw">extends Component<ECS_TYPE>> void addComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var3x -> {
         if (var1.isValid()) {
            var3x.addComponent(var1, var2, var3);
         }
      });
   }

   class="kw">public <T class="kw">extends Component<ECS_TYPE>> void replaceComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var3x -> {
         if (var1.isValid()) {
            var3x.replaceComponent(var1, var2, var3);
         }
      });
   }

   @Override
   class="kw">public <T class="kw">extends Component<ECS_TYPE>> void removeComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var2x -> {
         if (var1.isValid()) {
            var2x.removeComponent(var1, var2);
         }
      });
   }

   @Override
   class="kw">public <T class="kw">extends Component<ECS_TYPE>> void tryRemoveComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var2x -> {
         if (var1.isValid()) {
            var2x.tryRemoveComponent(var1, var2);
         }
      });
   }

   @Override
   class="kw">public <T class="kw">extends Component<ECS_TYPE>> void putComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3) {
      assert Thread.currentThread() == this.thread;
      this.queue.add(var3x -> {
         if (var1.isValid()) {
            var3x.putComponent(var1, var2, var3);
         }
      });
   }

   @Override
   class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull Ref<ECS_TYPE> var1, @Nonnull Event var2) {
      assert Thread.currentThread() == this.thread;
      this.store.internal_invoke(this, var1, var2);
   }

   @Override
   class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull EntityEventType<ECS_TYPE, Event> var1, @Nonnull Ref<ECS_TYPE> var2, @Nonnull Event var3) {
      assert Thread.currentThread() == this.thread;
      this.store.internal_invoke(this, var1, var2, var3);
   }

   @Override
   class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull Holder<ECS_TYPE> var1, @Nonnull Event var2) {
      assert Thread.currentThread() == this.thread;
      this.store.internal_invoke(this, var1, var2);
   }

   @Override
   class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull EntityHolderEventType<ECS_TYPE, Event> var1, @Nonnull Holder<ECS_TYPE> var2, @Nonnull Event var3) {
      assert Thread.currentThread() == this.thread;
      this.store.internal_invoke(this, var1, var2, var3);
   }

   @Override
   class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull Event var1) {
      assert Thread.currentThread() == this.thread;
      this.store.internal_invoke(this, var1);
   }

   @Override
   class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull WorldEventType<ECS_TYPE, Event> var1, @Nonnull Event var2) {
      assert Thread.currentThread() == this.thread;
      this.store.internal_invoke(this, var1, var2);
   }

   void track(@Nonnull Ref<ECS_TYPE> var1) {
      this.trackedRef = var1;
   }

   class="kw">private void testRemovedTracked(@Nonnull Ref<ECS_TYPE> var1) {
      if (var1.equals(this.trackedRef)) {
         this.trackedRefRemoved = true;
      }

      if (this.parentBuffer != null) {
         this.parentBuffer.testRemovedTracked(var1);
      }
   }

   boolean consumeWasTrackedRefRemoved() {
      if (this.trackedRef == null) {
         throw new IllegalStateException("Not tracking any ref!");
      }

      boolean var1 = this.trackedRefRemoved;
      this.trackedRefRemoved = false;
      class="kw">return var1;
   }

   void consume() {
      this.trackedRef = null;
      this.trackedRefRemoved = false;
      assert Thread.currentThread() == this.thread;

      while (!this.queue.isEmpty()) {
         this.queue.pop().accept(this.store);
      }

      this.store.storeCommandBuffer(this);
   }

   @Nonnull
   class="kw">public CommandBuffer<ECS_TYPE> fork() {
      CommandBuffer var1 = this.store.takeCommandBuffer();
      var1.parentBuffer = this;
      class="kw">return var1;
   }

   class="kw">public void mergeParallel(@Nonnull CommandBuffer<ECS_TYPE> var1) {
      this.trackedRef = null;
      this.trackedRefRemoved = false;
      this.parentBuffer = null;

      while (!this.queue.isEmpty()) {
         var1.queue.add(this.queue.pop());
      }

      this.store.storeCommandBuffer(this);
   }

   class="kw">public boolean setThread() {
      boolean var1;
      assert var1 = true;
      if (!var1) {
         throw new AssertionError("setThread should only be called when assertions are enabled!");
      }

      this.thread = Thread.currentThread();
      class="kw">return true;
   }

   class="kw">public void validateEmpty() {
      if (!this.queue.isEmpty()) {
         throw new AssertionError("CommandBuffer must be empty when returned to store!");
      }
   }
}