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 + "}";
}
}