WindowManager class

Пакет: com.hypixel.hytale.server.core.entity.entities.player.windows

Файл: com/hypixel/hytale/server/core/entity/entities/player/windows/WindowManager.java

Поля (27)

МодификаторыТипИмя
ObjectListIterator var10
OpenWindow var11
InventorySection var2
var2
Window var2
Window var2
PlayerRef var3
int var4
int var4
ObjectList var4
ItemContainer var4
PlayerRef var4
Ref var4
Window var5
InventorySection var5
var5
ExtraResources var5
var5
Window var5
Store var5
InventorySection var6
var6
ExtraResources var8
var8
ExtraResources var9
var9
OpenWindow var9

Методы (31)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("id is outside of the range, use addWindow")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("id is invalid, can't be 0 or -1")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Window " + var1 + " already exists")
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("Window id -1 is invalid!")
abstract throw new IllegalStateExceptionthrow new IllegalStateException("Window id " + var2 + " is invalid!")
public void closeAllWindowsvoid closeAllWindows(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)
static <W extends Window> void closeAndRemoveAll<W extends Window> void closeAndRemoveAll(@Nonnull Map<UUID, W> var0)
for for(Window var8 : var3)
if if(var5 != null)
if if(var5 instanceof ItemContainerWindow)
if if(var2 instanceof ItemContainerWindow var7)
if if(var2 instanceof MaterialContainerWindow var8)
if if(var2 instanceof ItemContainerWindow var6)
if if(var2 instanceof MaterialContainerWindow var7)
if if(var9 == null)
if if(var1 != 0 && var1 != -1)
if if(var2 instanceof ItemContainerWindow var3)
if if(var1 == -1)
if if(var1 instanceof ItemContainerWindow var3)
if if(var2 == -1)
if if(var5 instanceof ItemContainerWindow)
if if(var5 == null)
if if(var2 != null)
if if(var3 != null)
public void initvoid init(@Nonnull PlayerRef var1)
public void markWindowChangedvoid markWindowChanged(int var1)
public void setWindowvoid setWindow(int var1, @Nonnull Window var2)
private void setWindow0void setWindow0(int var1, @Nonnull Window var2)
public void updateWindowvoid updateWindow(@Nonnull Window var1)
public void updateWindowsvoid updateWindows()
public void validateWindowsvoid validateWindows(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2)

Исходный код

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

class="kw">import com.hypixel.fastutil.ints.Int2ObjectConcurrentHashMap;
class="kw">import com.hypixel.hytale.component.ComponentAccessor;
class="kw">import com.hypixel.hytale.component.Ref;
class="kw">import com.hypixel.hytale.component.Store;
class="kw">import com.hypixel.hytale.event.EventPriority;
class="kw">import com.hypixel.hytale.event.EventRegistration;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.protocol.ExtraResources;
class="kw">import com.hypixel.hytale.protocol.InventorySection;
class="kw">import com.hypixel.hytale.protocol.packets.window.CloseWindow;
class="kw">import com.hypixel.hytale.protocol.packets.window.OpenWindow;
class="kw">import com.hypixel.hytale.protocol.packets.window.UpdateWindow;
class="kw">import com.hypixel.hytale.server.core.inventory.container.ItemContainer;
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 it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.util.Iterator;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.UUID;
class="kw">import java.util.concurrent.atomic.AtomicInteger;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class WindowManager {
   @Nonnull
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">final AtomicInteger windowId = new AtomicInteger(1);
   @Nonnull
   class="kw">private class="kw">final Int2ObjectConcurrentHashMap<Window> windows = new Int2ObjectConcurrentHashMap<>();
   @Nonnull
   class="kw">private class="kw">final Int2ObjectConcurrentHashMap<EventRegistration<?, ?>> windowChangeEvents = new Int2ObjectConcurrentHashMap<>();
   class="kw">private PlayerRef playerRef;

   class="kw">public WindowManager() {
   }

   class="kw">public void init(@Nonnull PlayerRef var1) {
      this.playerRef = var1;
   }

   @Nullable
   class="kw">public UpdateWindow clientOpenWindow(@Nonnull Ref<EntityStore> var1, @Nonnull Window var2, @Nonnull Store<EntityStore> var3) {
      if (!Window.CLIENT_REQUESTABLE_WINDOW_TYPES.containsKey(var2.getType())) {
         throw new IllegalArgumentException("Client opened window must be registered in Window.CLIENT_REQUESTABLE_WINDOW_TYPES but got: " + var2.getType());
      }

      int var4 = 0;
      Window var5 = this.windows.remove(0);
      if (var5 != null) {
         if (var5 class="kw">instanceof ItemContainerWindow) {
            this.windowChangeEvents.remove(var5.getId()).unregister();
         }

         var5.onClose(var1, var3);
         LOGGER.at(Level.FINE).log("%s close window %s with id %s", this.playerRef.getUuid(), var5.getType(), 0);
      }

      this.setWindow0(0, var2);
      if (!var2.onOpen(var1, var3)) {
         this.closeWindow(var1, 0, var3);
         var2.setId(-1);
         class="kw">return null;
      }

      if (!var2.consumeIsDirty()) {
         class="kw">return null;
      }

      InventorySection var6 = null;
      if (var2 class="kw">instanceof ItemContainerWindow var7) {
         var6 = var7.getItemContainer().toPacket();
      }

      ExtraResources var9 = null;
      if (var2 class="kw">instanceof MaterialContainerWindow var8) {
         var9 = var8.getExtraResourcesSection().toPacket();
      }

      class="kw">return new UpdateWindow(0, var2.getData().toString(), var6, var9);
   }

   @Nullable
   class="kw">public OpenWindow openWindow(@Nonnull Ref<EntityStore> var1, @Nonnull Window var2, @Nonnull Store<EntityStore> var3) {
      int var4 = this.windowId.getAndUpdate(var0 -> {
         var0++;
         class="kw">return var0 > 0 ? var0 : 1;
      });
      this.setWindow(var4, var2);
      if (!var2.onOpen(var1, var3)) {
         this.closeWindow(var1, var4, var3);
         var2.setId(-1);
         class="kw">return null;
      }

      var2.consumeIsDirty();
      LOGGER.at(Level.FINE).log("%s opened window %s with id %s and data %s", this.playerRef.getUuid(), var2.getType(), var4, var2.getData());
      InventorySection var5 = null;
      if (var2 class="kw">instanceof ItemContainerWindow var6) {
         var5 = var6.getItemContainer().toPacket();
      }

      ExtraResources var8 = null;
      if (var2 class="kw">instanceof MaterialContainerWindow var7) {
         var8 = var7.getExtraResourcesSection().toPacket();
      }

      class="kw">return new OpenWindow(var4, var2.getType(), var2.getData().toString(), var5, var8);
   }

   @Nullable
   class="kw">public List<OpenWindow> openWindows(@Nonnull Ref<EntityStore> var1, @Nonnull Store<EntityStore> var2, @Nonnull Window... var3) {
      ObjectList var4 = new ObjectArrayList();

      for (Window var8 : var3) {
         OpenWindow var9 = this.openWindow(var1, var8, var2);
         if (var9 == null) {
            ObjectListIterator var10 = var4.iterator();

            while (var10.hasNext()) {
               OpenWindow var11 = (OpenWindow)var10.next();
               this.closeWindow(var1, var11.id, var2);
            }

            class="kw">return null;
         }

         var4.add(var9);
      }

      class="kw">return var4;
   }

   class="kw">public void setWindow(int var1, @Nonnull Window var2) {
      if (var1 >= this.windowId.get()) {
         throw new IllegalArgumentException("id is outside of the range, use addWindow");
      }

      if (var1 != 0 && var1 != -1) {
         this.setWindow0(var1, var2);
      } else {
         throw new IllegalArgumentException("id is invalid, can't be 0 or -1");
      }
   }

   class="kw">private void setWindow0(int var1, @Nonnull Window var2) {
      if (this.windows.putIfAbsent(var1, var2) != null) {
         throw new IllegalArgumentException("Window " + var1 + " already exists");
      }

      var2.setId(var1);
      var2.init(this.playerRef, this);
      if (var2 class="kw">instanceof ItemContainerWindow var3) {
         ItemContainer var4 = var3.getItemContainer();
         this.windowChangeEvents.put(var1, var4.registerChangeEvent(EventPriority.LAST, var2x -> this.markWindowChanged(var1)));
      }
   }

   @Nullable
   class="kw">public Window getWindow(int var1) {
      if (var1 == -1) {
         throw new IllegalArgumentException("Window id -1 is invalid!");
      } else {
         class="kw">return this.windows.get(var1);
      }
   }

   @Nonnull
   class="kw">public List<Window> getWindows() {
      class="kw">return new ObjectArrayList(this.windows.values());
   }

   class="kw">public void updateWindow(@Nonnull Window var1) {
      InventorySection var2 = null;
      if (var1 class="kw">instanceof ItemContainerWindow var3) {
         var2 = var3.getItemContainer().toPacket();
      }

      ExtraResources var5 = null;
      if (var1 class="kw">instanceof MaterialContainerWindow var4 && !var4.isValid()) {
         var5 = var4.getExtraResourcesSection().toPacket();
      }

      this.playerRef.getPacketHandler().writeNoCache(new UpdateWindow(var1.getId(), var1.getData().toString(), var2, var5));
      var1.consumeNeedRebuild();
      LOGGER.at(Level.FINER).log("%s update window %s with id %s and data %s", this.playerRef.getUuid(), var1.getType(), var1.getId(), var1.getData());
   }

   @Nonnull
   class="kw">public Window closeWindow(@Nonnull Ref<EntityStore> var1, int var2, @Nonnull ComponentAccessor<EntityStore> var3) {
      if (var2 == -1) {
         throw new IllegalArgumentException("Window id -1 is invalid!");
      }

      PlayerRef var4 = var3.getComponent(var1, PlayerRef.getComponentType());
      assert var4 != null;
      var4.getPacketHandler().writeNoCache(new CloseWindow(var2));
      Window var5 = this.windows.remove(var2);
      if (var5 class="kw">instanceof ItemContainerWindow) {
         this.windowChangeEvents.remove(var5.getId()).unregister();
      }

      if (var5 == null) {
         throw new IllegalStateException("Window id " + var2 + " is invalid!");
      }

      var5.onClose(var1, var3);
      LOGGER.at(Level.FINE).log("%s close window %s with id %s", this.playerRef.getUuid(), var5.getType(), var2);
      class="kw">return var5;
   }

   class="kw">public void closeAllWindows(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      for (Window var4 : this.windows.values()) {
         var4.close(var1, var2);
      }
   }

   class="kw">public void markWindowChanged(int var1) {
      Window var2 = this.getWindow(var1);
      if (var2 != null) {
         var2.invalidate();
      }
   }

   class="kw">public void updateWindows() {
      this.windows.forEach((var0, var1, var2) -> {
         if (var1.consumeIsDirty()) {
            var2.updateWindow(var1);
         }
      }, this);
   }

   class="kw">public void validateWindows(@Nonnull Ref<EntityStore> var1, @Nonnull ComponentAccessor<EntityStore> var2) {
      for (Window var4 : this.windows.values()) {
         if (var4 class="kw">instanceof ValidatedWindow var5 && !var5.validate(var1, var2)) {
            var4.close(var1, var2);
         }
      }
   }

   class="kw">public class="kw">static <W class="kw">extends Window> void closeAndRemoveAll(@Nonnull Map<UUID, W> var0) {
      for (Iterator var1 = var0.values().iterator(); var1.hasNext(); var1.remove()) {
         Window var2 = (W)var1.next();
         PlayerRef var3 = var2.getPlayerRef();
         if (var3 != null) {
            Ref var4 = var3.getReference();
            if (var4 != null && var4.isValid()) {
               Store var5 = var4.getStore();
               var2.close(var4, var5);
            }
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "WindowManager{windowId=" + this.windowId + ", windows=" + this.windows + "}";
   }
}