CameraSequencePacketHandler class

Пакет: com.hypixel.hytale.server.core.modules.camera

Файл: com/hypixel/hytale/server/core/modules/camera/CameraSequencePacketHandler.java

implements: SubPacketHandler

Поля (8)

МодификаторыТипИмя
final int MAX_CHUNK
byte var2
CameraSequenceSource var2
CameraSequenceSource var2
PlayerRef var2
int var3
Ref var3
CameraKeyframe[] var4

Методы (6)

МодификаторыВозвратСигнатура
public void beginvoid begin(@Nonnull CameraSequenceSource var1)
private void handleCompletevoid handleComplete(@Nonnull CameraSequenceComplete var1)
private void handleRequestKeyframesvoid handleRequestKeyframes(@Nonnull RequestCameraSequenceKeyframes var1)
if if(var3 > 0)
if if(var2 != null && var1.sequenceId == this.activeSequenceId)
private void onWorldThreadvoid onWorldThread(@Nonnull Runnable var1)

Исходный код

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

class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.protocol.CameraKeyframe;
class="kw">import com.hypixel.hytale.protocol.packets.camera.CameraSequenceComplete;
class="kw">import com.hypixel.hytale.protocol.packets.camera.CameraSequenceKeyframes;
class="kw">import com.hypixel.hytale.protocol.packets.camera.PlayCameraSequence;
class="kw">import com.hypixel.hytale.protocol.packets.camera.RequestCameraSequenceKeyframes;
class="kw">import com.hypixel.hytale.server.core.io.handlers.IPacketHandler;
class="kw">import com.hypixel.hytale.server.core.io.handlers.SubPacketHandler;
class="kw">import com.hypixel.hytale.server.core.universe.PlayerRef;
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">public class CameraSequencePacketHandler class="kw">implements SubPacketHandler {
   class="kw">private class="kw">static class="kw">final int MAX_CHUNK = 128;
   @Nonnull
   class="kw">private class="kw">final IPacketHandler parent;
   class="kw">private byte nextSequenceId;
   class="kw">private byte activeSequenceId;
   @Nullable
   class="kw">private CameraSequenceSource activeSource;

   class="kw">public CameraSequencePacketHandler(@Nonnull IPacketHandler var1) {
      this.parent = var1;
   }

   @Override
   class="kw">public void registerHandlers() {
      this.parent.registerHandler(287, var1 -> this.onWorldThread(() -> this.handleRequestKeyframes((RequestCameraSequenceKeyframes)var1)));
      this.parent.registerHandler(286, var1 -> this.onWorldThread(() -> this.handleComplete((CameraSequenceComplete)var1)));
   }

   class="kw">public void begin(@Nonnull CameraSequenceSource var1) {
      if (var1.keyframeCount() > 0) {
         byte var2 = this.nextSequenceId++;
         this.activeSequenceId = var2;
         this.activeSource = var1;
         this.parent.getPlayerRef().getPacketHandler().writeNoCache(new PlayCameraSequence(var2, var1.flags(), var1.baseFov(), var1.keyframeCount()));
      }
   }

   class="kw">private void handleRequestKeyframes(@Nonnull RequestCameraSequenceKeyframes var1) {
      CameraSequenceSource var2 = this.activeSource;
      if (var2 != null && var1.sequenceId == this.activeSequenceId && var1.fromIndex >= 0 && var1.fromIndex < var2.keyframeCount()) {
         int var3 = Math.min(Math.min(var1.count, 128), var2.keyframeCount() - var1.fromIndex);
         if (var3 > 0) {
            CameraKeyframe[] var4 = new CameraKeyframe[var3];
            var2.writeKeyframes(var1.fromIndex, var3, var4);
            this.parent.getPlayerRef().getPacketHandler().writeNoCache(new CameraSequenceKeyframes(this.activeSequenceId, var1.fromIndex, var4));
         }
      }
   }

   class="kw">private void handleComplete(@Nonnull CameraSequenceComplete var1) {
      CameraSequenceSource var2 = this.activeSource;
      if (var2 != null && var1.sequenceId == this.activeSequenceId) {
         this.activeSource = null;
         var2.onComplete(this.parent.getPlayerRef());
      }
   }

   class="kw">private void onWorldThread(@Nonnull Runnable var1) {
      PlayerRef var2 = this.parent.getPlayerRef();
      Ref var3 = var2.getReference();
      if (var3 != null && var3.isValid()) {
         var3.getStore().getExternalData().getWorld().execute(() -> {
            if (var3.isValid()) {
               var1.run();
            }
         });
      }
   }
}