Merge pull request 'Remove more Reflection usage' (#368) from ReduceReflection into main

Reviewed-on: SteamWar/SteamWar#368
This commit is contained in:
2026-05-16 22:24:54 +02:00
146 changed files with 521 additions and 1057 deletions
@@ -210,7 +210,7 @@ public abstract class LoaderInteractionElement<T extends Enum<T> & LoaderSetting
} }
if (currentElement.hasTicks(this)) { if (currentElement.hasTicks(this)) {
swInventory.setItem(ticksStart + 3, new SWItem(SWItem.getDye(1), BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> { swInventory.setItem(ticksStart + 3, new SWItem(Material.RED_DYE, BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> {
long ticks = extraTicks.get(index); long ticks = extraTicks.get(index);
ticks -= clickType.isShiftClick() ? 5 : 1; ticks -= clickType.isShiftClick() ? 5 : 1;
if (ticks < 1) ticks = 1; if (ticks < 1) ticks = 1;
@@ -234,7 +234,7 @@ public abstract class LoaderInteractionElement<T extends Enum<T> & LoaderSetting
swAnvilInv.open(); swAnvilInv.open();
}); });
swInventory.setItem(ticksStart + 5, new SWItem(SWItem.getDye(10), BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> { swInventory.setItem(ticksStart + 5, new SWItem(Material.LIME_DYE, BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> {
long ticks = extraTicks.get(index); long ticks = extraTicks.get(index);
ticks += clickType.isShiftClick() ? 5 : 1; ticks += clickType.isShiftClick() ? 5 : 1;
extraTicks.set(index, ticks); extraTicks.set(index, ticks);
@@ -63,7 +63,7 @@ public class LoaderWait implements LoaderElement {
for (int i = 9; i < 18; i++) swInventory.setItem(i, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§7")); for (int i = 9; i < 18; i++) swInventory.setItem(i, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§7"));
swInventory.setItem(9, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_BACK", player)).setCustomModelData(CMDs.BACK).getItemStack(), clickType -> backAction.run()); swInventory.setItem(9, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_BACK", player)).setCustomModelData(CMDs.BACK).getItemStack(), clickType -> backAction.run());
swInventory.setItem(3, new SWItem(SWItem.getDye(1), BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> { swInventory.setItem(3, new SWItem(Material.RED_DYE, BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> {
delay -= clickType.isShiftClick() ? 5 : 1; delay -= clickType.isShiftClick() ? 5 : 1;
if (delay < 0) delay = 0; if (delay < 0) delay = 0;
swInventory.setItem(4, menu(player)); swInventory.setItem(4, menu(player));
@@ -80,7 +80,7 @@ public class LoaderWait implements LoaderElement {
}); });
swAnvilInv.open(); swAnvilInv.open();
}); });
swInventory.setItem(5, new SWItem(SWItem.getDye(10), BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> { swInventory.setItem(5, new SWItem(Material.LIME_DYE, BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_ADD_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> {
delay += clickType.isShiftClick() ? 5 : 1; delay += clickType.isShiftClick() ? 5 : 1;
swInventory.setItem(4, menu(player)); swInventory.setItem(4, menu(player));
}); });
@@ -69,7 +69,7 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = simulatorGroup.getBaseTick(); int baseTicks = simulatorGroup.getBaseTick();
inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); simulatorGroup.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
@@ -83,7 +83,7 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(baseTicks > 0 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
simulatorGroup.changeBaseTicks(-baseTicks); simulatorGroup.changeBaseTicks(-baseTicks);
} else { } else {
@@ -163,7 +163,7 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
} }
//Pos X //Pos X
inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0, 0); simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
@@ -177,13 +177,13 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).setItem(Material.PAPER).open(); }, this).setItem(Material.PAPER).open();
})); }));
inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> {
simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0, 0); simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0); simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
@@ -197,13 +197,13 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).setItem(Material.PAPER).open(); }, this).setItem(Material.PAPER).open();
})); }));
inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> {
simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0); simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1); simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
@@ -217,7 +217,7 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).setItem(Material.PAPER).open(); }, this).setItem(Material.PAPER).open();
})); }));
inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> {
simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1); simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
@@ -149,13 +149,13 @@ public class SimulatorObserverGui extends SimulatorScrollGui<ObserverPhase> {
Supplier<Integer> getter = observerPhase::getTickOffset; Supplier<Integer> getter = observerPhase::getTickOffset;
Consumer<Integer> setter = observerPhase::setTickOffset; Consumer<Integer> setter = observerPhase::setTickOffset;
return new SWItem[] { return new SWItem[] {
new SWItem(SWItem.getDye(getter.get() < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(getter.get() < max ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
observer, observer,
new SWItem(SWItem.getDye(getter.get() > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> { new SWItem(getter.get() > min ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -169,13 +169,13 @@ public class SimulatorObserverGui extends SimulatorScrollGui<ObserverPhase> {
@Override @Override
public SWItem[] lastColumn() { public SWItem[] lastColumn() {
return new SWItem[]{ return new SWItem[]{
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
addNewPhase(clickType.isShiftClick()); addNewPhase(clickType.isShiftClick());
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
new SWItem(Material.QUARTZ, "§eObserver§8:§a New Phase", clickType -> { new SWItem(Material.QUARTZ, "§eObserver§8:§a New Phase", clickType -> {
addNewPhase(false); addNewPhase(false);
}).setCustomModelData(CMDs.Simulator.NEW_PHASE), }).setCustomModelData(CMDs.Simulator.NEW_PHASE),
new SWItem(SWItem.getDye(8), "§7", clickType -> { new SWItem(Material.GRAY_DYE, "§7", clickType -> {
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
}; };
} }
@@ -96,7 +96,7 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
//Tick Offset //Tick Offset
int offset = observer.getTickOffset(); int offset = observer.getTickOffset();
inventory.setItem(10, new SWItem(SWItem.getDye(offset < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(10, new SWItem(offset < max ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.setTickOffset(Math.min(max, offset + (clickType.isShiftClick() ? 5 : 1))); observer.setTickOffset(Math.min(max, offset + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -113,7 +113,7 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64))); offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64)));
inventory.setItem(19, offsetItem); inventory.setItem(19, offsetItem);
inventory.setItem(28, new SWItem(SWItem.getDye(offset > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(28, new SWItem(offset > min ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1))); observer.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -121,7 +121,7 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
//Order //Order
int order = observer.getOrder(); int order = observer.getOrder();
inventory.setItem(13, new SWItem(SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(13, new SWItem(order < SimulatorPhase.ORDER_LIMIT ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1))); observer.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -139,7 +139,7 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30))); orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30)));
inventory.setItem(22, orderItem); inventory.setItem(22, orderItem);
inventory.setItem(31, new SWItem(SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(31, new SWItem(order > -SimulatorPhase.ORDER_LIMIT ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1))); observer.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -67,7 +67,7 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = observer.getBaseTick(); int baseTicks = observer.getBaseTick();
inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); observer.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -82,7 +82,7 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(baseTicks > 0 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
observer.changeBaseTicks(-baseTicks); observer.changeBaseTicks(-baseTicks);
@@ -93,7 +93,7 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos X //Pos X
inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.move(clickType.isShiftClick() ? 5 : 1, 0, 0); observer.move(clickType.isShiftClick() ? 5 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -105,14 +105,14 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.move(clickType.isShiftClick() ? -5 : -1, 0, 0); observer.move(clickType.isShiftClick() ? -5 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.move(0, clickType.isShiftClick() ? 5 : 1, 0); observer.move(0, clickType.isShiftClick() ? 5 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -124,14 +124,14 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.move(0, clickType.isShiftClick() ? -5 : -1, 0); observer.move(0, clickType.isShiftClick() ? -5 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.move(0, 0, clickType.isShiftClick() ? 5 : 1); observer.move(0, 0, clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -143,7 +143,7 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
observer.move(0, 0, clickType.isShiftClick() ? -5 : -1); observer.move(0, 0, clickType.isShiftClick() ? -5 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -164,13 +164,13 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui<SimulatorRedstoneGu
Supplier<Integer> getter = redstoneSubPhase.place ? redstoneSubPhase.phase::getTickOffset : redstoneSubPhase.phase::getLifetime; Supplier<Integer> getter = redstoneSubPhase.place ? redstoneSubPhase.phase::getTickOffset : redstoneSubPhase.phase::getLifetime;
Consumer<Integer> setter = redstoneSubPhase.place ? redstoneSubPhase.phase::setTickOffset : redstoneSubPhase.phase::setLifetime; Consumer<Integer> setter = redstoneSubPhase.place ? redstoneSubPhase.phase::setTickOffset : redstoneSubPhase.phase::setLifetime;
return new SWItem[] { return new SWItem[] {
new SWItem(SWItem.getDye(getter.get() < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(getter.get() < max ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
redstone, redstone,
new SWItem(SWItem.getDye(getter.get() > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> { new SWItem(getter.get() > min ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -184,13 +184,13 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui<SimulatorRedstoneGu
@Override @Override
public SWItem[] lastColumn() { public SWItem[] lastColumn() {
return new SWItem[]{ return new SWItem[]{
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
addNewPhase(clickType.isShiftClick()); addNewPhase(clickType.isShiftClick());
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
new SWItem(Material.REDSTONE, "§eRedstone§8:§a New Phase", clickType -> { new SWItem(Material.REDSTONE, "§eRedstone§8:§a New Phase", clickType -> {
addNewPhase(false); addNewPhase(false);
}).setCustomModelData(CMDs.Simulator.NEW_PHASE), }).setCustomModelData(CMDs.Simulator.NEW_PHASE),
new SWItem(SWItem.getDye(8), "§7", clickType -> { new SWItem(Material.GRAY_DYE, "§7", clickType -> {
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
}; };
} }
@@ -97,7 +97,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
//Tick Offset //Tick Offset
int offset = redstone.getTickOffset(); int offset = redstone.getTickOffset();
inventory.setItem(10, new SWItem(SWItem.getDye(offset < maxOffset ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(10, new SWItem(offset < maxOffset ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.setTickOffset(Math.min(maxOffset, offset + (clickType.isShiftClick() ? 5 : 1))); redstone.setTickOffset(Math.min(maxOffset, offset + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -114,7 +114,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64))); offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64)));
inventory.setItem(19, offsetItem); inventory.setItem(19, offsetItem);
inventory.setItem(28, new SWItem(SWItem.getDye(offset > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(28, new SWItem(offset > min ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1))); redstone.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -122,7 +122,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
//Lifetime //Lifetime
int lifetime = redstone.getLifetime(); int lifetime = redstone.getLifetime();
inventory.setItem(11, new SWItem(SWItem.getDye(lifetime < maxLifetime ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(11, new SWItem(lifetime < maxLifetime ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.setLifetime(Math.min(maxLifetime, lifetime + (clickType.isShiftClick() ? 5 : 1))); redstone.setLifetime(Math.min(maxLifetime, lifetime + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -139,7 +139,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64))); lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64)));
inventory.setItem(20, lifetimeItem); inventory.setItem(20, lifetimeItem);
inventory.setItem(29, new SWItem(SWItem.getDye(lifetime > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(29, new SWItem(lifetime > 0 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.setLifetime(Math.max(0, lifetime - (clickType.isShiftClick() ? 5 : 1))); redstone.setLifetime(Math.max(0, lifetime - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -147,7 +147,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
//Order //Order
int order = redstone.getOrder(); int order = redstone.getOrder();
inventory.setItem(13, new SWItem(SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(13, new SWItem(order < SimulatorPhase.ORDER_LIMIT ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1))); redstone.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -165,7 +165,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30))); orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30)));
inventory.setItem(22, orderItem); inventory.setItem(22, orderItem);
inventory.setItem(31, new SWItem(SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(31, new SWItem(order > -SimulatorPhase.ORDER_LIMIT ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1))); redstone.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -66,7 +66,7 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = redstone.getBaseTick(); int baseTicks = redstone.getBaseTick();
inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); redstone.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -81,7 +81,7 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(baseTicks > 0 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
redstone.changeBaseTicks(-baseTicks); redstone.changeBaseTicks(-baseTicks);
@@ -92,7 +92,7 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos X //Pos X
inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.move(clickType.isShiftClick() ? 5 : 1, 0, 0); redstone.move(clickType.isShiftClick() ? 5 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -104,14 +104,14 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.move(clickType.isShiftClick() ? -5 : -1, 0, 0); redstone.move(clickType.isShiftClick() ? -5 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.move(0, clickType.isShiftClick() ? 5 : 1, 0); redstone.move(0, clickType.isShiftClick() ? 5 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -123,14 +123,14 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.move(0, clickType.isShiftClick() ? -5 : -1, 0); redstone.move(0, clickType.isShiftClick() ? -5 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.move(0, 0, clickType.isShiftClick() ? 5 : 1); redstone.move(0, 0, clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -142,7 +142,7 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
redstone.move(0, 0, clickType.isShiftClick() ? -5 : -1); redstone.move(0, 0, clickType.isShiftClick() ? -5 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -66,37 +66,37 @@ public class SimulatorSettingsGui extends SimulatorBaseGui {
})); }));
//Pos X //Pos X
inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulator.move(clickType.isShiftClick() ? 5 : 1, 0, 0); simulator.move(clickType.isShiftClick() ? 5 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(24, new SWItem(Material.PAPER, "§eX", clickType -> { inventory.setItem(24, new SWItem(Material.PAPER, "§eX", clickType -> {
})); }));
inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
simulator.move(clickType.isShiftClick() ? -5 : -1, 0, 0); simulator.move(clickType.isShiftClick() ? -5 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulator.move(0, clickType.isShiftClick() ? 5 : 1, 0); simulator.move(0, clickType.isShiftClick() ? 5 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(25, new SWItem(Material.PAPER, "§eY", clickType -> { inventory.setItem(25, new SWItem(Material.PAPER, "§eY", clickType -> {
})); }));
inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
simulator.move(0, clickType.isShiftClick() ? -5 : -1, 0); simulator.move(0, clickType.isShiftClick() ? -5 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulator.move(0, 0, clickType.isShiftClick() ? 5 : 1); simulator.move(0, 0, clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(26, new SWItem(Material.PAPER, "§eZ", clickType -> { inventory.setItem(26, new SWItem(Material.PAPER, "§eZ", clickType -> {
})); }));
inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
simulator.move(0, 0, clickType.isShiftClick() ? -5 : -1); simulator.move(0, 0, clickType.isShiftClick() ? -5 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
@@ -134,13 +134,13 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
tnt.getItemStack().setAmount(Math.min(tntSetting.getCount(), 64)); tnt.getItemStack().setAmount(Math.min(tntSetting.getCount(), 64));
return new SWItem[]{ return new SWItem[]{
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tntSetting.setCount(tntSetting.getCount() + (clickType.isShiftClick() ? 5 : 1)); tntSetting.setCount(tntSetting.getCount() + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
tnt, tnt,
new SWItem(SWItem.getDye(tntSetting.getCount() > 1 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> { new SWItem(tntSetting.getCount() > 1 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tntSetting.setCount(Math.max(1, tntSetting.getCount() - (clickType.isShiftClick() ? 5 : 1))); tntSetting.setCount(Math.max(1, tntSetting.getCount() - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -154,13 +154,13 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
@Override @Override
public SWItem[] lastColumn() { public SWItem[] lastColumn() {
return new SWItem[]{ return new SWItem[]{
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
addNewPhase(clickType.isShiftClick()); addNewPhase(clickType.isShiftClick());
}).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
new SWItem(Material.GUNPOWDER, "§eTNT§8:§a New Phase", clickType -> { new SWItem(Material.GUNPOWDER, "§eTNT§8:§a New Phase", clickType -> {
addNewPhase(false); addNewPhase(false);
}).setCustomModelData(CMDs.Simulator.NEW_PHASE), }).setCustomModelData(CMDs.Simulator.NEW_PHASE),
new SWItem(SWItem.getDye(8), "§7", clickType -> { new SWItem(Material.GRAY_DYE, "§7", clickType -> {
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
}; };
} }
@@ -77,7 +77,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
//Count //Count
int count = tnt.getCount(); int count = tnt.getCount();
inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setCount(count + (clickType.isShiftClick() ? 5 : 1)); tnt.setCount(count + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -94,7 +94,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
countItem.getItemStack().setAmount(Math.max(1, Math.min(count, 64))); countItem.getItemStack().setAmount(Math.max(1, Math.min(count, 64)));
inventory.setItem(18, countItem); inventory.setItem(18, countItem);
inventory.setItem(27, new SWItem(SWItem.getDye(count > 1 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(count > 1 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setCount(Math.max(1, count - (clickType.isShiftClick() ? 5 : 1))); tnt.setCount(Math.max(1, count - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -102,7 +102,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
//Tick Offset //Tick Offset
int offset = tnt.getTickOffset(); int offset = tnt.getTickOffset();
inventory.setItem(10, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(10, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setTickOffset(offset + (clickType.isShiftClick() ? 5 : 1)); tnt.setTickOffset(offset + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -119,7 +119,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64))); offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64)));
inventory.setItem(19, offsetItem); inventory.setItem(19, offsetItem);
inventory.setItem(28, new SWItem(SWItem.getDye(offset > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(28, new SWItem(offset > 0 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setTickOffset(Math.max(0, offset - (clickType.isShiftClick() ? 5 : 1))); tnt.setTickOffset(Math.max(0, offset - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -127,7 +127,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
//Lifetime //Lifetime
int lifetime = tnt.getLifetime(); int lifetime = tnt.getLifetime();
inventory.setItem(11, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(11, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setLifetime(lifetime + (clickType.isShiftClick() ? 5 : 1)); tnt.setLifetime(lifetime + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -144,7 +144,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64))); lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64)));
inventory.setItem(20, lifetimeItem); inventory.setItem(20, lifetimeItem);
inventory.setItem(29, new SWItem(SWItem.getDye(lifetime > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(29, new SWItem(lifetime > 0 ? Material.GRAY_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setLifetime(Math.max(1, lifetime - (clickType.isShiftClick() ? 5 : 1))); tnt.setLifetime(Math.max(1, lifetime - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -152,7 +152,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
//Order //Order
int order = tnt.getOrder(); int order = tnt.getOrder();
inventory.setItem(13, new SWItem(SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(13, new SWItem(order < SimulatorPhase.ORDER_LIMIT ? Material.LIME_DYE : Material.GRAY_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1))); tnt.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -170,7 +170,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30))); orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30)));
inventory.setItem(22, orderItem); inventory.setItem(22, orderItem);
inventory.setItem(31, new SWItem(SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(31, new SWItem(order > -SimulatorPhase.ORDER_LIMIT ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1))); tnt.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -75,7 +75,7 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = tnt.getBaseTick(); int baseTicks = tnt.getBaseTick();
inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); tnt.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -90,7 +90,7 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(baseTicks > 0 ? Material.RED_DYE : Material.GRAY_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
tnt.changeBaseTicks(-baseTicks); tnt.changeBaseTicks(-baseTicks);
@@ -138,7 +138,7 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
inventory.setItem(30, positivXItem); inventory.setItem(30, positivXItem);
// Pos X // Pos X
inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> { inventory.setItem(15, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.move(clickType.isShiftClick() ? 0.0625 : 1, 0, 0); tnt.move(clickType.isShiftClick() ? 0.0625 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -150,14 +150,14 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> { inventory.setItem(33, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.move(clickType.isShiftClick() ? -0.0625 : -1, 0, 0); tnt.move(clickType.isShiftClick() ? -0.0625 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
// Pos Y // Pos Y
inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> { inventory.setItem(16, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.move(0, clickType.isShiftClick() ? 0.0625 : 1, 0); tnt.move(0, clickType.isShiftClick() ? 0.0625 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -169,14 +169,14 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> { inventory.setItem(34, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.move(0, clickType.isShiftClick() ? -0.0625 : -1, 0); tnt.move(0, clickType.isShiftClick() ? -0.0625 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED)); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
// Pos Z // Pos Z
inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> { inventory.setItem(17, new SWItem(Material.LIME_DYE, "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.move(0, 0, clickType.isShiftClick() ? 0.0625 : 1); tnt.move(0, 0, clickType.isShiftClick() ? 0.0625 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -188,7 +188,7 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> { inventory.setItem(35, new SWItem(Material.RED_DYE, "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> {
if (clickType == ClickType.DOUBLE_CLICK) return; if (clickType == ClickType.DOUBLE_CLICK) return;
tnt.move(0, 0, clickType.isShiftClick() ? -0.0625 : -1); tnt.move(0, 0, clickType.isShiftClick() ? -0.0625 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
@@ -23,6 +23,7 @@ import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.data.CMDs; import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
@@ -51,14 +52,14 @@ public abstract class SimulatorPageGui<T> extends SimulatorBaseGui {
headerAndFooter(); headerAndFooter();
page = Math.min(page, maxPage()); page = Math.min(page, maxPage());
inventory.setItem(size - 9, new SWItem(SWItem.getDye(page > 0 ? 10 : 8), page > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(page > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 9, new SWItem(page > 0 ? Material.LIME_DYE : Material.GRAY_DYE, page > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(page > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> {
if (page > 0) { if (page > 0) {
page--; page--;
open(); open();
} }
}).setCustomModelData(CMDs.PREVIOUS_PAGE)); }).setCustomModelData(CMDs.PREVIOUS_PAGE));
boolean hasNext = page < maxPage() - (data.size() % (size - 18) == 0 ? 1 : 0); boolean hasNext = page < maxPage() - (data.size() % (size - 18) == 0 ? 1 : 0);
inventory.setItem(size - 1, new SWItem(SWItem.getDye(hasNext ? 10 : 8), hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 1, new SWItem(hasNext ? Material.LIME_DYE : Material.GRAY_DYE, hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> {
if (hasNext) { if (hasNext) {
page++; page++;
open(); open();
@@ -24,6 +24,7 @@ import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.data.CMDs; import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.List; import java.util.List;
@@ -51,14 +52,14 @@ public abstract class SimulatorScrollGui<T> extends SimulatorBaseGui {
headerAndFooter(); headerAndFooter();
scroll = maxScroll(); scroll = maxScroll();
inventory.setItem(size - 9, new SWItem(SWItem.getDye(scroll > 0 ? 10 : 8), scroll > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(scroll > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 9, new SWItem(scroll > 0 ? Material.LIME_DYE : Material.GRAY_DYE, scroll > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(scroll > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> {
if (scroll > 0) { if (scroll > 0) {
scroll = Math.max(0, scroll - 9); scroll = Math.max(0, scroll - 9);
open(); open();
} }
}).setCustomModelData(CMDs.PREVIOUS_PAGE)); }).setCustomModelData(CMDs.PREVIOUS_PAGE));
boolean hasNext = (data.size() + 1) - scroll > 9; boolean hasNext = (data.size() + 1) - scroll > 9;
inventory.setItem(size - 1, new SWItem(SWItem.getDye(hasNext ? 10 : 8), hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 1, new SWItem(hasNext ? Material.LIME_DYE : Material.GRAY_DYE, hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> {
if (hasNext) { if (hasNext) {
scroll = Math.min(scroll + 9, data.size() + 1 - 9); scroll = Math.min(scroll + 9, data.size() + 1 - 9);
open(); open();
@@ -23,7 +23,6 @@ import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import net.minecraft.network.protocol.game.ServerboundUseItemOnPacket; import net.minecraft.network.protocol.game.ServerboundUseItemOnPacket;
import org.bukkit.*; import org.bukkit.*;
@@ -76,8 +75,8 @@ public class SmartPlaceListener implements Listener {
IGNORED.add(Material.TNT); IGNORED.add(Material.TNT);
IGNORED.add(Material.REDSTONE_ORE); IGNORED.add(Material.REDSTONE_ORE);
IGNORED.add(SWItem.getMaterial("BEEHIVE")); IGNORED.add(Material.BEEHIVE);
IGNORED.add(SWItem.getMaterial("SEA_PICKLE")); IGNORED.add(Material.SEA_PICKLE);
IGNORED.remove(Material.STONE); IGNORED.remove(Material.STONE);
IGNORED.remove(Material.BARRIER); IGNORED.remove(Material.BARRIER);
} }
@@ -23,7 +23,6 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent; import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.sql.BauweltMember; import de.steamwar.sql.BauweltMember;
import de.steamwar.techhider.TechHider; import de.steamwar.techhider.TechHider;
@@ -71,18 +70,18 @@ public class SpectatorListener implements Listener {
materials.add(value); materials.add(value);
} }
} }
materials.add(SWItem.getMaterial("SCULK_SENSOR")); materials.add(Material.SCULK_SENSOR);
materials.add(SWItem.getMaterial("CALIBRATED_SCULK_SENSOR")); materials.add(Material.CALIBRATED_SCULK_SENSOR);
materials.add(SWItem.getMaterial("SCULK_SHRIEKER")); materials.add(Material.SCULK_SHRIEKER);
materials.add(SWItem.getMaterial("AMETHYST_BLOCK")); materials.add(Material.AMETHYST_BLOCK);
materials.add(SWItem.getMaterial("AMETHYST_CLUSTER")); materials.add(Material.AMETHYST_CLUSTER);
materials.add(SWItem.getMaterial("SMALL_AMETHYST_BUG")); materials.add(Material.SMALL_AMETHYST_BUD);
materials.add(SWItem.getMaterial("MEDIUM_AMETHYST_BUG")); materials.add(Material.MEDIUM_AMETHYST_BUD);
materials.add(SWItem.getMaterial("LARGE_AMETHYST_BUG")); materials.add(Material.LARGE_AMETHYST_BUD);
materials.add(Material.TRIPWIRE_HOOK); materials.add(Material.TRIPWIRE_HOOK);
materials.add(Material.TRIPWIRE); materials.add(Material.TRIPWIRE);
materials.add(Material.DAYLIGHT_DETECTOR); materials.add(Material.DAYLIGHT_DETECTOR);
materials.add(SWItem.getMaterial("LIGHTNING_ROD")); materials.add(Material.LIGHTNING_ROD);
materials.add(Material.PISTON); materials.add(Material.PISTON);
materials.add(Material.PISTON_HEAD); materials.add(Material.PISTON_HEAD);
materials.add(Material.MOVING_PISTON); materials.add(Material.MOVING_PISTON);
@@ -96,7 +95,7 @@ public class SpectatorListener implements Listener {
materials.add(Material.ACTIVATOR_RAIL); materials.add(Material.ACTIVATOR_RAIL);
materials.add(Material.TNT); materials.add(Material.TNT);
materials.add(Material.REDSTONE_ORE); materials.add(Material.REDSTONE_ORE);
materials.add(SWItem.getMaterial("SCAFFOLDING")); materials.add(Material.SCAFFOLDING);
materials.add(Material.WATER); materials.add(Material.WATER);
materials.remove(Material.BARRIER); materials.remove(Material.BARRIER);
materials.remove(Material.STONE); materials.remove(Material.STONE);
@@ -23,7 +23,6 @@ import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.techhider.TechHiderCommand; import de.steamwar.bausystem.features.techhider.TechHiderCommand;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.PlayerMovementWrapper;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.core.CraftbukkitWrapper; import de.steamwar.core.CraftbukkitWrapper;
@@ -32,8 +31,10 @@ import de.steamwar.linkage.LinkedInstance;
import de.steamwar.techhider.TechHider; import de.steamwar.techhider.TechHider;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
import net.minecraft.server.level.ServerPlayer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@@ -96,19 +97,26 @@ public class XrayCommand extends SWCommand implements Listener, ScoreboardElemen
} }
{ {
BiFunction<Player, Object, Object> positionSetter = (player, o) -> { BiFunction<Player, ServerboundMovePlayerPacket, Object> positionSetter = (player, packet) -> {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (hidden.containsKey(region) && hidden.get(region).contains(player)) { if (hidden.containsKey(region) && hidden.get(region).contains(player)) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
PlayerMovementWrapper.impl.setPosition(player, o); ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
if (packet.hasPos) {
serverPlayer.setPosRaw(packet.x, packet.y, packet.z);
}
if (packet.hasRot) {
serverPlayer.setXRot(packet.xRot);
serverPlayer.setYRot(packet.yRot);
}
}, 0); }, 0);
return null; return null;
} }
return o; return packet;
}; };
TinyProtocol.instance.addFilter(ServerboundMovePlayerPacket.Pos.class, positionSetter); TinyProtocol.instance.addTypedFilter(ServerboundMovePlayerPacket.Pos.class, positionSetter);
TinyProtocol.instance.addFilter(ServerboundMovePlayerPacket.PosRot.class, positionSetter); TinyProtocol.instance.addTypedFilter(ServerboundMovePlayerPacket.PosRot.class, positionSetter);
} }
@EventHandler @EventHandler
@@ -1,52 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2025 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.utils;
import de.steamwar.Reflection;
import de.steamwar.core.BountifulWrapper;
import de.steamwar.entity.REntity;
import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket;
import net.minecraft.server.level.ServerPlayer;
import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class PlayerMovementWrapper {
Class<?> teleportPacket = REntity.teleportPacket;
Reflection.Field<Integer> teleportEntity = REntity.teleportEntity;
BountifulWrapper.PositionSetter teleportPosition = REntity.teleportPosition;
public static final PlayerMovementWrapper impl = new PlayerMovementWrapper();
public void setPosition(Player player, Object object) {
ServerboundMovePlayerPacket packetPlayInFlying = ((ServerboundMovePlayerPacket) object);
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
if (packetPlayInFlying.hasPos) {
serverPlayer.setPosRaw(packetPlayInFlying.x, packetPlayInFlying.y, packetPlayInFlying.z);
}
if (packetPlayInFlying.hasRot) {
serverPlayer.setXRot(packetPlayInFlying.xRot);
serverPlayer.setYRot(packetPlayInFlying.yRot);
}
}
public Object convertToOut(Player player, Object object) {
return object;
}
}
-1
View File
@@ -6,7 +6,6 @@ import com.github.ajalt.clikt.core.Context
import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.arguments.help import com.github.ajalt.clikt.parameters.arguments.help
import com.github.ajalt.clikt.parameters.arguments.multiple import com.github.ajalt.clikt.parameters.arguments.multiple
import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.defaultLazy import com.github.ajalt.clikt.parameters.options.defaultLazy
import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.help import com.github.ajalt.clikt.parameters.options.help
+1 -1
View File
@@ -13,7 +13,7 @@ import org.jetbrains.exposed.v1.jdbc.JdbcTransaction
import org.jetbrains.exposed.v1.jdbc.transactions.transaction import org.jetbrains.exposed.v1.jdbc.transactions.transaction
import java.io.File import java.io.File
import java.sql.ResultSet import java.sql.ResultSet
import java.util.Properties import java.util.*
object Database { object Database {
lateinit var host: String lateinit var host: String
@@ -19,7 +19,10 @@
package de.steamwar.command; package de.steamwar.command;
import java.lang.annotation.*; import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public @interface CommandMetaData { public @interface CommandMetaData {
@@ -21,7 +21,6 @@ package de.steamwar.command;
import de.steamwar.command.dto.ExecutionIdentifier; import de.steamwar.command.dto.ExecutionIdentifier;
import de.steamwar.command.dto.TestSWCommand; import de.steamwar.command.dto.TestSWCommand;
import de.steamwar.command.dto.TestTypeMapper;
import java.util.Collections; import java.util.Collections;
@@ -20,8 +20,12 @@
package de.steamwar.network; package de.steamwar.network;
import de.steamwar.network.packets.NetworkPacket; import de.steamwar.network.packets.NetworkPacket;
import de.steamwar.network.packets.client.*; import de.steamwar.network.packets.client.ExecuteCommandPacket;
import de.steamwar.network.packets.common.*; import de.steamwar.network.packets.client.ImALobbyPacket;
import de.steamwar.network.packets.client.InventoryCallbackPacket;
import de.steamwar.network.packets.client.PrepareSchemPacket;
import de.steamwar.network.packets.common.FightEndsPacket;
import de.steamwar.network.packets.common.FightInfoPacket;
import de.steamwar.network.packets.server.*; import de.steamwar.network.packets.server.*;
import lombok.SneakyThrows; import lombok.SneakyThrows;
@@ -30,7 +34,7 @@ import java.lang.reflect.Parameter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static de.steamwar.RandomGenerator.*; import static de.steamwar.RandomGenerator.generateRandom;
public class AllPackets { public class AllPackets {
@@ -25,8 +25,9 @@ import org.junit.Test;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf;
public class PacketHandlerTest { public class PacketHandlerTest {
@@ -22,8 +22,8 @@ package de.steamwar.network;
import de.steamwar.network.packets.NetworkPacket; import de.steamwar.network.packets.NetworkPacket;
import org.junit.Test; import org.junit.Test;
import static org.hamcrest.Matchers.*; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.equalTo;
public class PacketTest { public class PacketTest {
@@ -20,14 +20,10 @@
package de.steamwar.sql package de.steamwar.sql
import de.steamwar.sql.internal.useDb import de.steamwar.sql.internal.useDb
import org.jetbrains.exposed.v1.core.ReferenceOption import org.jetbrains.exposed.v1.core.*
import org.jetbrains.exposed.v1.core.SortOrder
import org.jetbrains.exposed.v1.core.and
import org.jetbrains.exposed.v1.core.dao.id.CompositeID import org.jetbrains.exposed.v1.core.dao.id.CompositeID
import org.jetbrains.exposed.v1.core.dao.id.CompositeIdTable import org.jetbrains.exposed.v1.core.dao.id.CompositeIdTable
import org.jetbrains.exposed.v1.core.dao.id.EntityID import org.jetbrains.exposed.v1.core.dao.id.EntityID
import org.jetbrains.exposed.v1.core.eq
import org.jetbrains.exposed.v1.core.neq
import org.jetbrains.exposed.v1.dao.CompositeEntity import org.jetbrains.exposed.v1.dao.CompositeEntity
import org.jetbrains.exposed.v1.dao.CompositeEntityClass import org.jetbrains.exposed.v1.dao.CompositeEntityClass
import org.jetbrains.exposed.v1.javatime.timestamp import org.jetbrains.exposed.v1.javatime.timestamp
@@ -20,17 +20,12 @@
package de.steamwar.sql package de.steamwar.sql
import de.steamwar.sql.internal.useDb import de.steamwar.sql.internal.useDb
import org.jetbrains.exposed.v1.core.SortOrder import org.jetbrains.exposed.v1.core.*
import org.jetbrains.exposed.v1.core.and
import org.jetbrains.exposed.v1.core.count
import org.jetbrains.exposed.v1.core.dao.id.CompositeID import org.jetbrains.exposed.v1.core.dao.id.CompositeID
import org.jetbrains.exposed.v1.core.dao.id.CompositeIdTable import org.jetbrains.exposed.v1.core.dao.id.CompositeIdTable
import org.jetbrains.exposed.v1.core.dao.id.EntityID import org.jetbrains.exposed.v1.core.dao.id.EntityID
import org.jetbrains.exposed.v1.core.eq
import org.jetbrains.exposed.v1.core.lessSubQuery
import org.jetbrains.exposed.v1.dao.CompositeEntity import org.jetbrains.exposed.v1.dao.CompositeEntity
import org.jetbrains.exposed.v1.dao.CompositeEntityClass import org.jetbrains.exposed.v1.dao.CompositeEntityClass
import org.jetbrains.exposed.v1.dao.flushCache
import org.jetbrains.exposed.v1.javatime.CurrentTimestamp import org.jetbrains.exposed.v1.javatime.CurrentTimestamp
import org.jetbrains.exposed.v1.javatime.timestamp import org.jetbrains.exposed.v1.javatime.timestamp
import org.jetbrains.exposed.v1.jdbc.select import org.jetbrains.exposed.v1.jdbc.select
@@ -27,7 +27,6 @@ import org.jetbrains.exposed.v1.core.dao.id.EntityID
import org.jetbrains.exposed.v1.core.eq import org.jetbrains.exposed.v1.core.eq
import org.jetbrains.exposed.v1.dao.CompositeEntity import org.jetbrains.exposed.v1.dao.CompositeEntity
import org.jetbrains.exposed.v1.dao.CompositeEntityClass import org.jetbrains.exposed.v1.dao.CompositeEntityClass
import org.jetbrains.exposed.v1.jdbc.insert
object PersonalKitTable: CompositeIdTable("PersonalKit") { object PersonalKitTable: CompositeIdTable("PersonalKit") {
val userId = reference("UserId", SteamwarUserTable) val userId = reference("UserId", SteamwarUserTable)
@@ -23,7 +23,6 @@ import org.intellij.lang.annotations.Language
import org.jetbrains.exposed.v1.core.ColumnType import org.jetbrains.exposed.v1.core.ColumnType
import org.jetbrains.exposed.v1.core.Expression import org.jetbrains.exposed.v1.core.Expression
import org.jetbrains.exposed.v1.core.ResultRow import org.jetbrains.exposed.v1.core.ResultRow
import org.jetbrains.exposed.v1.core.StdOutSqlLogger
import org.jetbrains.exposed.v1.core.statements.StatementType import org.jetbrains.exposed.v1.core.statements.StatementType
import org.jetbrains.exposed.v1.dao.IntEntity import org.jetbrains.exposed.v1.dao.IntEntity
import org.jetbrains.exposed.v1.dao.IntEntityClass import org.jetbrains.exposed.v1.dao.IntEntityClass
@@ -51,9 +51,8 @@ public class GUI {
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private static void addTeamRequest(Player p, SWInventory inv, int pos, FightTeam team) { private static void addTeamRequest(Player p, SWInventory inv, int pos, FightTeam team) {
byte colorCode = ColorConverter.chat2dye(team.getColor()).getDyeData();
String name = team.getLeader() != null ? team.getLeader().getEntity().getName() : team.getName(); String name = team.getLeader() != null ? team.getLeader().getEntity().getName() : team.getName();
inv.setItem(pos, SWItem.getDye(colorCode), colorCode, msg.parse("JOIN_REQUEST_TEAM", p, team.getColor() + name), click -> { inv.setItem(pos, ColorConverter.chat2dye(team.getColor()), msg.parse("JOIN_REQUEST_TEAM", p, team.getColor() + name), click -> {
p.closeInventory(); p.closeInventory();
if(ArenaMode.ManualTeams.contains(Config.mode) && team.canbeLeader(p)) if(ArenaMode.ManualTeams.contains(Config.mode) && team.canbeLeader(p))
@@ -226,7 +225,7 @@ public class GUI {
}); });
if (Fight.publicOnly()) { if (Fight.publicOnly()) {
inv.setItem(row * 9, SWItem.getDye(8), (byte)8, msg.parse("SCHEM_PRIVATE_FORBIDDEN", p, type.name()), (ClickType click)->{}); inv.setItem(row * 9, Material.GRAY_DYE, (byte)8, msg.parse("SCHEM_PRIVATE_FORBIDDEN", p, type.name()), (ClickType click)->{});
return; return;
} }
@@ -238,11 +237,11 @@ public class GUI {
} }
if (SchematicNode.getAllAccessibleSchematicsOfType(SteamwarUser.get(p.getUniqueId()).getId(), type.toDB()).isEmpty() && !Config.test()) { if (SchematicNode.getAllAccessibleSchematicsOfType(SteamwarUser.get(p.getUniqueId()).getId(), type.toDB()).isEmpty() && !Config.test()) {
inv.setItem(row * 9, SWItem.getDye(8), (byte)8, msg.parse("SCHEM_NO_PRIVATE", p, type.name()), (ClickType click)->{}); inv.setItem(row * 9, Material.GRAY_DYE, (byte)8, msg.parse("SCHEM_NO_PRIVATE", p, type.name()), (ClickType click)->{});
return; return;
} }
inv.setItem(row * 9, SWItem.getMaterial("CAULDRON_ITEM"), msg.parse("SCHEM_PRIVATE", p, type.name()), (ClickType click) -> { inv.setItem(row * 9, Material.CAULDRON, msg.parse("SCHEM_PRIVATE", p, type.name()), (ClickType click) -> {
p.closeInventory(); p.closeInventory();
schemDialog(p, type, false, false); schemDialog(p, type, false, false);
}); });
@@ -149,7 +149,7 @@ public class FightSchematic extends StateDependent {
private void replaceTeamColor(Clipboard clipboard) { private void replaceTeamColor(Clipboard clipboard) {
try { try {
WorldeditWrapper.impl.replaceTeamColor(clipboard, ArenaMode.AntiPrepare.contains(Config.mode) ? ColorConverter.chat2dye(team.getColor()) : DyeColor.PINK); WorldeditWrapper.impl.replaceTeamColor(clipboard, ArenaMode.AntiPrepare.contains(Config.mode) ? ColorConverter.chat2dyeColor(team.getColor()) : DyeColor.PINK);
} catch (WorldEditException e) { } catch (WorldEditException e) {
Bukkit.getLogger().log(Level.SEVERE, "Could not recolor schematic", e); Bukkit.getLogger().log(Level.SEVERE, "Could not recolor schematic", e);
} }
@@ -78,19 +78,19 @@ public class FightTeam {
} }
if(Config.test()) if(Config.test())
notReadyKit.setItem(5, "CHOOSE_SCHEMATIC", new ItemBuilder(SWItem.getMaterial("CAULDRON_ITEM")).enchant().build(), GUI::preSchemDialog); notReadyKit.setItem(5, "CHOOSE_SCHEMATIC", new ItemBuilder(Material.CAULDRON).enchant().build(), GUI::preSchemDialog);
notReadyKit.setItem(3, "MANAGE_PLAYERS", SWItem.getPlayerSkull("AdmiralSeekrank").getItemStack(), GUI::managePlayers); notReadyKit.setItem(3, "MANAGE_PLAYERS", SWItem.getPlayerSkull("AdmiralSeekrank").getItemStack(), GUI::managePlayers);
notReadyKit.setItem(4, "TEAM_NOT_READY", new ItemBuilder(SWItem.getDye(10), (short) 10).enchant().build(), player -> Objects.requireNonNull(Fight.getPlayerTeam(player)).setReady(true)); notReadyKit.setItem(4, "TEAM_NOT_READY", new ItemBuilder(Material.LIME_DYE, (short) 10).enchant().build(), player -> Objects.requireNonNull(Fight.getPlayerTeam(player)).setReady(true));
} }
private static final HotbarKit chooseSchemKit = new HotbarKit(notReadyKit); private static final HotbarKit chooseSchemKit = new HotbarKit(notReadyKit);
static { static {
chooseSchemKit.setItem(4, "CHOOSE_SCHEMATIC", new ItemBuilder(SWItem.getMaterial("CAULDRON_ITEM")).enchant().build(), GUI::preSchemDialog); chooseSchemKit.setItem(4, "CHOOSE_SCHEMATIC", new ItemBuilder(Material.CAULDRON).enchant().build(), GUI::preSchemDialog);
} }
private static final HotbarKit readyKit = new HotbarKit(memberKit); private static final HotbarKit readyKit = new HotbarKit(memberKit);
static { static {
readyKit.setItem(1, null, null, null); readyKit.setItem(1, null, null, null);
readyKit.setItem(4, "TEAM_READY", new ItemBuilder(SWItem.getDye(8), (short) 8).enchant().build(), player -> Objects.requireNonNull(Fight.getPlayerTeam(player)).setReady(false)); readyKit.setItem(4, "TEAM_READY", new ItemBuilder(Material.GRAY_DYE, (short) 8).enchant().build(), player -> Objects.requireNonNull(Fight.getPlayerTeam(player)).setReady(false));
} }
@Getter @Getter
@@ -295,7 +295,7 @@ public class Kit {
int pos = 44; int pos = 44;
while(it.hasNext()){ while(it.hasNext()){
PotionEffect effect = it.next(); PotionEffect effect = it.next();
SWItem item = new SWItem(SWItem.getMaterial("POTION"), effect.getType().getName()); SWItem item = new SWItem(Material.POTION, effect.getType().getName());
inv.setItem(pos, item); inv.setItem(pos, item);
pos--; pos--;
} }
@@ -303,12 +303,12 @@ public class Kit {
inv.setCallback(-999, click -> player.closeInventory()); inv.setCallback(-999, click -> player.closeInventory());
if(Config.GameModeConfig.Kits.PersonalKits){ if(Config.GameModeConfig.Kits.PersonalKits){
inv.setItem(49, SWItem.getMaterial("WOOD_AXE"), FightSystem.getMessage().parse("KIT_PREVIEW_EDIT", player), clickType -> PersonalKitCreator.openKitCreator(player, PersonalKit.get(SteamwarUser.get(player.getUniqueId()).getId(), Config.GameModeConfig.Schematic.Type.toDB(), name))); inv.setItem(49, Material.WOODEN_AXE, FightSystem.getMessage().parse("KIT_PREVIEW_EDIT", player), clickType -> PersonalKitCreator.openKitCreator(player, PersonalKit.get(SteamwarUser.get(player.getUniqueId()).getId(), Config.GameModeConfig.Schematic.Type.toDB(), name)));
inv.setItem(53, Material.BARRIER, FightSystem.getMessage().parse("KIT_PREVIEW_DELETE", player), clickType -> { inv.setItem(53, Material.BARRIER, FightSystem.getMessage().parse("KIT_PREVIEW_DELETE", player), clickType -> {
player.closeInventory(); player.closeInventory();
SWInventory conf = new SWInventory(player, 9, FightSystem.getMessage().parse("KIT_DELETION_CONFIRMATION", player)); SWInventory conf = new SWInventory(player, 9, FightSystem.getMessage().parse("KIT_DELETION_CONFIRMATION", player));
conf.setItem(8, SWItem.getDye(1), FightSystem.getMessage().parse("KIT_DELETION_ABORT", player), click -> player.closeInventory()); conf.setItem(8, Material.RED_DYE, FightSystem.getMessage().parse("KIT_DELETION_ABORT", player), click -> player.closeInventory());
conf.setItem(0, SWItem.getDye(10), FightSystem.getMessage().parse("KIT_DELETION_DELETE", player), click -> { conf.setItem(0, Material.LIME_DYE, FightSystem.getMessage().parse("KIT_DELETION_DELETE", player), click -> {
player.closeInventory(); player.closeInventory();
SteamwarUser user = SteamwarUser.get(player.getUniqueId()); SteamwarUser user = SteamwarUser.get(player.getUniqueId());
PersonalKit kit = PersonalKit.get(user.getId(), Config.GameModeConfig.Schematic.Type.toDB(), name); PersonalKit kit = PersonalKit.get(user.getId(), Config.GameModeConfig.Schematic.Type.toDB(), name);
@@ -327,11 +327,11 @@ public class Kit {
conf.open(); conf.open();
}); });
} }
inv.setItem(45, SWItem.getDye(10), (byte)10, FightSystem.getMessage().parse("KIT_PREVIEW_CHOOSE", player), click -> { inv.setItem(45, Material.LIME_DYE, (byte)10, FightSystem.getMessage().parse("KIT_PREVIEW_CHOOSE", player), click -> {
Commands.kit(player, name); Commands.kit(player, name);
player.closeInventory(); player.closeInventory();
}); });
inv.setItem(53, SWItem.getDye(1), (byte)1, FightSystem.getMessage().parse("KIT_PREVIEW_BACK", player), click -> GUI.kitSelection(player, "")); inv.setItem(53, Material.RED_DYE, (byte)1, FightSystem.getMessage().parse("KIT_PREVIEW_BACK", player), click -> GUI.kitSelection(player, ""));
inv.open(); inv.open();
} }
@@ -19,7 +19,6 @@
package de.steamwar.fightsystem.listener; package de.steamwar.fightsystem.listener;
import de.steamwar.Reflection;
import de.steamwar.fightsystem.Config; import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentTask; import de.steamwar.fightsystem.states.StateDependentTask;
@@ -43,6 +43,7 @@ import de.steamwar.techhider.BlockIds;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
import net.minecraft.world.entity.Pose;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@@ -291,7 +292,7 @@ public class PacketProcessor implements Listener {
int entityId = source.readInt(); int entityId = source.readInt();
boolean sneaking = source.readBoolean(); boolean sneaking = source.readBoolean();
execSync(() -> entities.get(entityId).setPose(sneaking ? de.steamwar.core.FlatteningWrapper.EntityPose.SNEAKING : de.steamwar.core.FlatteningWrapper.EntityPose.NORMAL)); execSync(() -> entities.get(entityId).setPose(sneaking ? Pose.CROUCHING : Pose.STANDING));
} }
private void entityAnimation() throws IOException { private void entityAnimation() throws IOException {
@@ -21,6 +21,7 @@ package de.steamwar.fightsystem.utils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.DyeColor; import org.bukkit.DyeColor;
import org.bukkit.Material;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.Map; import java.util.Map;
@@ -28,28 +29,50 @@ import java.util.Map;
public class ColorConverter { public class ColorConverter {
private ColorConverter(){} private ColorConverter(){}
private static final Map<ChatColor, DyeColor> chat2dye = new EnumMap<>(ChatColor.class); private static final Map<ChatColor, DyeColor> chat2dyeColor = new EnumMap<>(ChatColor.class);
private static final Map<ChatColor, Material> chat2dye = new EnumMap<>(ChatColor.class);
static{ static{
chat2dye.put(ChatColor.WHITE, DyeColor.WHITE); chat2dyeColor.put(ChatColor.WHITE, DyeColor.WHITE);
chat2dye.put(ChatColor.GOLD, DyeColor.ORANGE); chat2dyeColor.put(ChatColor.GOLD, DyeColor.ORANGE);
chat2dye.put(ChatColor.LIGHT_PURPLE, DyeColor.MAGENTA); chat2dyeColor.put(ChatColor.LIGHT_PURPLE, DyeColor.MAGENTA);
chat2dye.put(ChatColor.BLUE, DyeColor.LIGHT_BLUE); chat2dyeColor.put(ChatColor.BLUE, DyeColor.LIGHT_BLUE);
chat2dye.put(ChatColor.YELLOW, DyeColor.YELLOW); chat2dyeColor.put(ChatColor.YELLOW, DyeColor.YELLOW);
chat2dye.put(ChatColor.GREEN, DyeColor.LIME); chat2dyeColor.put(ChatColor.GREEN, DyeColor.LIME);
chat2dye.put(ChatColor.RED, DyeColor.RED); chat2dyeColor.put(ChatColor.RED, DyeColor.RED);
chat2dye.put(ChatColor.DARK_GRAY, DyeColor.GRAY); chat2dyeColor.put(ChatColor.DARK_GRAY, DyeColor.GRAY);
chat2dye.put(ChatColor.DARK_AQUA, DyeColor.CYAN); chat2dyeColor.put(ChatColor.DARK_AQUA, DyeColor.CYAN);
chat2dye.put(ChatColor.DARK_PURPLE, DyeColor.PURPLE); chat2dyeColor.put(ChatColor.DARK_PURPLE, DyeColor.PURPLE);
chat2dye.put(ChatColor.DARK_BLUE, DyeColor.BLUE); chat2dyeColor.put(ChatColor.DARK_BLUE, DyeColor.BLUE);
chat2dye.put(ChatColor.AQUA, DyeColor.CYAN); chat2dyeColor.put(ChatColor.AQUA, DyeColor.CYAN);
chat2dye.put(ChatColor.DARK_GREEN, DyeColor.GREEN); chat2dyeColor.put(ChatColor.DARK_GREEN, DyeColor.GREEN);
chat2dye.put(ChatColor.DARK_RED, DyeColor.RED); chat2dyeColor.put(ChatColor.DARK_RED, DyeColor.RED);
chat2dye.put(ChatColor.BLACK, DyeColor.BLACK); chat2dyeColor.put(ChatColor.BLACK, DyeColor.BLACK);
chat2dye.put(ChatColor.GRAY, FlatteningWrapper.impl.getSilver()); chat2dyeColor.put(ChatColor.GRAY, DyeColor.LIGHT_GRAY);
chat2dye.put(ChatColor.WHITE, Material.WHITE_DYE);
chat2dye.put(ChatColor.GOLD, Material.ORANGE_DYE);
chat2dye.put(ChatColor.LIGHT_PURPLE, Material.MAGENTA_DYE);
chat2dye.put(ChatColor.BLUE, Material.LIGHT_BLUE_DYE);
chat2dye.put(ChatColor.YELLOW, Material.YELLOW_DYE);
chat2dye.put(ChatColor.GREEN, Material.LIME_DYE);
chat2dye.put(ChatColor.RED, Material.RED_DYE);
chat2dye.put(ChatColor.DARK_GRAY, Material.GRAY_DYE);
chat2dye.put(ChatColor.DARK_AQUA, Material.CYAN_DYE);
chat2dye.put(ChatColor.DARK_PURPLE, Material.PURPLE_DYE);
chat2dye.put(ChatColor.DARK_BLUE, Material.BLUE_DYE);
chat2dye.put(ChatColor.AQUA, Material.CYAN_DYE);
chat2dye.put(ChatColor.DARK_GREEN, Material.GREEN_DYE);
chat2dye.put(ChatColor.DARK_RED, Material.RED_DYE);
chat2dye.put(ChatColor.BLACK, Material.BLACK_DYE);
chat2dye.put(ChatColor.GRAY, Material.LIGHT_GRAY_DYE);
} }
public static DyeColor chat2dye(ChatColor color){ public static DyeColor chat2dyeColor(ChatColor color){
return chat2dyeColor.get(color);
}
public static Material chat2dye(ChatColor color){
return chat2dye.get(color); return chat2dye.get(color);
} }
} }
@@ -19,7 +19,6 @@
package de.steamwar.fightsystem.utils; package de.steamwar.fightsystem.utils;
import org.bukkit.DyeColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@@ -36,10 +35,6 @@ import org.bukkit.inventory.meta.ItemMeta;
public class FlatteningWrapper { public class FlatteningWrapper {
public static final FlatteningWrapper impl = new FlatteningWrapper(); public static final FlatteningWrapper impl = new FlatteningWrapper();
public DyeColor getSilver() {
return DyeColor.LIGHT_GRAY;
}
public boolean isWater(Block block) { public boolean isWater(Block block) {
if(block.getType() == Material.WATER) if(block.getType() == Material.WATER)
return true; return true;
@@ -25,7 +25,6 @@ import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.states.FightState; import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependentTask; import de.steamwar.fightsystem.states.StateDependentTask;
import de.steamwar.fightsystem.utils.Message; import de.steamwar.fightsystem.utils.Message;
import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@@ -37,7 +36,7 @@ import java.util.function.Predicate;
public abstract class WinconditionBlocks extends Wincondition implements PrintableWincondition { public abstract class WinconditionBlocks extends Wincondition implements PrintableWincondition {
public static final Material PUMPKIN_LANTERN = SWItem.getMaterial("JACK_O_LANTERN"); public static final Material PUMPKIN_LANTERN = Material.JACK_O_LANTERN;
private final Map<FightTeam, TeamBlocks> teamMap = new HashMap<>(); private final Map<FightTeam, TeamBlocks> teamMap = new HashMap<>();
private final String barMessage; private final String barMessage;
@@ -23,7 +23,6 @@ import de.steamwar.entity.REntity;
import de.steamwar.entity.REntityServer; import de.steamwar.entity.REntityServer;
import de.steamwar.lobby.LobbySystem; import de.steamwar.lobby.LobbySystem;
import de.steamwar.lobby.util.LeaderboardManager; import de.steamwar.lobby.util.LeaderboardManager;
import de.steamwar.sql.Leaderboard;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@@ -28,7 +28,10 @@ import de.steamwar.lobby.particle.particles.custom.CustomPlayerParticle;
import de.steamwar.lobby.particle.particles.custom.CustomTeamParticle; import de.steamwar.lobby.particle.particles.custom.CustomTeamParticle;
import de.steamwar.lobby.special.easter.EggHunt; import de.steamwar.lobby.special.easter.EggHunt;
import de.steamwar.lobby.util.LobbyPlayer; import de.steamwar.lobby.util.LobbyPlayer;
import de.steamwar.sql.*; import de.steamwar.sql.Event;
import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.TeamTeilnahme;
import de.steamwar.sql.UserConfig;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -22,7 +22,10 @@ package de.steamwar.lobby.particle;
import de.steamwar.lobby.LobbySystem; import de.steamwar.lobby.LobbySystem;
import de.steamwar.lobby.special.easter.EggDifficulty; import de.steamwar.lobby.special.easter.EggDifficulty;
import de.steamwar.lobby.special.easter.EggHunt; import de.steamwar.lobby.special.easter.EggHunt;
import de.steamwar.sql.*; import de.steamwar.sql.Event;
import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.Team;
import de.steamwar.sql.UserPerm;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.HashSet; import java.util.HashSet;
@@ -24,6 +24,7 @@ import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv; import de.steamwar.inventory.SWListInv;
import de.steamwar.lobby.LobbySystem; import de.steamwar.lobby.LobbySystem;
import de.steamwar.sql.UserConfig; import de.steamwar.sql.UserConfig;
import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.Collections; import java.util.Collections;
@@ -60,13 +61,13 @@ public class EggHuntCommand extends SWCommand {
.collect(Collectors.toList()); .collect(Collectors.toList());
SWListInv<Egg> inv = new SWListInv<>(player, LobbySystem.getMessage().parse("EASTER_EGG_MENU", player, foundCount.get(), EggHunt.getEggList().size()), false, entries, (clickType, egg) -> { SWListInv<Egg> inv = new SWListInv<>(player, LobbySystem.getMessage().parse("EASTER_EGG_MENU", player, foundCount.get(), EggHunt.getEggList().size()), false, entries, (clickType, egg) -> {
}); });
inv.setItem(49, new SWItem(SWItem.getDye(15), (byte) 15, LobbySystem.getMessage().parse(Selection.ALL.key, player), Collections.emptyList(), selection == Selection.ALL, clickType -> { inv.setItem(49, new SWItem(Material.WHITE_DYE, (byte) 15, LobbySystem.getMessage().parse(Selection.ALL.key, player), Collections.emptyList(), selection == Selection.ALL, clickType -> {
genericCommand(player, Selection.ALL); genericCommand(player, Selection.ALL);
})); }));
inv.setItem(48, new SWItem(SWItem.getDye(1), (byte) 1, LobbySystem.getMessage().parse(Selection.NOT_FOUND.key, player), Collections.emptyList(), selection == Selection.NOT_FOUND, clickType -> { inv.setItem(48, new SWItem(Material.RED_DYE, (byte) 1, LobbySystem.getMessage().parse(Selection.NOT_FOUND.key, player), Collections.emptyList(), selection == Selection.NOT_FOUND, clickType -> {
genericCommand(player, Selection.NOT_FOUND); genericCommand(player, Selection.NOT_FOUND);
})); }));
inv.setItem(50, new SWItem(SWItem.getDye(2), (byte) 2, LobbySystem.getMessage().parse(Selection.FOUND.key, player), Collections.emptyList(), selection == Selection.FOUND, clickType -> { inv.setItem(50, new SWItem(Material.GREEN_DYE, (byte) 2, LobbySystem.getMessage().parse(Selection.FOUND.key, player), Collections.emptyList(), selection == Selection.FOUND, clickType -> {
genericCommand(player, Selection.FOUND); genericCommand(player, Selection.FOUND);
})); }));
inv.open(); inv.open();
@@ -27,11 +27,8 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Scoreboard;
import java.text.SimpleDateFormat;
import java.util.HashMap; import java.util.HashMap;
import java.util.Objects; import java.util.Objects;
@@ -21,7 +21,6 @@ package de.steamwar.misslewars.countdowns;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.misslewars.*; import de.steamwar.misslewars.*;
import de.steamwar.misslewars.listener.JoinListener;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
@@ -30,8 +30,6 @@ import com.sk89q.worldedit.function.operation.Operations;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.math.transform.AffineTransform;
import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.session.ClipboardHolder;
import com.sk89q.worldedit.util.SideEffect;
import com.sk89q.worldedit.util.SideEffectSet;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import de.steamwar.misslewars.MissileWars; import de.steamwar.misslewars.MissileWars;
@@ -22,23 +22,18 @@ package de.steamwar.misslewars.listener;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.misslewars.Config; import de.steamwar.misslewars.Config;
import de.steamwar.misslewars.FightState; import de.steamwar.misslewars.FightState;
import de.steamwar.misslewars.MWTeam;
import de.steamwar.misslewars.MissileWars; import de.steamwar.misslewars.MissileWars;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.ItemDespawnEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerPickupArrowEvent; import org.bukkit.event.player.PlayerPickupArrowEvent;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
@Linked @Linked
@@ -24,7 +24,6 @@ import de.steamwar.misslewars.scripts.utils.JsonUtils;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LingeringPotion;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.Damageable; import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
@@ -26,7 +26,6 @@ import de.steamwar.misslewars.scripts.RunnableScript;
import de.steamwar.misslewars.scripts.RunnableScriptEvent; import de.steamwar.misslewars.scripts.RunnableScriptEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
public class CooldownScript implements RunnableScript { public class CooldownScript implements RunnableScript {
@@ -24,7 +24,6 @@ import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import de.steamwar.core.Core;
import de.steamwar.sql.GameModeConfig; import de.steamwar.sql.GameModeConfig;
import lombok.Getter; import lombok.Getter;
import lombok.ToString; import lombok.ToString;
@@ -19,7 +19,6 @@
package de.steamwar.schematicsystem.autocheck; package de.steamwar.schematicsystem.autocheck;
import de.steamwar.core.Core;
import de.steamwar.schematicsystem.SchematicSystem; import de.steamwar.schematicsystem.SchematicSystem;
import de.steamwar.sql.GameModeConfig; import de.steamwar.sql.GameModeConfig;
import lombok.Builder; import lombok.Builder;
@@ -94,7 +94,7 @@ public class GUI {
SteamwarUser user = getUser(player); SteamwarUser user = getUser(player);
SWInventory inv = new SWInventory(player, 9 * 2, node.generateBreadcrumbs(user)); SWInventory inv = new SWInventory(player, 9 * 2, node.generateBreadcrumbs(user));
if(!node.isDir()) { if(!node.isDir()) {
inv.setItem(0, SWItem.getMaterial("WOOD_AXE"), SchematicSystem.MESSAGE.parse("GUI_INFO_LOAD", player), Arrays.asList( inv.setItem(0, Material.WOODEN_AXE, SchematicSystem.MESSAGE.parse("GUI_INFO_LOAD", player), Arrays.asList(
SchematicSystem.MESSAGE.parse("GUI_LOAD_LATEST", player), SchematicSystem.MESSAGE.parse("GUI_LOAD_LATEST", player),
SchematicSystem.MESSAGE.parse("GUI_LOAD_REVISION", player) SchematicSystem.MESSAGE.parse("GUI_LOAD_REVISION", player)
), false, click -> { ), false, click -> {
@@ -119,14 +119,14 @@ public class GUI {
}); });
} }
inv.setItem(9, new SWItem(SWItem.getMaterial("LEASH"), SchematicSystem.MESSAGE.parse("GUI_INFO_BACK", player), clickType -> { inv.setItem(9, new SWItem(Material.LEAD, SchematicSystem.MESSAGE.parse("GUI_INFO_BACK", player), clickType -> {
back.reOpen(); back.reOpen();
}).setCustomModelData(CMDs.Schematic.BACK)); }).setCustomModelData(CMDs.Schematic.BACK));
if(node.getOwner() == user.getId()){ if(node.getOwner() == user.getId()){
if(!node.isDir() && node.getSchemtype().writeable()){ if(!node.isDir() && node.getSchemtype().writeable()){
CheckedSchematic.getLastDeclinedOfNode(node.getId()).stream().findFirst().ifPresent(checkedSchematic -> CheckedSchematic.getLastDeclinedOfNode(node.getId()).stream().findFirst().ifPresent(checkedSchematic ->
inv.setItem(1, SWItem.getDye(10), (byte) 10, SchematicSystem.MESSAGE.parse("GUI_INFO_STATUS", player, node.getSchemtype().name()), Collections.singletonList(SchematicSystem.MESSAGE.parse("GUI_INFO_STATUS_LORE", player, checkedSchematic.getDeclineReason().replaceAll("&", "§"))), false, click -> {})); inv.setItem(1, Material.LIME_DYE, (byte) 10, SchematicSystem.MESSAGE.parse("GUI_INFO_STATUS", player, node.getSchemtype().name()), Collections.singletonList(SchematicSystem.MESSAGE.parse("GUI_INFO_STATUS_LORE", player, checkedSchematic.getDeclineReason().replaceAll("&", "§"))), false, click -> {}));
} }
Material mat = SWItem.getMaterial(node.getItem()); Material mat = SWItem.getMaterial(node.getItem());
@@ -142,23 +142,23 @@ public class GUI {
inv.setItem(6, SWItem.getMaterial(node.getSchemtype().getMaterial()), SchematicSystem.MESSAGE.parse("GUI_INFO_TYPE", player, node.getSchemtype().name()), Arrays.asList(SchematicSystem.MESSAGE.parse("CHANGE", player), SchematicSystem.MESSAGE.parse("CLICK", player)), node.getSchemtype().fightType(), click -> { inv.setItem(6, SWItem.getMaterial(node.getSchemtype().getMaterial()), SchematicSystem.MESSAGE.parse("GUI_INFO_TYPE", player, node.getSchemtype().name()), Arrays.asList(SchematicSystem.MESSAGE.parse("CHANGE", player), SchematicSystem.MESSAGE.parse("CLICK", player)), node.getSchemtype().fightType(), click -> {
changeType(player, node); changeType(player, node);
}); });
inv.setItem(7, SWItem.getMaterial("MAGENTA_GLAZED_TERRACOTTA"), SchematicSystem.MESSAGE.parse("GUI_INFO_DOWNLOAD", player), click -> { inv.setItem(7, Material.MAGENTA_GLAZED_TERRACOTTA, SchematicSystem.MESSAGE.parse("GUI_INFO_DOWNLOAD", player), click -> {
player.closeInventory(); player.closeInventory();
SchematicCommandUtils.download(player, node); SchematicCommandUtils.download(player, node);
}); });
if(node.getSchemtype().fightType()) { if(node.getSchemtype().fightType()) {
inv.setItem(14, SWItem.getMaterial(node.replaceColor() ? "PINK_WOOL" : "LIGHT_GRAY_WOOL"), SchematicSystem.MESSAGE.parse("GUI_INFO_COLOR", player), Arrays.asList(SchematicSystem.MESSAGE.parse("CURRENT", player, SchematicSystem.MESSAGE.parse(node.replaceColor()?"ON":"OFF", player)), SchematicSystem.MESSAGE.parse("CHANGE", player), SchematicSystem.MESSAGE.parse("CLICK", player)), false, clickType -> { inv.setItem(14, node.replaceColor() ? Material.PINK_WOOL : Material.LIGHT_GRAY_WOOL, SchematicSystem.MESSAGE.parse("GUI_INFO_COLOR", player), Arrays.asList(SchematicSystem.MESSAGE.parse("CURRENT", player, SchematicSystem.MESSAGE.parse(node.replaceColor()?"ON":"OFF", player)), SchematicSystem.MESSAGE.parse("CHANGE", player), SchematicSystem.MESSAGE.parse("CLICK", player)), false, clickType -> {
node.setReplaceColor(!node.replaceColor()); node.setReplaceColor(!node.replaceColor());
info(player, node, back); info(player, node, back);
}); });
inv.setItem(13, SWItem.getMaterial(node.allowReplay() ? "EYE_OF_ENDER" : "ENDER_PEARL"), SchematicSystem.MESSAGE.parse("GUI_INFO_REPLAY", player), Arrays.asList(SchematicSystem.MESSAGE.parse("CURRENT", player, SchematicSystem.MESSAGE.parse(node.allowReplay()?"ON":"OFF", player)), SchematicSystem.MESSAGE.parse("GUI_INFO_REPLAY_OFF", player), SchematicSystem.MESSAGE.parse("CLICK", player)), false, clickType -> { inv.setItem(13, node.allowReplay() ? Material.ENDER_EYE : Material.ENDER_PEARL, SchematicSystem.MESSAGE.parse("GUI_INFO_REPLAY", player), Arrays.asList(SchematicSystem.MESSAGE.parse("CURRENT", player, SchematicSystem.MESSAGE.parse(node.allowReplay()?"ON":"OFF", player)), SchematicSystem.MESSAGE.parse("GUI_INFO_REPLAY_OFF", player), SchematicSystem.MESSAGE.parse("CLICK", player)), false, clickType -> {
if(node.allowReplay()) { if(node.allowReplay()) {
SWInventory confInv = new SWInventory(player, 9, SchematicSystem.MESSAGE.parse("GUI_INFO_REPLAY_TITLE", player)); SWInventory confInv = new SWInventory(player, 9, SchematicSystem.MESSAGE.parse("GUI_INFO_REPLAY_TITLE", player));
confInv.setItem(0, SWItem.getDye(10), (byte) 10, SchematicSystem.MESSAGE.parse("CONFIRM", player), type -> { confInv.setItem(0, Material.LIME_DYE, (byte) 10, SchematicSystem.MESSAGE.parse("CONFIRM", player), type -> {
node.setAllowReplay(false); node.setAllowReplay(false);
info(player, node, back); info(player, node, back);
}); });
confInv.setItem(8, SWItem.getDye(1), (byte) 1, SchematicSystem.MESSAGE.parse("CANCEL", player), type -> { confInv.setItem(8, Material.RED_DYE, (byte) 1, SchematicSystem.MESSAGE.parse("CANCEL", player), type -> {
info(player, node, back); info(player, node, back);
}); });
confInv.open(); confInv.open();
@@ -188,13 +188,13 @@ public class GUI {
anvilInv.open(); anvilInv.open();
}); });
if(node.getOwner() != 0) { if(node.getOwner() != 0) {
inv.setItem(17, SWItem.getDye(1), (byte) 1, SchematicSystem.MESSAGE.parse("GUI_INFO_DELETE", player), click -> { inv.setItem(17, Material.RED_DYE, (byte) 1, SchematicSystem.MESSAGE.parse("GUI_INFO_DELETE", player), click -> {
delete(player, node, back); delete(player, node, back);
}); });
} }
}else{ }else{
if(!node.isDir()) { if(!node.isDir()) {
inv.setItem(4, SWItem.getMaterial("CAULDRON_ITEM"), SchematicSystem.MESSAGE.parse("GUI_INFO_TYPE", player, node.getSchemtype().name()), Collections.emptyList(), node.getSchemtype().fightType(), click -> {}); inv.setItem(4, Material.CAULDRON, SchematicSystem.MESSAGE.parse("GUI_INFO_TYPE", player, node.getSchemtype().name()), Collections.emptyList(), node.getSchemtype().fightType(), click -> {});
} }
SteamwarUser owneruser = SteamwarUser.byId(node.getOwner()); SteamwarUser owneruser = SteamwarUser.byId(node.getOwner());
@@ -203,7 +203,7 @@ public class GUI {
inv.setItem(8, skull.getItemStack(), clickType -> {}); inv.setItem(8, skull.getItemStack(), clickType -> {});
if(NodeMember.getNodeMember(node.getId(), user.getId()) != null) { if(NodeMember.getNodeMember(node.getId(), user.getId()) != null) {
inv.setItem(17, SWItem.getDye(1), (byte) 1, SchematicSystem.MESSAGE.parse("GUI_INFO_MEMBER_REMOVE", player), click -> { inv.setItem(17, Material.RED_DYE, (byte) 1, SchematicSystem.MESSAGE.parse("GUI_INFO_MEMBER_REMOVE", player), click -> {
delete(player, node, back); delete(player, node, back);
}); });
} }
@@ -269,7 +269,7 @@ public class GUI {
private static void deleteOwn(Player p, SchematicNode schem, SchematicSelector back){ private static void deleteOwn(Player p, SchematicNode schem, SchematicSelector back){
SteamwarUser user = getUser(p); SteamwarUser user = getUser(p);
SWInventory inv = new SWInventory(p, 9, SchematicSystem.MESSAGE.parse("GUI_DELETE_OWN_TITLE", p, schem.generateBreadcrumbs(user))); SWInventory inv = new SWInventory(p, 9, SchematicSystem.MESSAGE.parse("GUI_DELETE_OWN_TITLE", p, schem.generateBreadcrumbs(user)));
inv.setItem(0, SWItem.getDye(1), (byte) 1, SchematicSystem.MESSAGE.parse("CONFIRM", p), click -> { inv.setItem(0, Material.RED_DYE, (byte) 1, SchematicSystem.MESSAGE.parse("CONFIRM", p), click -> {
p.performCommand("schematic delete " + schem.generateBreadcrumbs(user)); p.performCommand("schematic delete " + schem.generateBreadcrumbs(user));
if(back != null) { if(back != null) {
@@ -280,7 +280,7 @@ public class GUI {
} }
} }
}); });
inv.setItem(8, SWItem.getDye(14), (byte) 14, SchematicSystem.MESSAGE.parse("CANCEL", p), click -> p.closeInventory()); inv.setItem(8, Material.ORANGE_DYE, (byte) 14, SchematicSystem.MESSAGE.parse("CANCEL", p), click -> p.closeInventory());
inv.setCallback(-999, click -> p.closeInventory()); inv.setCallback(-999, click -> p.closeInventory());
inv.open(); inv.open();
} }
@@ -288,7 +288,7 @@ public class GUI {
private static void deleteMembership(Player p, SchematicNode schem, SchematicSelector back){ private static void deleteMembership(Player p, SchematicNode schem, SchematicSelector back){
SteamwarUser user = getUser(p); SteamwarUser user = getUser(p);
SWInventory inv = new SWInventory(p, 9, SchematicSystem.MESSAGE.parse("GUI_DELETE_MEMBER_TITLE", p, schem.generateBreadcrumbs(user))); SWInventory inv = new SWInventory(p, 9, SchematicSystem.MESSAGE.parse("GUI_DELETE_MEMBER_TITLE", p, schem.generateBreadcrumbs(user)));
inv.setItem(0, SWItem.getDye(1), (byte) 1, SchematicSystem.MESSAGE.parse("CONFIRM", p), click -> { inv.setItem(0, Material.RED_DYE, (byte) 1, SchematicSystem.MESSAGE.parse("CONFIRM", p), click -> {
NodeMember member = NodeMember.getNodeMember(schem.getId(), user.getId()); NodeMember member = NodeMember.getNodeMember(schem.getId(), user.getId());
if(member != null) if(member != null)
member.delete(); member.delete();
@@ -301,7 +301,7 @@ public class GUI {
} }
} }
}); });
inv.setItem(8, SWItem.getDye(14), (byte) 14, SchematicSystem.MESSAGE.parse("CANCEL", p), click -> p.closeInventory()); inv.setItem(8, Material.ORANGE_DYE, (byte) 14, SchematicSystem.MESSAGE.parse("CANCEL", p), click -> p.closeInventory());
inv.setCallback(-999, click -> p.closeInventory()); inv.setCallback(-999, click -> p.closeInventory());
inv.open(); inv.open();
} }
@@ -21,7 +21,6 @@ package de.steamwar.schematicsystem.commands.schematiccommand;
import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard;
import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import de.steamwar.network.NetworkSender; import de.steamwar.network.NetworkSender;
import de.steamwar.network.packets.client.PrepareSchemPacket; import de.steamwar.network.packets.client.PrepareSchemPacket;
import de.steamwar.providers.BauServerInfo; import de.steamwar.providers.BauServerInfo;
@@ -487,20 +486,20 @@ public class SchematicCommandUtils {
private static void submitSchemGUI(Player player, SchematicNode node, SchematicType type) { private static void submitSchemGUI(Player player, SchematicNode node, SchematicType type) {
SWInventory inv = new SWInventory(player, 9, SchematicSystem.MESSAGE.parse("UTIL_SUBMIT_TITLE", player)); SWInventory inv = new SWInventory(player, 9, SchematicSystem.MESSAGE.parse("UTIL_SUBMIT_TITLE", player));
inv.setItem(0, SWItem.getMaterial("SIGN"), SchematicSystem.MESSAGE.parse(node.allowReplay()?"UTIL_SUBMIT_REPLAY_ON":"UTIL_SUBMIT_REPLAY_OFF", player), click -> { inv.setItem(0, Material.OAK_SIGN, SchematicSystem.MESSAGE.parse(node.allowReplay()?"UTIL_SUBMIT_REPLAY_ON":"UTIL_SUBMIT_REPLAY_OFF", player), click -> {
node.setAllowReplay(!node.allowReplay()); node.setAllowReplay(!node.allowReplay());
submitSchemGUI(player, node, type); submitSchemGUI(player, node, type);
}); });
inv.setItem(1, SWItem.getMaterial(node.replaceColor() ? "PINK_WOOL" : "LIGHT_GRAY_WOOL"), SchematicSystem.MESSAGE.parse(node.replaceColor()?"UTIL_SUBMIT_COLOR_ON":"UTIL_SUBMIT_COLOR_OFF", player), click -> { inv.setItem(1, node.replaceColor() ? Material.PINK_WOOL : Material.LIGHT_GRAY_WOOL, SchematicSystem.MESSAGE.parse(node.replaceColor()?"UTIL_SUBMIT_COLOR_ON":"UTIL_SUBMIT_COLOR_OFF", player), click -> {
node.setReplaceColor(!node.replaceColor()); node.setReplaceColor(!node.replaceColor());
submitSchemGUI(player, node, type); submitSchemGUI(player, node, type);
}); });
inv.setItem(7, SWItem.getDye(7), (byte) 7, SchematicSystem.MESSAGE.parse("UTIL_SUBMIT_DIRECT", player), click -> { inv.setItem(7, Material.LIGHT_GRAY_DYE, (byte) 7, SchematicSystem.MESSAGE.parse("UTIL_SUBMIT_DIRECT", player), click -> {
node.setSchemtype(type.checkType()); node.setSchemtype(type.checkType());
SchematicSystem.MESSAGE.send(type.getManualCheck() ? "UTIL_SUBMIT_DIRECT_DONE" : "UTIL_SUBMIT_DIRECT_PLAYABLE", player); SchematicSystem.MESSAGE.send(type.getManualCheck() ? "UTIL_SUBMIT_DIRECT_DONE" : "UTIL_SUBMIT_DIRECT_PLAYABLE", player);
player.closeInventory(); player.closeInventory();
}); });
inv.setItem(8, SWItem.getDye(10), (byte) 10, SchematicSystem.MESSAGE.parse("UTIL_SUBMIT_EXTEND", player), click -> { inv.setItem(8, Material.LIME_DYE, (byte) 10, SchematicSystem.MESSAGE.parse("UTIL_SUBMIT_EXTEND", player), click -> {
NetworkSender.send(new PrepareSchemPacket(SteamwarUser.get(player.getUniqueId()).getId(), node.getId(), type.toDB())); NetworkSender.send(new PrepareSchemPacket(SteamwarUser.get(player.getUniqueId()).getId(), node.getId(), type.toDB()));
SchematicSystem.MESSAGE.send("UTIL_SUBMIT_EXTEND_DONE", player); SchematicSystem.MESSAGE.send("UTIL_SUBMIT_EXTEND_DONE", player);
player.closeInventory(); player.closeInventory();
@@ -27,7 +27,6 @@ import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.session.ClipboardHolder;
import de.steamwar.command.AbstractSWCommand; import de.steamwar.command.AbstractSWCommand;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.core.Core;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.schematicsystem.SchematicSystem; import de.steamwar.schematicsystem.SchematicSystem;
import de.steamwar.schematicsystem.autocheck.AutoChecker; import de.steamwar.schematicsystem.autocheck.AutoChecker;
@@ -243,7 +243,7 @@ public class TinyProtocol {
} }
} }
public <T> void addTypedFilter(Class<T> packetType, BiFunction<Player, T, Object> filter) { public <T> void addTypedFilter(Class<T> packetType, BiFunction<Player, ? super T, Object> filter) {
packetFilters.computeIfAbsent(packetType, c -> new CopyOnWriteArrayList<>()).add((BiFunction) filter); packetFilters.computeIfAbsent(packetType, c -> new CopyOnWriteArrayList<>()).add((BiFunction) filter);
} }
@@ -252,7 +252,7 @@ public class TinyProtocol {
packetFilters.computeIfAbsent(packetType, c -> new CopyOnWriteArrayList<>()).add(filter); packetFilters.computeIfAbsent(packetType, c -> new CopyOnWriteArrayList<>()).add(filter);
} }
public void removeFilter(Class<?> packetType, BiFunction<Player, Object, Object> filter) { public void removeFilter(Class<?> packetType, BiFunction<Player, ?, Object> filter) {
packetFilters.getOrDefault(packetType, Collections.emptyList()).remove(filter); packetFilters.getOrDefault(packetType, Collections.emptyList()).remove(filter);
} }
@@ -41,9 +41,7 @@ public class BountifulWrapper {
} }
public void sendMessage(Player player, ChatMessageType type, BaseComponent... msg) { public void sendMessage(Player player, ChatMessageType type, BaseComponent... msg) {
if(type == ChatMessageType.CHAT) if(type == ChatMessageType.CHAT) type = ChatMessageType.SYSTEM;
type = ChatMessageType.SYSTEM;
player.spigot().sendMessage(type, msg); player.spigot().sendMessage(type, msg);
} }
@@ -62,9 +60,7 @@ public class BountifulWrapper {
Reflection.Field<PositionMoveRotation> field = Reflection.getField(packetClass, PositionMoveRotation.class, 0); Reflection.Field<PositionMoveRotation> field = Reflection.getField(packetClass, PositionMoveRotation.class, 0);
return (packet, x, y, z, pitch, yaw) -> { return (packet, x, y, z, pitch, yaw) -> {
PositionMoveRotation pos = field.get(packet); field.set(packet, new PositionMoveRotation(new Vec3(x, y, z), field.get(packet).deltaMovement(), yaw, pitch));
field.set(packet, new PositionMoveRotation(new Vec3(x, y, z), pos.deltaMovement(), yaw, pitch));
}; };
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
Reflection.Field<Double> posX = Reflection.getField(packetClass, double.class, fieldOffset); Reflection.Field<Double> posX = Reflection.getField(packetClass, double.class, fieldOffset);
@@ -90,24 +86,6 @@ public class BountifulWrapper {
} }
} }
public BountifulWrapper.PositionSetter getRelMoveSetter(Class<?> packetClass) {
Class<?> type = short.class;
Reflection.Field<?> moveX = Reflection.getField(packetClass, type, 0);
Reflection.Field<?> moveY = Reflection.getField(packetClass, type, 1);
Reflection.Field<?> moveZ = Reflection.getField(packetClass, type, 2);
Reflection.Field<Byte> moveYaw = Reflection.getField(packetClass, byte.class, 0);
Reflection.Field<Byte> movePitch = Reflection.getField(packetClass, byte.class, 1);
return (packet, x, y, z, pitch, yaw) -> {
moveX.set(packet, (short)(x*4096));
moveY.set(packet, (short)(y*4096));
moveZ.set(packet, (short)(z*4096));
moveYaw.set(packet, (byte)(yaw*256/360));
movePitch.set(packet, (byte)(pitch*256/360));
};
}
public BountifulWrapper.UUIDSetter getUUIDSetter(Class<?> packetClass) { public BountifulWrapper.UUIDSetter getUUIDSetter(Class<?> packetClass) {
Reflection.Field<UUID> uuidField = Reflection.getField(packetClass, UUID.class, 0); Reflection.Field<UUID> uuidField = Reflection.getField(packetClass, UUID.class, 0);
@@ -19,6 +19,7 @@
package de.steamwar.core; package de.steamwar.core;
import lombok.experimental.UtilityClass;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.contents.PlainTextContents; import net.minecraft.network.chat.contents.PlainTextContents;
import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket; import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
@@ -26,9 +27,8 @@ import net.minecraft.network.syncher.SynchedEntityData;
import java.util.ArrayList; import java.util.ArrayList;
@UtilityClass
public class ChatWrapper { public class ChatWrapper {
public static final ChatWrapper impl = new ChatWrapper();
public Object stringToChatComponent(String text) { public Object stringToChatComponent(String text) {
return MutableComponent.create(PlainTextContents.create(text)); return MutableComponent.create(PlainTextContents.create(text));
} }
@@ -26,6 +26,7 @@ import io.netty.channel.ChannelFuture;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerConnectionListener; import net.minecraft.server.network.ServerConnectionListener;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.CraftWorld;
import org.eclipse.openj9.criu.CRIUSupport; import org.eclipse.openj9.criu.CRIUSupport;
import org.eclipse.openj9.criu.JVMCRIUException; import org.eclipse.openj9.criu.JVMCRIUException;
import sun.misc.Signal; import sun.misc.Signal;
@@ -96,7 +97,9 @@ class CheckpointUtilsJ9 {
private static void freezeInternal(Path path) throws Exception { private static void freezeInternal(Path path) throws Exception {
Bukkit.getPluginManager().callEvent(new CRIUSleepEvent()); Bukkit.getPluginManager().callEvent(new CRIUSleepEvent());
Bukkit.getWorlds().forEach(FlatteningWrapper.impl::syncSave); Bukkit.getWorlds().forEach(world -> {
((CraftWorld) world).getHandle().save(null, true, false);
});
Statement.closeAll(); Statement.closeAll();
// Close socket // Close socket
@@ -19,339 +19,14 @@
package de.steamwar.core; package de.steamwar.core;
import com.destroystokyo.paper.profile.PlayerProfile; import lombok.experimental.UtilityClass;
import de.steamwar.Reflection;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundSetObjectivePacket;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Pose;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.SkullMeta;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
@UtilityClass
public class FlatteningWrapper { public class FlatteningWrapper {
private FlatteningWrapper() {}
public static final FlatteningWrapper impl = new FlatteningWrapper();
private static final Map<String, Material> renamedLegacy = new HashMap<>();
static{
renamedLegacy.put("WOOD", Material.OAK_WOOD);
renamedLegacy.put("SAPLING", Material.OAK_SAPLING);
renamedLegacy.put("STATIONARY_WATER", Material.WATER);
renamedLegacy.put("STATIONARY_LAVA", Material.LAVA);
renamedLegacy.put("LOG", Material.OAK_LOG);
renamedLegacy.put("LEAVES", Material.OAK_LEAVES);
renamedLegacy.put("BED_BLOCK", Material.RED_BED);
renamedLegacy.put("BED", Material.RED_BED);
renamedLegacy.put("PISTON_STICKY_BASE", Material.STICKY_PISTON);
renamedLegacy.put("WEB", Material.COBWEB);
renamedLegacy.put("LONG_GRASS", Material.TALL_GRASS);
renamedLegacy.put("PISTON_BASE", Material.PISTON);
renamedLegacy.put("PISTON_EXTENSION", Material.PISTON_HEAD);
renamedLegacy.put("WOOL", Material.WHITE_WOOL);
renamedLegacy.put("PISTON_MOVING_PIECE", Material.MOVING_PISTON);
renamedLegacy.put("YELLOW_FLOWER", Material.DANDELION);
renamedLegacy.put("RED_ROSE", Material.POPPY);
renamedLegacy.put("DOUBLE_STEP", Material.SMOOTH_STONE);
renamedLegacy.put("STEP", Material.SMOOTH_STONE_SLAB);
renamedLegacy.put("MOB_SPAWNER", Material.SPAWNER);
renamedLegacy.put("WOOD_STAIRS", Material.OAK_STAIRS);
renamedLegacy.put("WORKBENCH", Material.CRAFTING_TABLE);
renamedLegacy.put("CROPS", Material.WHEAT_SEEDS);
renamedLegacy.put("SEEDS", Material.WHEAT_SEEDS);
renamedLegacy.put("SOIL", Material.FARMLAND);
renamedLegacy.put("BURNING_FURNACE", Material.FURNACE);
renamedLegacy.put("SIGN_POST", Material.OAK_SIGN);
renamedLegacy.put("SIGN", Material.OAK_SIGN);
renamedLegacy.put("WOODEN_DOOR", Material.OAK_DOOR);
renamedLegacy.put("WOOD_DOOR", Material.OAK_DOOR);
renamedLegacy.put("RAILS", Material.RAIL);
renamedLegacy.put("WALL_SIGN", Material.OAK_WALL_SIGN);
renamedLegacy.put("STONE_PLATE", Material.STONE_PRESSURE_PLATE);
renamedLegacy.put("WOOD_PLATE", Material.OAK_PRESSURE_PLATE);
renamedLegacy.put("GLOWING_REDSTONE_ORE", Material.REDSTONE_ORE);
renamedLegacy.put("REDSTONE_TORCH_OFF", Material.REDSTONE_TORCH);
renamedLegacy.put("REDSTONE_TORCH_ON", Material.REDSTONE_TORCH);
renamedLegacy.put("IRON_DOOR_BLOCK", Material.IRON_DOOR);
renamedLegacy.put("SUGAR_CANE_BLOCK", Material.SUGAR_CANE);
renamedLegacy.put("CAKE_BLOCK", Material.CAKE);
renamedLegacy.put("MELON_BLOCK", Material.MELON);
renamedLegacy.put("BEETROOT_BLOCK", Material.BEETROOT);
renamedLegacy.put("FENCE", Material.OAK_FENCE);
renamedLegacy.put("PORTAL", Material.NETHER_PORTAL);
renamedLegacy.put("DIODE_BLOCK_OFF", Material.REPEATER);
renamedLegacy.put("DIODE_BLOCK_ON", Material.REPEATER);
renamedLegacy.put("DIODE", Material.REPEATER);
renamedLegacy.put("STAINED_GLASS", Material.WHITE_STAINED_GLASS);
renamedLegacy.put("TRAP_DOOR", Material.OAK_TRAPDOOR);
renamedLegacy.put("MONSTER_EGGS", Material.SKELETON_SPAWN_EGG);
renamedLegacy.put("MONSTER_EGG", Material.SKELETON_SPAWN_EGG);
renamedLegacy.put("SMOOTH_BRICK", Material.STONE_BRICKS);
renamedLegacy.put("HUGE_MUSHROOM_1", Material.MUSHROOM_STEM);
renamedLegacy.put("HUGE_MUSHROOM_2", Material.RED_MUSHROOM);
renamedLegacy.put("IRON_FENCE", Material.IRON_BARS);
renamedLegacy.put("THIN_GLASS", Material.GLASS_PANE);
renamedLegacy.put("FENCE_GATE", Material.OAK_FENCE_GATE);
renamedLegacy.put("SMOOTH_STAIRS", Material.STONE_BRICK_STAIRS);
renamedLegacy.put("MYCEL", Material.MYCELIUM);
renamedLegacy.put("WATER_LILY", Material.LILY_PAD);
renamedLegacy.put("NETHER_FENCE", Material.NETHER_BRICK_FENCE);
renamedLegacy.put("NETHER_WARTS", Material.NETHER_WART);
renamedLegacy.put("NETHER_STALK", Material.NETHER_WART);
renamedLegacy.put("ENCHANTMENT_TABLE", Material.ENCHANTING_TABLE);
renamedLegacy.put("ENDER_PORTAL", Material.END_PORTAL);
renamedLegacy.put("ENDER_PORTAL_FRAME", Material.END_PORTAL_FRAME);
renamedLegacy.put("ENDER_STONE", Material.END_STONE);
renamedLegacy.put("REDSTONE_LAMP_OFF", Material.REDSTONE_LAMP);
renamedLegacy.put("REDSTONE_LAMP_ON", Material.REDSTONE_LAMP);
renamedLegacy.put("WOOD_DOUBLE_STEP", Material.OAK_SLAB);
renamedLegacy.put("WOOD_STEP", Material.OAK_SLAB);
renamedLegacy.put("SPRUCE_WOOD_STAIRS", Material.SPRUCE_STAIRS);
renamedLegacy.put("BIRCH_WOOD_STAIRS", Material.BIRCH_STAIRS);
renamedLegacy.put("JUNGLE_WOOD_STAIRS", Material.JUNGLE_STAIRS);
renamedLegacy.put("COMMAND", Material.COMMAND_BLOCK);
renamedLegacy.put("COBBLE_WALL", Material.COBBLESTONE_WALL);
renamedLegacy.put("WOOD_BUTTON", Material.OAK_BUTTON);
renamedLegacy.put("SKULL", Material.SKELETON_SKULL);
renamedLegacy.put("SKULL_ITEM", Material.SKELETON_SKULL);
renamedLegacy.put("GOLD_PLATE", Material.LIGHT_WEIGHTED_PRESSURE_PLATE);
renamedLegacy.put("IRON_PLATE", Material.HEAVY_WEIGHTED_PRESSURE_PLATE);
renamedLegacy.put("REDSTONE_COMPARATOR_OFF", Material.COMPARATOR);
renamedLegacy.put("REDSTONE_COMPARATOR_ON", Material.COMPARATOR);
renamedLegacy.put("REDSTONE_COMPARATOR", Material.COMPARATOR);
renamedLegacy.put("QUARTZ_ORE", Material.QUARTZ);
renamedLegacy.put("STAINED_CLAY", Material.WHITE_TERRACOTTA);
renamedLegacy.put("STAINED_GLASS_PANE", Material.WHITE_STAINED_GLASS_PANE);
renamedLegacy.put("LEAVES_2", Material.ACACIA_LEAVES);
renamedLegacy.put("LOG_2", Material.ACACIA_LOG);
renamedLegacy.put("CARPET", Material.WHITE_CARPET);
renamedLegacy.put("HARD_CLAY", Material.TERRACOTTA);
renamedLegacy.put("DOUBLE_PLANT", Material.SUNFLOWER);
renamedLegacy.put("STANDING_BANNER", Material.WHITE_BANNER);
renamedLegacy.put("BANNER", Material.WHITE_BANNER);
renamedLegacy.put("WALL_BANNER", Material.WHITE_WALL_BANNER);
renamedLegacy.put("DAYLIGHT_DETECTOR_INVERTED", Material.DAYLIGHT_DETECTOR);
renamedLegacy.put("DOUBLE_STONE_SLAB2", Material.RED_SANDSTONE_SLAB);
renamedLegacy.put("STONE_SLAB2", Material.RED_SANDSTONE_SLAB);
renamedLegacy.put("PURPUR_DOUBLE_SLAB", Material.PURPUR_SLAB);
renamedLegacy.put("END_BRICKS", Material.END_STONE_BRICKS);
renamedLegacy.put("COMMAND_REPEATING", Material.REPEATING_COMMAND_BLOCK);
renamedLegacy.put("COMMAND_CHAIN", Material.CHAIN_COMMAND_BLOCK);
renamedLegacy.put("MAGMA", Material.MAGMA_BLOCK);
renamedLegacy.put("RED_NETHER_BRICK", Material.RED_NETHER_BRICKS);
renamedLegacy.put("SILVER_SHULKER_BOX", Material.LIGHT_GRAY_SHULKER_BOX);
renamedLegacy.put("SILVER_GLAZED_TERRACOTTA", Material.LIGHT_GRAY_TERRACOTTA);
renamedLegacy.put("CONCRETE", Material.WHITE_CONCRETE);
renamedLegacy.put("CONCRETE_POWDER", Material.WHITE_CONCRETE_POWDER);
renamedLegacy.put("IRON_SPADE", Material.IRON_SHOVEL);
renamedLegacy.put("WOOD_SWORD", Material.WOODEN_SWORD);
renamedLegacy.put("WOOD_SPADE", Material.WOODEN_SHOVEL);
renamedLegacy.put("WOOD_PICKAXE", Material.WOODEN_PICKAXE);
renamedLegacy.put("WOOD_AXE", Material.WOODEN_AXE);
renamedLegacy.put("STONE_SPADE", Material.STONE_SHOVEL);
renamedLegacy.put("DIAMOND_SPADE", Material.DIAMOND_SHOVEL);
renamedLegacy.put("MUSHROOM_SOUP", Material.MUSHROOM_STEW);
renamedLegacy.put("GOLD_SWORD", Material.GOLDEN_SWORD);
renamedLegacy.put("GOLD_SPADE", Material.GOLDEN_SHOVEL);
renamedLegacy.put("GOLD_PICKAXE", Material.GOLDEN_PICKAXE);
renamedLegacy.put("GOLD_AXE", Material.GOLDEN_AXE);
renamedLegacy.put("SULPHUR", Material.GUNPOWDER);
renamedLegacy.put("WOOD_HOE", Material.WOODEN_HOE);
renamedLegacy.put("GOLD_HOE", Material.GOLDEN_HOE);
renamedLegacy.put("GOLD_HELMET", Material.GOLDEN_HELMET);
renamedLegacy.put("GOLD_CHESTPLATE", Material.GOLDEN_CHESTPLATE);
renamedLegacy.put("GOLD_LEGGINGS", Material.GOLDEN_LEGGINGS);
renamedLegacy.put("GOLD_BOOTS", Material.GOLDEN_BOOTS);
renamedLegacy.put("PORK", Material.PORKCHOP);
renamedLegacy.put("GRILLED_PORK", Material.COOKED_PORKCHOP);
renamedLegacy.put("SNOW_BALL", Material.SNOWBALL);
renamedLegacy.put("BOAT", Material.OAK_BOAT);
renamedLegacy.put("CLAY_BRICK", Material.BRICKS);
renamedLegacy.put("STORAGE_MINECART", Material.CHEST_MINECART);
renamedLegacy.put("POWERED_MINECART", Material.FURNACE_MINECART);
renamedLegacy.put("WATCH", Material.CLOCK);
renamedLegacy.put("RAW_FISH", Material.SALMON);
renamedLegacy.put("COOKED_FISH", Material.COOKED_SALMON);
renamedLegacy.put("INK_SACK", Material.INK_SAC);
renamedLegacy.put("RAW_BEEF", Material.BEEF);
renamedLegacy.put("RAW_CHICKEN", Material.CHICKEN);
renamedLegacy.put("EYE_OF_ENDER", Material.ENDER_EYE);
renamedLegacy.put("SPECKLED_MELON", Material.GLISTERING_MELON_SLICE);
renamedLegacy.put("EXP_BOTTLE", Material.EXPERIENCE_BOTTLE);
renamedLegacy.put("FIREBALL", Material.FIRE_CHARGE);
renamedLegacy.put("BOOK_AND_QUILL", Material.WRITABLE_BOOK);
renamedLegacy.put("FLOWER_POT_ITEM", Material.FLOWER_POT);
renamedLegacy.put("EMPTY_MAP", Material.MAP);
renamedLegacy.put("BREWING_STAND_ITEM", Material.BREWING_STAND);
renamedLegacy.put("CAULDRON_ITEM", Material.CAULDRON);
renamedLegacy.put("CARROT_ITEM", Material.CARROT);
renamedLegacy.put("POTATO_ITEM", Material.POTATO);
renamedLegacy.put("SPRUCE_DOOR_ITEM", Material.SPRUCE_DOOR);
renamedLegacy.put("BIRCH_DOOR_ITEM", Material.BIRCH_DOOR);
renamedLegacy.put("JUNGLE_DOOR_ITEM", Material.JUNGLE_DOOR);
renamedLegacy.put("ACACIA_DOOR_ITEM", Material.ACACIA_DOOR);
renamedLegacy.put("DARK_OAK_DOOR_ITEM", Material.DARK_OAK_DOOR);
renamedLegacy.put("CARROT_STICK", Material.CARROT_ON_A_STICK);
renamedLegacy.put("FIREWORK", Material.FIREWORK_ROCKET);
renamedLegacy.put("FIREWORK_CHARGE", Material.FIREWORK_STAR);
renamedLegacy.put("NETHER_BRICK_ITEM", Material.NETHER_BRICKS);
renamedLegacy.put("EXPLOSIVE_MINECART", Material.TNT_MINECART);
renamedLegacy.put("IRON_BARDING", Material.IRON_HORSE_ARMOR);
renamedLegacy.put("GOLD_BARDING", Material.GOLDEN_HORSE_ARMOR);
renamedLegacy.put("DIAMOND_BARDING", Material.DIAMOND_HORSE_ARMOR);
renamedLegacy.put("LEASH", Material.LEAD);
renamedLegacy.put("COMMAND_MINECART", Material.COMMAND_BLOCK_MINECART);
renamedLegacy.put("CHORUS_FRUIT_POPPED", Material.POPPED_CHORUS_FRUIT);
renamedLegacy.put("DRAGONS_BREATH", Material.DRAGON_BREATH);
renamedLegacy.put("BOAT_SPRUCE", Material.SPRUCE_BOAT);
renamedLegacy.put("BOAT_BIRCH", Material.BIRCH_BOAT);
renamedLegacy.put("BOAT_JUNGLE", Material.JUNGLE_BOAT);
renamedLegacy.put("BOAT_ACACIA", Material.ACACIA_BOAT);
renamedLegacy.put("BOAT_DARK_OAK", Material.DARK_OAK_BOAT);
renamedLegacy.put("TOTEM", Material.TOTEM_OF_UNDYING);
renamedLegacy.put("GOLD_RECORD", Material.MUSIC_DISC_13);
renamedLegacy.put("GREEN_RECORD", Material.MUSIC_DISC_CAT);
renamedLegacy.put("RECORD_3", Material.MUSIC_DISC_BLOCKS);
renamedLegacy.put("RECORD_4", Material.MUSIC_DISC_CHIRP);
renamedLegacy.put("RECORD_5", Material.MUSIC_DISC_FAR);
renamedLegacy.put("RECORD_6", Material.MUSIC_DISC_MALL);
renamedLegacy.put("RECORD_7", Material.MUSIC_DISC_MELLOHI);
renamedLegacy.put("RECORD_8", Material.MUSIC_DISC_STAL);
renamedLegacy.put("RECORD_9", Material.MUSIC_DISC_STRAD);
renamedLegacy.put("RECORD_10", Material.MUSIC_DISC_WARD);
renamedLegacy.put("RECORD_11", Material.MUSIC_DISC_11);
renamedLegacy.put("RECORD_12", Material.MUSIC_DISC_WAIT);
}
private static final Reflection.Field<?> scoreboardName = Reflection.getField(ClientboundSetObjectivePacket.class, Component.class, 0);
public void setScoreboardTitle(Object packet, String title) {
scoreboardName.set(packet, ChatWrapper.impl.stringToChatComponent(title));
}
private static final Class<?> scoreActionEnum = null;
private static final Reflection.Field<?> scoreAction = null;
private static final Object scoreActionChange = null;
public void setScoreAction(Object packet) {
scoreAction.set(packet, scoreActionChange);
}
public Material getMaterial(String material) {
try{
return Material.valueOf(material);
}catch(IllegalArgumentException e){
return renamedLegacy.get(material);
}
}
public Material getDye(int colorCode) {
switch(colorCode){
case 1:
return Material.RED_DYE;
case 2:
return Material.GREEN_DYE;
case 3:
return Material.BROWN_DYE;
case 4:
return Material.LAPIS_LAZULI;
case 5:
return Material.PURPLE_DYE;
case 6:
return Material.CYAN_DYE;
case 7:
return Material.LIGHT_GRAY_DYE;
case 8:
return Material.GRAY_DYE;
case 9:
return Material.PINK_DYE;
case 10:
return Material.LIME_DYE;
case 11:
return Material.YELLOW_DYE;
case 12:
return Material.LIGHT_BLUE_DYE;
case 13:
return Material.MAGENTA_DYE;
case 14:
return Material.ORANGE_DYE;
case 15:
return Material.WHITE_DYE;
default:
return Material.BLACK_DYE;
}
}
public ItemStack setSkullOwner(String player) {
ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1);
head.editMeta(SkullMeta.class, skullMeta -> {
try {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(player.startsWith(".") ? player.substring(1) : player);
PlayerProfile playerProfile = offlinePlayer.getPlayerProfile();
playerProfile.complete();
skullMeta.setPlayerProfile(playerProfile);
} catch (Exception e) {
// Ignore
}
});
return head;
}
protected static final Class<?> entityPose = Pose.class;
protected static final Object shooting = entityPose.getEnumConstants()[16];
protected static final Object standing = entityPose.getEnumConstants()[0];
protected static final Object swimming = entityPose.getEnumConstants()[3];
protected static final Object sneaking = entityPose.getEnumConstants()[5];
public Object getPose(FlatteningWrapper.EntityPose pose) {
switch (pose) {
case SHOOTING:
return shooting;
case SNEAKING:
return sneaking;
case SWIMMING:
return swimming;
case NORMAL:
default:
return standing;
}
}
public Object formatDisplayName(String displayName) { public Object formatDisplayName(String displayName) {
return displayName != null ? Optional.of(ChatWrapper.impl.stringToChatComponent(displayName)) : Optional.empty(); return displayName != null ? Optional.of(ChatWrapper.stringToChatComponent(displayName)) : Optional.empty();
}
private static final Reflection.Field<net.minecraft.world.entity.EntityType> spawnType = Reflection.getField(ProtocolWrapper.spawnPacket, net.minecraft.world.entity.EntityType.class, 0);
public void setSpawnPacketType(Object packet, EntityType type) {
ResourceLocation key = CraftNamespacedKey.toMinecraft(type.getKey());
spawnType.set(packet, BuiltInRegistries.ENTITY_TYPE.get(key).get().value());
}
public int getViewDistance(Player player) {
return player.getClientViewDistance();
}
public void syncSave(World world) {
((CraftWorld) world).getHandle().save(null, true, false);
}
public enum EntityPose {
NORMAL,
SNEAKING,
SWIMMING,
SHOOTING,
;
} }
} }
@@ -20,11 +20,9 @@
package de.steamwar.core; package de.steamwar.core;
import com.mojang.authlib.GameProfile; import com.mojang.authlib.GameProfile;
import com.mojang.datafixers.util.Pair;
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket; import net.minecraft.network.protocol.game.ClientboundPlayerInfoRemovePacket;
import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket; import net.minecraft.network.protocol.game.ClientboundPlayerInfoUpdatePacket;
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameType; import net.minecraft.world.level.GameType;
@@ -37,19 +35,12 @@ public class ProtocolWrapper {
public static final Class<?> itemStack = ItemStack.class; public static final Class<?> itemStack = ItemStack.class;
public static final Class<?> spawnPacket = ClientboundAddEntityPacket.class; public static final Class<?> spawnPacket = ClientboundAddEntityPacket.class;
public static final Class<?> spawnLivingPacket = ProtocolWrapper.spawnPacket;
public static final Class<?> equipmentPacket = ClientboundSetEquipmentPacket.class;
// 0: hand, 1: offhand, 2: feet, 3: legs, 4: chest, 5: head // 0: hand, 1: offhand, 2: feet, 3: legs, 4: chest, 5: head
public static final EquipmentSlot[] itemSlots = EquipmentSlot.values(); public static final EquipmentSlot[] itemSlots = EquipmentSlot.values();
public static final ProtocolWrapper impl = new ProtocolWrapper(); public static final ProtocolWrapper impl = new ProtocolWrapper();
public void setEquipmentPacketStack(Object packet, Object slot, Object stack) {
ClientboundSetEquipmentPacket setEquipmentPacket = (ClientboundSetEquipmentPacket) packet;
setEquipmentPacket.getSlots().add(Pair.of((EquipmentSlot) slot, (ItemStack) stack));
}
public Object playerInfoPacketConstructor(PlayerInfoAction action, GameProfile profile, GameMode mode) { public Object playerInfoPacketConstructor(PlayerInfoAction action, GameProfile profile, GameMode mode) {
if(action == PlayerInfoAction.REMOVE) if(action == PlayerInfoAction.REMOVE)
return new ClientboundPlayerInfoRemovePacket(Collections.singletonList(profile.getId())); return new ClientboundPlayerInfoRemovePacket(Collections.singletonList(profile.getId()));
@@ -45,7 +45,7 @@ public class WorldEditRenderer implements Listener {
private static WorldEditRenderer INSTANCE; private static WorldEditRenderer INSTANCE;
private static final Material WAND = FlatteningWrapper.impl.getMaterial("WOOD_AXE"); private static final Material WAND = Material.WOODEN_AXE;
private final WorldEditPlugin we; private final WorldEditPlugin we;
@@ -1,53 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2025 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.entity;
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
import net.minecraft.network.protocol.game.ClientboundTeleportEntityPacket;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.PositionMoveRotation;
import net.minecraft.world.phys.Vec3;
import java.util.Collections;
public class PacketConstructor {
public static final PacketConstructor impl = new PacketConstructor();
public Object teleportPacket(int entityId, double x, double y, double z, float yaw, float pitch) {
PositionMoveRotation rot = new PositionMoveRotation(new Vec3(x, y, z), Vec3.ZERO, pitch, yaw);
return new ClientboundTeleportEntityPacket(entityId, rot, Collections.emptySet(), false);
}
public Object createRPlayerSpawn(RPlayer player) {
return new ClientboundAddEntityPacket(
player.entityId,
player.uuid,
player.x,
player.y,
player.z,
player.yaw,
player.pitch,
EntityType.PLAYER,
0,
Vec3.ZERO,
player.headYaw
);
}
}
@@ -19,8 +19,9 @@
package de.steamwar.entity; package de.steamwar.entity;
import de.steamwar.core.BountifulWrapper;
import lombok.Getter; import lombok.Getter;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@@ -28,7 +29,7 @@ import java.util.function.Consumer;
public class RArmorStand extends REntity { public class RArmorStand extends REntity {
private static final Object sizeWatcher = BountifulWrapper.impl.getDataWatcherObject(15, Byte.class); private static final EntityDataAccessor<Byte> sizeWatcher = new EntityDataAccessor<>(15, EntityDataSerializers.BYTE);
@Getter @Getter
private final Size size; private final Size size;
@@ -19,8 +19,9 @@
package de.steamwar.entity; package de.steamwar.entity;
import de.steamwar.core.BountifulWrapper;
import lombok.Getter; import lombok.Getter;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@@ -58,7 +59,7 @@ public class RBlockDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getBlock); sendPacket(updatePacketSink, this::getBlock);
} }
private static final Object blockWatcher = BountifulWrapper.impl.getDataWatcherObject(23, BlockState.class); private static final EntityDataAccessor<BlockState> blockWatcher = new EntityDataAccessor<>(23, EntityDataSerializers.BLOCK_STATE);
private void getBlock(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getBlock(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || !block.getAsString(true).equals(DEFAULT_BLOCK.getAsString(true))) { if (ignoreDefault || !block.getAsString(true).equals(DEFAULT_BLOCK.getAsString(true))) {
packetSink.accept(blockWatcher, ((CraftBlockData) block).getState()); packetSink.accept(blockWatcher, ((CraftBlockData) block).getState());
@@ -19,9 +19,10 @@
package de.steamwar.entity; package de.steamwar.entity;
import de.steamwar.core.BountifulWrapper;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Display; import org.bukkit.entity.Display;
@@ -35,9 +36,6 @@ import java.util.List;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer; import java.util.function.Consumer;
/**
* !! This class cannot be used in Versions lower than or equal to 1.19.4 !!
*/
@Getter @Getter
public abstract class RDisplay extends REntity { public abstract class RDisplay extends REntity {
@@ -110,10 +108,10 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getTransformData); sendPacket(updatePacketSink, this::getTransformData);
} }
private static final Object translationWatcher = BountifulWrapper.impl.getDataWatcherObject(11, Vector3f.class); private static final EntityDataAccessor<Vector3f> translationWatcher = new EntityDataAccessor<>(11, EntityDataSerializers.VECTOR3);
private static final Object leftRotationWatcher = BountifulWrapper.impl.getDataWatcherObject(13, Quaternionf.class); private static final EntityDataAccessor<Quaternionf> leftRotationWatcher = new EntityDataAccessor<>(13, EntityDataSerializers.QUATERNION);
private static final Object scaleWatcher = BountifulWrapper.impl.getDataWatcherObject(12, Vector3f.class); private static final EntityDataAccessor<Vector3f> scaleWatcher = new EntityDataAccessor<>(12, EntityDataSerializers.VECTOR3);
private static final Object rightRotationWatcher = BountifulWrapper.impl.getDataWatcherObject(14, Quaternionf.class); private static final EntityDataAccessor<Quaternionf> rightRotationWatcher = new EntityDataAccessor<>(14, EntityDataSerializers.QUATERNION);
private void getTransformData(boolean ignoreDefault, BiConsumer<Object, Object> dataSink) { private void getTransformData(boolean ignoreDefault, BiConsumer<Object, Object> dataSink) {
if (ignoreDefault || !transform.equals(DEFAULT_TRANSFORM)) { if (ignoreDefault || !transform.equals(DEFAULT_TRANSFORM)) {
@@ -129,8 +127,8 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getInterpolationDuration); sendPacket(updatePacketSink, this::getInterpolationDuration);
} }
private static final Object transformationInterpolationDurationWatcher = BountifulWrapper.impl.getDataWatcherObject(9, Integer.class); private static final EntityDataAccessor<Integer> transformationInterpolationDurationWatcher = new EntityDataAccessor<>(9, EntityDataSerializers.INT);
private static final Object positionOrRotationInterpolationDurationWatcher = BountifulWrapper.impl.getDataWatcherObject(10, Integer.class); private static final EntityDataAccessor<Integer> positionOrRotationInterpolationDurationWatcher = new EntityDataAccessor<>(10, EntityDataSerializers.INT);
private void getInterpolationDuration(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getInterpolationDuration(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || interpolationDelay != 0) { if (ignoreDefault || interpolationDelay != 0) {
@@ -144,7 +142,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getViewRange); sendPacket(updatePacketSink, this::getViewRange);
} }
private static final Object viewRangeWatcher = BountifulWrapper.impl.getDataWatcherObject(17, Float.class); private static final EntityDataAccessor<Float> viewRangeWatcher = new EntityDataAccessor<>(17, EntityDataSerializers.FLOAT);
private void getViewRange(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getViewRange(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || viewRange != 1.0F) { if (ignoreDefault || viewRange != 1.0F) {
@@ -157,7 +155,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getShadowRadius); sendPacket(updatePacketSink, this::getShadowRadius);
} }
private static final Object shadowRadiusWatcher = BountifulWrapper.impl.getDataWatcherObject(18, Float.class); private static final EntityDataAccessor<Float> shadowRadiusWatcher = new EntityDataAccessor<>(18, EntityDataSerializers.FLOAT);
private void getShadowRadius(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getShadowRadius(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || shadowRadius != 0.0F) { if (ignoreDefault || shadowRadius != 0.0F) {
@@ -170,7 +168,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getShadowStrength); sendPacket(updatePacketSink, this::getShadowStrength);
} }
private static final Object shadowStrengthWatcher = BountifulWrapper.impl.getDataWatcherObject(19, Float.class); private static final EntityDataAccessor<Float> shadowStrengthWatcher = new EntityDataAccessor<>(19, EntityDataSerializers.FLOAT);
private void getShadowStrength(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getShadowStrength(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || shadowStrength != 1.0F) { if (ignoreDefault || shadowStrength != 1.0F) {
@@ -183,7 +181,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getDisplayWidth); sendPacket(updatePacketSink, this::getDisplayWidth);
} }
private static final Object displayWidthWatcher = BountifulWrapper.impl.getDataWatcherObject(20, Float.class); private static final EntityDataAccessor<Float> displayWidthWatcher = new EntityDataAccessor<>(20, EntityDataSerializers.FLOAT);
private void getDisplayWidth(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getDisplayWidth(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || displayWidth != 0.0F) { if (ignoreDefault || displayWidth != 0.0F) {
@@ -196,7 +194,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getDisplayHeight); sendPacket(updatePacketSink, this::getDisplayHeight);
} }
private static final Object displayHeightWatcher = BountifulWrapper.impl.getDataWatcherObject(21, Float.class); private static final EntityDataAccessor<Float> displayHeightWatcher = new EntityDataAccessor<>(21, EntityDataSerializers.FLOAT);
private void getDisplayHeight(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getDisplayHeight(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || displayHeight != 0.0F) { if (ignoreDefault || displayHeight != 0.0F) {
@@ -209,7 +207,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getInterpolationDelay); sendPacket(updatePacketSink, this::getInterpolationDelay);
} }
private static final Object interpolationDelayWatcher = BountifulWrapper.impl.getDataWatcherObject(8, Integer.class); private static final EntityDataAccessor<Integer> interpolationDelayWatcher = new EntityDataAccessor<>(8, EntityDataSerializers.INT);
private void getInterpolationDelay(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getInterpolationDelay(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || interpolationDelay != 0) { if (ignoreDefault || interpolationDelay != 0) {
@@ -222,7 +220,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getBillboard); sendPacket(updatePacketSink, this::getBillboard);
} }
private static final Object billboardWatcher = BountifulWrapper.impl.getDataWatcherObject(15, Byte.class); private static final EntityDataAccessor<Byte> billboardWatcher = new EntityDataAccessor<>(15, EntityDataSerializers.BYTE);
private void getBillboard(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getBillboard(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || billboard != Display.Billboard.FIXED) { if (ignoreDefault || billboard != Display.Billboard.FIXED) {
@@ -235,7 +233,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getGlowColorOverride); sendPacket(updatePacketSink, this::getGlowColorOverride);
} }
private static final Object glowColorOverrideWatcher = BountifulWrapper.impl.getDataWatcherObject(22, Integer.class); private static final EntityDataAccessor<Integer> glowColorOverrideWatcher = new EntityDataAccessor<>(22, EntityDataSerializers.INT);
private void getGlowColorOverride(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getGlowColorOverride(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || glowColorOverride != null) { if (ignoreDefault || glowColorOverride != null) {
@@ -248,7 +246,7 @@ public abstract class RDisplay extends REntity {
sendPacket(updatePacketSink, this::getBrightness); sendPacket(updatePacketSink, this::getBrightness);
} }
private static final Object brightnessWatcher = BountifulWrapper.impl.getDataWatcherObject(16, Integer.class); private static final EntityDataAccessor<Integer> brightnessWatcher = new EntityDataAccessor<>(16, EntityDataSerializers.INT);
private void getBrightness(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getBrightness(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || brightness != null) { if (ignoreDefault || brightness != null) {
@@ -19,17 +19,27 @@
package de.steamwar.entity; package de.steamwar.entity;
import com.mojang.datafixers.util.Pair;
import de.steamwar.Reflection; import de.steamwar.Reflection;
import de.steamwar.core.BountifulWrapper; import de.steamwar.core.BountifulWrapper;
import de.steamwar.core.ChatWrapper; import de.steamwar.core.ChatWrapper;
import de.steamwar.core.FlatteningWrapper; import de.steamwar.core.FlatteningWrapper;
import de.steamwar.core.ProtocolWrapper; import de.steamwar.core.ProtocolWrapper;
import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import lombok.Getter; import lombok.Getter;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.*; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.Pose;
import net.minecraft.world.entity.PositionMoveRotation;
import net.minecraft.world.phys.Vec3;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@@ -39,13 +49,11 @@ import java.util.function.Function;
public class REntity { public class REntity {
private static final Object entityStatusWatcher = BountifulWrapper.impl.getDataWatcherObject(0, Byte.class); private static final EntityDataAccessor<Byte> entityStatusWatcher = new EntityDataAccessor<>(0, EntityDataSerializers.BYTE);
private static final Object sneakingDataWatcher = BountifulWrapper.impl.getDataWatcherObject(6, FlatteningWrapper.impl.getPose(FlatteningWrapper.EntityPose.NORMAL).getClass()); private static final EntityDataAccessor<Pose> poseDataWatcher = new EntityDataAccessor<>(6, EntityDataSerializers.POSE);
private static final Object bowDrawnWatcher = BountifulWrapper.impl.getDataWatcherObject(6, FlatteningWrapper.impl.getPose(FlatteningWrapper.EntityPose.NORMAL).getClass()); private static final EntityDataAccessor<Optional<Component>> nameWatcher = new EntityDataAccessor<>(2, EntityDataSerializers.OPTIONAL_COMPONENT);
private static final Object nameWatcher = BountifulWrapper.impl.getDataWatcherObject(2, Optional.class); // Optional<IChatBaseComponent> private static final EntityDataAccessor<Boolean> nameVisibleWatcher = new EntityDataAccessor<>(3, EntityDataSerializers.BOOLEAN);
private static final Object nameVisibleWatcher = BountifulWrapper.impl.getDataWatcherObject(3, Boolean.class); private static final EntityDataAccessor<Boolean> noGravityDataWatcher = new EntityDataAccessor<>(5, EntityDataSerializers.BOOLEAN);
private static final Object noGravityDataWatcher = BountifulWrapper.impl.getDataWatcherObject(5,Boolean.class);
private static int entityIdCounter = -1; private static int entityIdCounter = -1;
private static final Random random = new Random(); private static final Random random = new Random();
@@ -72,11 +80,12 @@ public class REntity {
@Getter @Getter
private boolean invisible; private boolean invisible;
@Getter @Getter
private FlatteningWrapper.EntityPose pose = FlatteningWrapper.EntityPose.NORMAL; private Pose pose = Pose.STANDING;
@Getter @Getter
private boolean bowDrawn; private boolean bowDrawn;
@Getter @Getter
private boolean noGravity; private boolean noGravity;
@Getter
private boolean isGlowing; private boolean isGlowing;
private int fireTick; private int fireTick;
@@ -175,18 +184,8 @@ public class REntity {
server.updateEntity(this, packet); server.updateEntity(this, packet);
} }
private static final Class<?> velocityPacket = ClientboundSetEntityMotionPacket.class;
private static final Reflection.Field<Integer> velocityEntity = Reflection.getField(velocityPacket, int.class, 0);
private static final Reflection.Field<Integer> velocityX = Reflection.getField(velocityPacket, int.class, 1);
private static final Reflection.Field<Integer> velocityY = Reflection.getField(velocityPacket, int.class, 2);
private static final Reflection.Field<Integer> velocityZ = Reflection.getField(velocityPacket, int.class, 3);
public void setVelocity(double dX, double dY, double dZ) { public void setVelocity(double dX, double dY, double dZ) {
Object packet = Reflection.newInstance(velocityPacket); server.updateEntity(this, new ClientboundSetEntityMotionPacket(entityId, new Vec3(calcVelocity(dX), calcVelocity(dY), calcVelocity(dZ))));
velocityEntity.set(packet, entityId);
velocityX.set(packet, calcVelocity(dX));
velocityY.set(packet, calcVelocity(dY));
velocityZ.set(packet, calcVelocity(dZ));
server.updateEntity(this, packet);
} }
private static final Class<?> statusPacket = ClientboundEntityEventPacket.class; private static final Class<?> statusPacket = ClientboundEntityEventPacket.class;
@@ -199,9 +198,9 @@ public class REntity {
server.updateEntity(this, packet); server.updateEntity(this, packet);
} }
public void setPose(FlatteningWrapper.EntityPose pose) { public void setPose(Pose pose) {
this.pose = pose; this.pose = pose;
server.updateEntity(this, getDataWatcherPacket(sneakingDataWatcher, FlatteningWrapper.impl.getPose(pose))); server.updateEntity(this, getDataWatcherPacket(poseDataWatcher, pose));
} }
public void setOnFire(boolean perma) { public void setOnFire(boolean perma) {
@@ -220,13 +219,13 @@ public class REntity {
public void setBowDrawn(boolean drawn, boolean offHand) { public void setBowDrawn(boolean drawn, boolean offHand) {
bowDrawn = drawn; bowDrawn = drawn;
server.updateEntity(this, getDataWatcherPacket(bowDrawnWatcher, FlatteningWrapper.impl.getPose(FlatteningWrapper.EntityPose.SHOOTING))); server.updateEntity(this, getDataWatcherPacket(poseDataWatcher, Pose.SHOOTING));
} }
public void setDisplayName(String displayName) { public void setDisplayName(String displayName) {
this.displayName = displayName; this.displayName = displayName;
server.updateEntity(this, getDataWatcherPacket( server.updateEntity(this, getDataWatcherPacket(
nameWatcher, FlatteningWrapper.impl.formatDisplayName(displayName), nameWatcher, FlatteningWrapper.formatDisplayName(displayName),
nameVisibleWatcher, displayName != null nameVisibleWatcher, displayName != null
)); ));
} }
@@ -250,10 +249,6 @@ public class REntity {
server.updateEntity(this,getDataWatcherPacket(entityStatusWatcher,getEntityStatus())); server.updateEntity(this,getDataWatcherPacket(entityStatusWatcher,getEntityStatus()));
} }
public boolean isGlowing() {
return isGlowing;
}
private static final Function<REntity, Object> spawnPacketGenerator = entitySpawnPacketGenerator(ProtocolWrapper.spawnPacket, 2); private static final Function<REntity, Object> spawnPacketGenerator = entitySpawnPacketGenerator(ProtocolWrapper.spawnPacket, 2);
private static final Reflection.Field<Integer> additionalData = Reflection.getField(ProtocolWrapper.spawnPacket, int.class, 4); private static final Reflection.Field<Integer> additionalData = Reflection.getField(ProtocolWrapper.spawnPacket, int.class, 4);
@@ -268,14 +263,8 @@ public class REntity {
// empty for regular entity // empty for regular entity
} }
private static final Function<REntity, Object> livingSpawnPacketGenerator = REntity::spawnPacketGenerator;
void spawn(Consumer<Object> packetSink) { void spawn(Consumer<Object> packetSink) {
if(entityType.isAlive()) { packetSink.accept(spawnPacketGenerator());
packetSink.accept(livingSpawnPacketGenerator.apply(this));
} else {
packetSink.accept(spawnPacketGenerator());
}
postSpawn(packetSink); postSpawn(packetSink);
} }
@@ -284,8 +273,8 @@ public class REntity {
packetSink.accept(getHeadRotationPacket()); packetSink.accept(getHeadRotationPacket());
} }
if(pose != FlatteningWrapper.EntityPose.NORMAL) { if(pose != Pose.STANDING) {
packetSink.accept(getDataWatcherPacket(sneakingDataWatcher, FlatteningWrapper.impl.getPose(pose))); packetSink.accept(getDataWatcherPacket(poseDataWatcher, pose));
} }
byte status = getEntityStatus(); byte status = getEntityStatus();
@@ -294,7 +283,7 @@ public class REntity {
} }
if(displayName != null) { if(displayName != null) {
packetSink.accept(getDataWatcherPacket(nameWatcher, FlatteningWrapper.impl.formatDisplayName(displayName), nameVisibleWatcher, true)); packetSink.accept(getDataWatcherPacket(nameWatcher, FlatteningWrapper.formatDisplayName(displayName), nameVisibleWatcher, true));
} }
if(noGravity) { if(noGravity) {
@@ -311,12 +300,8 @@ public class REntity {
} }
} }
private static final Class<?> destroyPacket = ClientboundRemoveEntitiesPacket.class;
private static final Reflection.Field<?> destroyEntities = Reflection.getField(destroyPacket, IntList.class, 0);
void despawn(Consumer<Object> packetSink){ void despawn(Consumer<Object> packetSink){
Object packet = Reflection.newInstance(destroyPacket); packetSink.accept(new ClientboundRemoveEntitiesPacket(new IntArrayList(new int[]{entityId})));
destroyEntities.set(packet, new IntArrayList(new int[]{entityId}));
packetSink.accept(packet);
} }
void delist(Consumer<Object> packetSink) { void delist(Consumer<Object> packetSink) {
@@ -336,7 +321,7 @@ public class REntity {
if(fireTick != 0) if(fireTick != 0)
status |= 1; status |= 1;
if(pose == FlatteningWrapper.EntityPose.SNEAKING) if(pose == Pose.CROUCHING)
status |= 2; status |= 2;
if(invisible) if(invisible)
status |= 0x20; status |= 0x20;
@@ -347,39 +332,29 @@ public class REntity {
} }
protected Object getDataWatcherPacket(Object... dataWatcherKeyValues) { protected Object getDataWatcherPacket(Object... dataWatcherKeyValues) {
return ChatWrapper.impl.getDataWatcherPacket(entityId, dataWatcherKeyValues); return ChatWrapper.getDataWatcherPacket(entityId, dataWatcherKeyValues);
} }
public static final Class<?> teleportPacket = ClientboundTeleportEntityPacket.class;
public static final Reflection.Field<Integer> teleportEntity = Reflection.getField(teleportPacket, int.class, 0);
public static final BountifulWrapper.PositionSetter teleportPosition = BountifulWrapper.impl.getPositionSetter(teleportPacket, 0);
private Object getTeleportPacket(){ private Object getTeleportPacket(){
return PacketConstructor.impl.teleportPacket(entityId, x, y, z, pitch, yaw); PositionMoveRotation rot = new PositionMoveRotation(new Vec3(x, y, z), Vec3.ZERO, pitch, yaw);
return new ClientboundTeleportEntityPacket(entityId, rot, Collections.emptySet(), false);
} }
private static final Class<?> entityPacket = ClientboundMoveEntityPacket.class;
private static final Reflection.Field<Integer> moveEntityId = Reflection.getField(entityPacket, int.class, 0);
private static final BountifulWrapper.PositionSetter movePosition = BountifulWrapper.impl.getRelMoveSetter(entityPacket);
private static final Class<?> lookPacket = ClientboundMoveEntityPacket.Rot.class;
private static final Class<?> movePacket = ClientboundMoveEntityPacket.Pos.class;
private static final Class<?> moveLookPacket = ClientboundMoveEntityPacket.PosRot.class;
private Object getMoveLookPacket(double diffX, double diffY, double diffZ, boolean rotEq) { private Object getMoveLookPacket(double diffX, double diffY, double diffZ, boolean rotEq) {
Class<?> clazz; short x = (short)(this.x*4096);
short y = (short)(this.y*4096);
short z = (short)(this.z*4096);
byte yaw = (byte)(this.yaw*256/360);
byte pitch = (byte)(this.pitch*256/360);
if(diffX == 0 && diffY == 0 && diffZ == 0) { if(diffX == 0 && diffY == 0 && diffZ == 0) {
if(rotEq) if(rotEq) return null;
return null; return new ClientboundMoveEntityPacket.Rot(entityId, pitch, yaw, false);
clazz = lookPacket;
} else if (rotEq) { } else if (rotEq) {
clazz = movePacket; return new ClientboundMoveEntityPacket.Pos(entityId, x, y, z, false);
} else { } else {
clazz = moveLookPacket; return new ClientboundMoveEntityPacket.PosRot(entityId, x, y, z, pitch, yaw, false);
} }
Object packet = Reflection.newInstance(clazz);
moveEntityId.set(packet, entityId);
movePosition.set(packet, diffX, diffY, diffZ, pitch, yaw);
return packet;
} }
private static final Class<?> headRotationPacket = ClientboundRotateHeadPacket.class; private static final Class<?> headRotationPacket = ClientboundRotateHeadPacket.class;
@@ -392,17 +367,11 @@ public class REntity {
return packet; return packet;
} }
private static final Reflection.Field<Integer> equipmentEntity = Reflection.getField(ProtocolWrapper.equipmentPacket, int.class, 0); protected Object getEquipmentPacket(Object slot, ItemStack stack) {
private static final Reflection.Field<List> equipmentSlots = Reflection.getField(ProtocolWrapper.equipmentPacket, List.class, 0); return new ClientboundSetEquipmentPacket(entityId, Collections.singletonList(Pair.of((EquipmentSlot) slot, CraftItemStack.asNMSCopy(stack))));
protected Object getEquipmentPacket(Object slot, ItemStack stack){
Object packet = Reflection.newInstance(ProtocolWrapper.equipmentPacket);
equipmentEntity.set(packet, entityId);
equipmentSlots.set(packet, new ArrayList<>());
ProtocolWrapper.impl.setEquipmentPacketStack(packet, slot, CraftItemStack.asNMSCopy(stack));
return packet;
} }
private static final Reflection.Field<net.minecraft.world.entity.EntityType> spawnType = Reflection.getField(ProtocolWrapper.spawnPacket, net.minecraft.world.entity.EntityType.class, 0);
private static Function<REntity, Object> entitySpawnPacketGenerator(Class<?> spawnPacket, int posOffset) { private static Function<REntity, Object> entitySpawnPacketGenerator(Class<?> spawnPacket, int posOffset) {
BountifulWrapper.UUIDSetter uuid = BountifulWrapper.impl.getUUIDSetter(spawnPacket); BountifulWrapper.UUIDSetter uuid = BountifulWrapper.impl.getUUIDSetter(spawnPacket);
Function<REntity, Object> packetGenerator = spawnPacketGenerator(spawnPacket, posOffset); Function<REntity, Object> packetGenerator = spawnPacketGenerator(spawnPacket, posOffset);
@@ -410,7 +379,8 @@ public class REntity {
return entity -> { return entity -> {
Object packet = packetGenerator.apply(entity); Object packet = packetGenerator.apply(entity);
uuid.set(packet, entity.uuid); uuid.set(packet, entity.uuid);
FlatteningWrapper.impl.setSpawnPacketType(packet, entity.entityType); ResourceLocation key = CraftNamespacedKey.toMinecraft(entity.entityType.getKey());
spawnType.set(packet, BuiltInRegistries.ENTITY_TYPE.get(key).get().value());
return packet; return packet;
}; };
} }
@@ -20,9 +20,7 @@
package de.steamwar.entity; package de.steamwar.entity;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.Reflection;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.core.FlatteningWrapper;
import net.minecraft.network.protocol.game.ServerboundInteractPacket; import net.minecraft.network.protocol.game.ServerboundInteractPacket;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@@ -39,7 +37,6 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -48,17 +45,6 @@ public class REntityServer implements Listener {
private static final HashSet<REntity> emptyEntities = new HashSet<>(0); private static final HashSet<REntity> emptyEntities = new HashSet<>(0);
private static final HashSet<Player> emptyPlayers = new HashSet<>(0); private static final HashSet<Player> emptyPlayers = new HashSet<>(0);
private static final Class<?> useEntity = ServerboundInteractPacket.class;
private static final Reflection.Field<Integer> useEntityTarget = Reflection.getField(useEntity, int.class, 0);
private static final Class<?> useEntityEnumAction = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundInteractPacket$Action");
private static final Reflection.Field<?> useEntityAction = Reflection.getField(useEntity, useEntityEnumAction, 0);
private static final Function<Object, Integer> getEntityAction;
static {
Class<?> useEntityEnumActionType = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundInteractPacket$ActionType");
Reflection.Method useEntityGetAction = Reflection.getTypedMethod(useEntityEnumAction, null, useEntityEnumActionType);
getEntityAction = value -> ((Enum<?>) useEntityGetAction.invoke(value)).ordinal();
}
private final ConcurrentHashMap<Integer, REntity> entityMap = new ConcurrentHashMap<>(); private final ConcurrentHashMap<Integer, REntity> entityMap = new ConcurrentHashMap<>();
private final HashMap<Long, HashSet<REntity>> entities = new HashMap<>(); private final HashMap<Long, HashSet<REntity>> entities = new HashMap<>();
private final HashMap<Long, Set<Player>> players = new HashMap<>(); private final HashMap<Long, Set<Player>> players = new HashMap<>();
@@ -68,8 +54,8 @@ public class REntityServer implements Listener {
private EntityActionListener callback = null; private EntityActionListener callback = null;
private final Set<Player> playersThatClicked = Collections.synchronizedSet(new HashSet<>()); private final Set<Player> playersThatClicked = Collections.synchronizedSet(new HashSet<>());
private final BiFunction<Player, Object, Object> filter = (player, packet) -> { private final BiFunction<Player, ServerboundInteractPacket, Object> filter = (player, packet) -> {
REntity entity = entityMap.get(useEntityTarget.get(packet)); REntity entity = entityMap.get(packet.getEntityId());
if (entity == null) if (entity == null)
return packet; return packet;
@@ -77,7 +63,7 @@ public class REntityServer implements Listener {
return null; return null;
playersThatClicked.add(player); playersThatClicked.add(player);
EntityAction action = getEntityAction.apply(useEntityAction.get(packet)) == 1 ? EntityAction.ATTACK : EntityAction.INTERACT; EntityAction action = packet.isAttack() ? EntityAction.ATTACK : EntityAction.INTERACT;
Bukkit.getScheduler().runTask(Core.getInstance(), () -> { Bukkit.getScheduler().runTask(Core.getInstance(), () -> {
playersThatClicked.remove(player); playersThatClicked.remove(player);
callback.onAction(player, entity, action); callback.onAction(player, entity, action);
@@ -94,7 +80,7 @@ public class REntityServer implements Listener {
this.callback = callback; this.callback = callback;
if(uninitialized) if(uninitialized)
TinyProtocol.instance.addFilter(useEntity, filter); TinyProtocol.instance.addTypedFilter(ServerboundInteractPacket.class, filter);
} }
public void addPlayer(Player player) { public void addPlayer(Player player) {
@@ -117,7 +103,7 @@ public class REntityServer implements Listener {
} }
public void close() { public void close() {
TinyProtocol.instance.removeFilter(useEntity, filter); TinyProtocol.instance.removeFilter(ServerboundInteractPacket.class, filter);
for(Player player : lastLocation.keySet().toArray(new Player[0])) { for(Player player : lastLocation.keySet().toArray(new Player[0])) {
removePlayer(player); removePlayer(player);
} }
@@ -300,7 +286,7 @@ public class REntityServer implements Listener {
} }
private int viewRadius(Player player) { private int viewRadius(Player player) {
return FlatteningWrapper.impl.getViewDistance(player) / 2; return player.getClientViewDistance() / 2;
} }
private long entityToId(REntity entity) { private long entityToId(REntity entity) {
@@ -19,9 +19,9 @@
package de.steamwar.entity; package de.steamwar.entity;
import de.steamwar.core.BountifulWrapper;
import de.steamwar.core.ProtocolWrapper;
import lombok.Getter; import lombok.Getter;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.craftbukkit.inventory.CraftItemStack;
@@ -61,14 +61,14 @@ public class RItemDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getItemStack); sendPacket(updatePacketSink, this::getItemStack);
} }
private static final Object itemStackWatcher = BountifulWrapper.impl.getDataWatcherObject(23, ProtocolWrapper.itemStack); private static final EntityDataAccessor<net.minecraft.world.item.ItemStack> itemStackWatcher = new EntityDataAccessor<>(23, EntityDataSerializers.ITEM_STACK);
private void getItemStack(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getItemStack(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || !itemStack.equals(DEFAULT_ITEM_STACK)) { if (ignoreDefault || !itemStack.equals(DEFAULT_ITEM_STACK)) {
packetSink.accept(itemStackWatcher, CraftItemStack.asNMSCopy(itemStack)); packetSink.accept(itemStackWatcher, CraftItemStack.asNMSCopy(itemStack));
} }
} }
private static final Object itemDisplayTransformWatcher = BountifulWrapper.impl.getDataWatcherObject(24, Byte.class); private static final EntityDataAccessor<Byte> itemDisplayTransformWatcher = new EntityDataAccessor<>(24, EntityDataSerializers.BYTE);
public void setItemDisplayTransform(ItemDisplay.ItemDisplayTransform itemDisplayTransform) { public void setItemDisplayTransform(ItemDisplay.ItemDisplayTransform itemDisplayTransform) {
this.itemDisplayTransform = itemDisplayTransform; this.itemDisplayTransform = itemDisplayTransform;
sendPacket(updatePacketSink, this::getItemDisplayTransform); sendPacket(updatePacketSink, this::getItemDisplayTransform);
@@ -28,6 +28,8 @@ import de.steamwar.network.CoreNetworkHandler;
import de.steamwar.network.NetworkSender; import de.steamwar.network.NetworkSender;
import de.steamwar.network.packets.common.PlayerSkinRequestPacket; import de.steamwar.network.packets.common.PlayerSkinRequestPacket;
import lombok.Getter; import lombok.Getter;
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
import net.minecraft.world.phys.Vec3;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@@ -95,6 +97,18 @@ public class RPlayer extends REntity {
} }
private Object getNamedSpawnPacket() { private Object getNamedSpawnPacket() {
return PacketConstructor.impl.createRPlayerSpawn(this); return new ClientboundAddEntityPacket(
entityId,
uuid,
x,
y,
z,
yaw,
pitch,
net.minecraft.world.entity.EntityType.PLAYER,
0,
Vec3.ZERO,
headYaw
);
} }
} }
@@ -19,10 +19,11 @@
package de.steamwar.entity; package de.steamwar.entity;
import de.steamwar.core.BountifulWrapper;
import de.steamwar.core.ChatWrapper; import de.steamwar.core.ChatWrapper;
import lombok.Getter; import lombok.Getter;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.TextDisplay; import org.bukkit.entity.TextDisplay;
@@ -73,11 +74,10 @@ public class RTextDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getText); sendPacket(updatePacketSink, this::getText);
} }
private static final Class<?> iChatBaseComponent = Component.class; private static final EntityDataAccessor<Component> textWatcher = new EntityDataAccessor<>(23, EntityDataSerializers.COMPONENT);
private static final Object textWatcher = BountifulWrapper.impl.getDataWatcherObject(23, iChatBaseComponent);
private void getText(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getText(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || !text.isEmpty()) { if (ignoreDefault || !text.isEmpty()) {
packetSink.accept(textWatcher, ChatWrapper.impl.stringToChatComponent(text)); packetSink.accept(textWatcher, ChatWrapper.stringToChatComponent(text));
} }
} }
@@ -86,7 +86,7 @@ public class RTextDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getLineWidth); sendPacket(updatePacketSink, this::getLineWidth);
} }
private static final Object lineWidthWatcher = BountifulWrapper.impl.getDataWatcherObject(24, Integer.class); private static final EntityDataAccessor<Integer> lineWidthWatcher = new EntityDataAccessor<>(24, EntityDataSerializers.INT);
private void getLineWidth(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getLineWidth(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || lineWidth != 200) { if (ignoreDefault || lineWidth != 200) {
packetSink.accept(lineWidthWatcher, lineWidth); packetSink.accept(lineWidthWatcher, lineWidth);
@@ -98,7 +98,7 @@ public class RTextDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getTextOpacity); sendPacket(updatePacketSink, this::getTextOpacity);
} }
private static final Object textOpacityWatcher = BountifulWrapper.impl.getDataWatcherObject(26, Byte.class); private static final EntityDataAccessor<Byte> textOpacityWatcher = new EntityDataAccessor<>(26, EntityDataSerializers.BYTE);
private void getTextOpacity(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getTextOpacity(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || textOpacity != (byte) -1) { if (ignoreDefault || textOpacity != (byte) -1) {
packetSink.accept(textOpacityWatcher, textOpacity); packetSink.accept(textOpacityWatcher, textOpacity);
@@ -120,7 +120,7 @@ public class RTextDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getTextStatus, this::getBackgroundColor); sendPacket(updatePacketSink, this::getTextStatus, this::getBackgroundColor);
} }
private static final Object backgroundColorWatcher = BountifulWrapper.impl.getDataWatcherObject(25, Integer.class); private static final EntityDataAccessor<Integer> backgroundColorWatcher = new EntityDataAccessor<>(25, EntityDataSerializers.INT);
private void getBackgroundColor(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getBackgroundColor(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
if (ignoreDefault || backgroundColor != null) { if (ignoreDefault || backgroundColor != null) {
packetSink.accept(backgroundColorWatcher, backgroundColor); packetSink.accept(backgroundColorWatcher, backgroundColor);
@@ -139,7 +139,7 @@ public class RTextDisplay extends RDisplay {
sendPacket(updatePacketSink, this::getTextStatus); sendPacket(updatePacketSink, this::getTextStatus);
} }
private static final Object textStatusWatcher = BountifulWrapper.impl.getDataWatcherObject(27, Byte.class); private static final EntityDataAccessor<Byte> textStatusWatcher = new EntityDataAccessor<>(27, EntityDataSerializers.BYTE);
private void getTextStatus(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) { private void getTextStatus(boolean ignoreDefault, BiConsumer<Object, Object> packetSink) {
byte status = 0; byte status = 0;
@@ -19,15 +19,17 @@
package de.steamwar.inventory; package de.steamwar.inventory;
import com.destroystokyo.paper.profile.PlayerProfile;
import com.google.gson.JsonArray; import com.google.gson.JsonArray;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import de.steamwar.core.FlatteningWrapper;
import de.steamwar.core.TrickyTrialsWrapper; import de.steamwar.core.TrickyTrialsWrapper;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.OfflinePlayer; import org.bukkit.OfflinePlayer;
import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -47,27 +49,29 @@ public class SWItem {
public static SWItem getPlayerSkull(String playerName){ public static SWItem getPlayerSkull(String playerName){
SWItem p = new SWItem(); SWItem p = new SWItem();
ItemStack head = FlatteningWrapper.impl.setSkullOwner(playerName); ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1);
head.editMeta(SkullMeta.class, skullMeta -> {
try {
OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerName.startsWith(".") ? playerName.substring(1) : playerName);
PlayerProfile playerProfile = offlinePlayer.getPlayerProfile();
playerProfile.complete();
skullMeta.setPlayerProfile(playerProfile);
} catch (Exception e) {
// Ignore
}
});
p.setItemStack(head); p.setItemStack(head);
return p; return p;
} }
public static Material getMaterial(String material){ public static Material getMaterial(String material){
try{ try{
Material m = FlatteningWrapper.impl.getMaterial(material); return Material.valueOf(material);
if(m == null)
return Material.BARRIER;
return m;
}catch(IllegalArgumentException e){ }catch(IllegalArgumentException e){
return Material.STONE; return Material.BARRIER;
} }
} }
public static Material getDye(int colorCode){
return FlatteningWrapper.impl.getDye(colorCode);
}
public SWItem() { public SWItem() {
itemStack = new ItemStack(Material.AIR); itemStack = new ItemStack(Material.AIR);
itemMeta = itemStack.getItemMeta(); itemMeta = itemStack.getItemMeta();
@@ -119,13 +123,7 @@ public class SWItem {
public static SWItem getItemFromJson(JsonObject itemJson) { public static SWItem getItemFromJson(JsonObject itemJson) {
SWItem item = null; SWItem item = null;
try { try {
if(itemJson.has("color")) { item = new SWItem(SWItem.getMaterial(itemJson.get("material").getAsString()), itemJson.get("title").getAsString());
item = new SWItem(SWItem.getDye(itemJson.get("color").getAsInt()),
itemJson.has("color")?itemJson.get("color").getAsByte():0,
itemJson.get("title").getAsString());
}else {
item = new SWItem(SWItem.getMaterial(itemJson.get("material").getAsString()), itemJson.get("title").getAsString());
}
}catch (IllegalArgumentException e) { }catch (IllegalArgumentException e) {
item = new SWItem(Material.STONE, itemJson.get("title").getAsString()); item = new SWItem(Material.STONE, itemJson.get("title").getAsString());
} }
@@ -64,27 +64,27 @@ public class SWListInv<T> extends SWInventory {
if (sizeBiggerMax()) { if (sizeBiggerMax()) {
if (page != 0) { if (page != 0) {
setItem(45, new SWItem(SWItem.getDye(10), (byte) 10, Core.MESSAGE.parse("SWLISINV_PREVIOUS_PAGE_ACTIVE", player), (ClickType click) -> { setItem(45, new SWItem(Material.LIME_DYE, (byte) 10, Core.MESSAGE.parse("SWLISINV_PREVIOUS_PAGE_ACTIVE", player), (ClickType click) -> {
page--; page--;
open(); open();
}).setCustomModelData(CMDs.PREVIOUS_PAGE)); }).setCustomModelData(CMDs.PREVIOUS_PAGE));
} else { } else {
setItem(45, new SWItem(SWItem.getDye(8), (byte) 8, Core.MESSAGE.parse("SWLISINV_PREVIOUS_PAGE_INACTIVE", player), (ClickType click) -> { setItem(45, new SWItem(Material.GRAY_DYE, (byte) 8, Core.MESSAGE.parse("SWLISINV_PREVIOUS_PAGE_INACTIVE", player), (ClickType click) -> {
}).setCustomModelData(CMDs.PREVIOUS_PAGE)); }).setCustomModelData(CMDs.PREVIOUS_PAGE));
} }
if (page < elements.size() / 45 - (elements.size() % 45 == 0 ? 1 : 0)) { if (page < elements.size() / 45 - (elements.size() % 45 == 0 ? 1 : 0)) {
setItem(53, new SWItem(SWItem.getDye(10), (byte) 10, Core.MESSAGE.parse("SWLISINV_NEXT_PAGE_ACTIVE", player), (ClickType click) -> { setItem(53, new SWItem(Material.LIME_DYE, (byte) 10, Core.MESSAGE.parse("SWLISINV_NEXT_PAGE_ACTIVE", player), (ClickType click) -> {
page++; page++;
open(); open();
}).setCustomModelData(CMDs.NEXT_PAGE)); }).setCustomModelData(CMDs.NEXT_PAGE));
} else { } else {
setItem(53, new SWItem(SWItem.getDye(8), (byte) 8, Core.MESSAGE.parse("SWLISINV_NEXT_PAGE_INACTIVE", player), (ClickType click) -> { setItem(53, new SWItem(Material.GRAY_DYE, (byte) 8, Core.MESSAGE.parse("SWLISINV_NEXT_PAGE_INACTIVE", player), (ClickType click) -> {
}).setCustomModelData(CMDs.NEXT_PAGE)); }).setCustomModelData(CMDs.NEXT_PAGE));
} }
} else if (!dynamicSize) { } else if (!dynamicSize) {
setItem(45, new SWItem(SWItem.getDye(8), (byte) 8, Core.MESSAGE.parse("SWLISINV_PREVIOUS_PAGE_INACTIVE", player), (ClickType click) -> { setItem(45, new SWItem(Material.GRAY_DYE, (byte) 8, Core.MESSAGE.parse("SWLISINV_PREVIOUS_PAGE_INACTIVE", player), (ClickType click) -> {
}).setCustomModelData(CMDs.PREVIOUS_PAGE)); }).setCustomModelData(CMDs.PREVIOUS_PAGE));
setItem(53, new SWItem(SWItem.getDye(8), (byte) 8, Core.MESSAGE.parse("SWLISINV_NEXT_PAGE_INACTIVE", player), (ClickType click) -> { setItem(53, new SWItem(Material.GRAY_DYE, (byte) 8, Core.MESSAGE.parse("SWLISINV_NEXT_PAGE_INACTIVE", player), (ClickType click) -> {
}).setCustomModelData(CMDs.NEXT_PAGE)); }).setCustomModelData(CMDs.NEXT_PAGE));
} }
@@ -142,7 +142,7 @@ public class SWListInv<T> extends SWInventory {
for(SchematicNode s : schems){ for(SchematicNode s : schems){
Material m; Material m;
if(s.getItem().isEmpty()) if(s.getItem().isEmpty())
m = SWItem.getMaterial("CAULDRON_ITEM"); m = Material.CAULDRON;
else else
m = SWItem.getMaterial(s.getItem()); m = SWItem.getMaterial(s.getItem());
SWItem item = new SWItem(m,"§e" + s.getName()); SWItem item = new SWItem(m,"§e" + s.getName());
@@ -137,7 +137,7 @@ public class SchematicSelector {
} }
} }
if(target.target.dirs) { if(target.target.dirs) {
inv.setItem(49, SWItem.getDye(10), Core.MESSAGE.parse("SCHEM_SELECTOR_SEL_DIR", player), clickType -> { inv.setItem(49, Material.LIME_DYE, Core.MESSAGE.parse("SCHEM_SELECTOR_SEL_DIR", player), clickType -> {
player.closeInventory(); player.closeInventory();
callback.accept(parent); callback.accept(parent);
}); });
@@ -312,7 +312,7 @@ public class SchematicSelector {
openFilter(); openFilter();
} else { } else {
SWAnvilInv swAnvilInv = new SWAnvilInv(player, Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_ENTER_OWNER", player)); SWAnvilInv swAnvilInv = new SWAnvilInv(player, Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_ENTER_OWNER", player));
swAnvilInv.setItem(SWItem.getMaterial("SKULL_ITEM"), (byte) 3, Collections.singletonList(Core.MESSAGE.parse("SCHEM_SELECTOR_CLICK_BACK", player)), false); swAnvilInv.setItem(Material.SKELETON_SKULL, (byte) 3, Collections.singletonList(Core.MESSAGE.parse("SCHEM_SELECTOR_CLICK_BACK", player)), false);
swAnvilInv.setCallback(s -> { swAnvilInv.setCallback(s -> {
if(SteamwarUser.get(s) != null) { if(SteamwarUser.get(s) != null) {
filter = filter.withOwner(SteamwarUser.get(s).getId()); filter = filter.withOwner(SteamwarUser.get(s).getId());
@@ -324,7 +324,7 @@ public class SchematicSelector {
} }
}; };
if(filter.getOwner() == null) { if(filter.getOwner() == null) {
inv.setItem(1, SWItem.getMaterial("SKULL_ITEM"), (byte) 3, Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_OWNER", player), ownerCallback); inv.setItem(1, Material.SKELETON_SKULL, (byte) 3, Core.MESSAGE.parse("SCHEM_SELECTOR_FILTER_OWNER", player), ownerCallback);
} else { } else {
SteamwarUser tUser = SteamwarUser.byId(filter.getOwner()); SteamwarUser tUser = SteamwarUser.byId(filter.getOwner());
SWItem item = SWItem.getPlayerSkull(tUser.getUserName()); SWItem item = SWItem.getPlayerSkull(tUser.getUserName());
@@ -408,12 +408,12 @@ public class SchematicSelector {
} }
} }
inv.setItem(7, SWItem.getDye(1), Core.MESSAGE.parse("SCHEM_SELECTOR_CANCEL", player), clickType -> { inv.setItem(7, Material.RED_DYE, Core.MESSAGE.parse("SCHEM_SELECTOR_CANCEL", player), clickType -> {
filter = null; filter = null;
depth = 0; depth = 0;
openList(null); openList(null);
}); });
inv.setItem(8, SWItem.getDye(10), Core.MESSAGE.parse("SCHEM_SELECTOR_GO", player), clickType -> { inv.setItem(8, Material.LIME_DYE, Core.MESSAGE.parse("SCHEM_SELECTOR_GO", player), clickType -> {
if (!filter.equals(filters[0])) { if (!filter.equals(filters[0])) {
for (int i = filters.length - 1; i > 0; i--) { for (int i = filters.length - 1; i > 0; i--) {
filters[i] = filters[i-1]; filters[i] = filters[i-1];
@@ -646,7 +646,7 @@ public class SchematicSelector {
return o1.getSchemtype().name().compareTo(o2.getSchemtype().name()); return o1.getSchemtype().name().compareTo(o2.getSchemtype().name());
} }
}), }),
LAST_UPDATED(SWItem.getMaterial("WATCH"), "SCHEM_SELECTOR_SORTING_UPDATE", Comparator.comparing(SchematicNode::getLastUpdate)); LAST_UPDATED(Material.CLOCK, "SCHEM_SELECTOR_SORTING_UPDATE", Comparator.comparing(SchematicNode::getLastUpdate));
private final Material mat; private final Material mat;
private final String name; private final String name;
@@ -24,7 +24,6 @@ import de.steamwar.command.TypeValidator
import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.colorByTeam
import de.steamwar.tntleague.config.TNTLeagueConfig import de.steamwar.tntleague.config.TNTLeagueConfig
import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueGame
import de.steamwar.tntleague.message
import net.md_5.bungee.api.chat.ClickEvent import net.md_5.bungee.api.chat.ClickEvent
import org.bukkit.entity.Player import org.bukkit.entity.Player
@@ -20,14 +20,11 @@
package de.steamwar.tntleague.config package de.steamwar.tntleague.config
import de.steamwar.tntleague.plugin import de.steamwar.tntleague.plugin
import de.steamwar.kotlin.util.Area
import net.kyori.adventure.text.Component
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.configuration.ConfigurationSection import org.bukkit.configuration.ConfigurationSection
import org.bukkit.configuration.file.YamlConfiguration import org.bukkit.configuration.file.YamlConfiguration
import org.bukkit.entity.WanderingTrader
import java.io.File import java.io.File
import kotlin.math.abs import kotlin.math.abs
import kotlin.properties.Delegates import kotlin.properties.Delegates
@@ -19,7 +19,6 @@
package de.steamwar.tntleague.events package de.steamwar.tntleague.events
import de.steamwar.message.SubMessage
import de.steamwar.tntleague.config.TNTLeagueWorldConfig import de.steamwar.tntleague.config.TNTLeagueWorldConfig
import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueGame
import de.steamwar.tntleague.game.TNTLeagueTeam import de.steamwar.tntleague.game.TNTLeagueTeam
@@ -35,7 +35,6 @@ import org.bukkit.event.player.PlayerAttemptPickupItemEvent
import org.bukkit.event.player.PlayerInteractEntityEvent import org.bukkit.event.player.PlayerInteractEntityEvent
import org.bukkit.event.player.PlayerJoinEvent import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.event.player.PlayerMoveEvent import org.bukkit.event.player.PlayerMoveEvent
import org.bukkit.event.player.*
import org.bukkit.persistence.PersistentDataType import org.bukkit.persistence.PersistentDataType
object IngameListener : Listener { object IngameListener : Listener {
@@ -26,7 +26,10 @@ import org.bukkit.event.EventHandler
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.event.entity.EntityDamageEvent import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.player.* import org.bukkit.event.player.PlayerDropItemEvent
import org.bukkit.event.player.PlayerInteractEntityEvent
import org.bukkit.event.player.PlayerInteractEvent
import org.bukkit.event.player.PlayerJoinEvent
object LobbyListener: Listener { object LobbyListener: Listener {
@@ -20,7 +20,6 @@
package de.steamwar.tntleague.game package de.steamwar.tntleague.game
import de.steamwar.kotlin.util.Area import de.steamwar.kotlin.util.Area
import de.steamwar.message.SubMessage
import de.steamwar.network.NetworkSender import de.steamwar.network.NetworkSender
import de.steamwar.network.packets.common.FightInfoPacket import de.steamwar.network.packets.common.FightInfoPacket
import de.steamwar.scoreboard.SWScoreboard import de.steamwar.scoreboard.SWScoreboard
@@ -48,7 +47,6 @@ import org.bukkit.inventory.ItemStack
import org.bukkit.scheduler.BukkitTask import org.bukkit.scheduler.BukkitTask
import java.sql.Timestamp import java.sql.Timestamp
import java.time.Instant import java.time.Instant
import kotlin.random.Random
object TNTLeagueGame { object TNTLeagueGame {
var state: GameState = GameState.LOBBY var state: GameState = GameState.LOBBY
@@ -25,10 +25,7 @@ import de.steamwar.tntleague.config.TNTLeagueConfig
import de.steamwar.tntleague.inventory.DealerInventory.Companion.buyItem import de.steamwar.tntleague.inventory.DealerInventory.Companion.buyItem
import de.steamwar.tntleague.inventory.DealerInventory.Companion.itemsByCategory import de.steamwar.tntleague.inventory.DealerInventory.Companion.itemsByCategory
import de.steamwar.tntleague.message import de.steamwar.tntleague.message
import net.kyori.adventure.text.Component
import org.bukkit.Bukkit
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.inventory.Inventory
class CategoryInventory(player: Player, category: TNTLeagueConfig.ItemCategory): KotlinInventory(player) { class CategoryInventory(player: Player, category: TNTLeagueConfig.ItemCategory): KotlinInventory(player) {
override fun createInventory() = SWInventory(player, 9 * 6, message.parse("DEALER", player)) override fun createInventory() = SWInventory(player, 9 * 6, message.parse("DEALER", player))
@@ -34,7 +34,6 @@ import org.bukkit.NamespacedKey
import org.bukkit.Sound import org.bukkit.Sound
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.inventory.Inventory
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataType import org.bukkit.persistence.PersistentDataType
import java.util.* import java.util.*
@@ -25,7 +25,6 @@ import de.steamwar.tntleague.game.TNTLeagueGame
import de.steamwar.tntleague.game.TNTLeagueTeam import de.steamwar.tntleague.game.TNTLeagueTeam
import de.steamwar.tntleague.message import de.steamwar.tntleague.message
import org.bukkit.entity.Player import org.bukkit.entity.Player
import kotlin.collections.HashMap
data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback { data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback {
override fun getData(): HashMap<String, Int> { override fun getData(): HashMap<String, Int> {
@@ -19,18 +19,14 @@
package de.steamwar.teamserver.listener; package de.steamwar.teamserver.listener;
import de.steamwar.core.Core;
import de.steamwar.core.TrickyTrialsWrapper; import de.steamwar.core.TrickyTrialsWrapper;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.teamserver.Builder; import de.steamwar.teamserver.Builder;
import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.block.data.type.Switch; import org.bukkit.block.data.type.Switch;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@@ -27,13 +27,15 @@ import de.steamwar.towerrun.game.TowerRunPlayer;
import de.steamwar.towerrun.state.GameState; import de.steamwar.towerrun.state.GameState;
import de.steamwar.towerrun.state.GameStateBukkitListener; import de.steamwar.towerrun.state.GameStateBukkitListener;
import de.steamwar.towerrun.state.GameStates; import de.steamwar.towerrun.state.GameStates;
import lombok.val;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.*; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import java.util.EnumSet; import java.util.EnumSet;
@@ -39,7 +39,6 @@ import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap;
@Linked @Linked
public class LobbyListener extends GameStateBukkitListener { public class LobbyListener extends GameStateBukkitListener {
@@ -24,7 +24,7 @@ import de.steamwar.towerrun.state.GameStates;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import java.util.*; import java.util.EnumSet;
@Getter @Getter
public abstract class WinCondition extends GameStateBukkitListener { public abstract class WinCondition extends GameStateBukkitListener {
@@ -21,12 +21,12 @@ package de.steamwar.command;
import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.network.ProtocolVersion;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import de.steamwar.velocitycore.ServerVersion;
import de.steamwar.velocitycore.VelocityCore;
import de.steamwar.velocitycore.commands.TypeMappers;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.Team; import de.steamwar.sql.Team;
import de.steamwar.velocitycore.ServerVersion;
import de.steamwar.velocitycore.VelocityCore;
import de.steamwar.velocitycore.commands.TypeMappers;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import java.util.Collection; import java.util.Collection;
@@ -19,8 +19,8 @@
package de.steamwar.sql; package de.steamwar.sql;
import de.steamwar.velocitycore.VelocityCore;
import de.steamwar.sql.internal.SQLConfig; import de.steamwar.sql.internal.SQLConfig;
import de.steamwar.velocitycore.VelocityCore;
import java.util.logging.Logger; import java.util.logging.Logger;
@@ -22,7 +22,6 @@ package de.steamwar.velocitycore;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.velocity.platform.VelocityViaConfig; import com.viaversion.viaversion.velocity.platform.VelocityViaConfig;
import de.steamwar.sql.GameModeConfig;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
import de.steamwar.persistent.Arenaserver; import de.steamwar.persistent.Arenaserver;
import de.steamwar.persistent.Bauserver; import de.steamwar.persistent.Bauserver;
@@ -21,7 +21,6 @@ package de.steamwar.velocitycore;
import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.network.ProtocolVersion;
import de.steamwar.sql.GameModeConfig; import de.steamwar.sql.GameModeConfig;
import de.steamwar.sql.SchematicType;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -20,14 +20,14 @@
package de.steamwar.velocitycore; package de.steamwar.velocitycore;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import de.steamwar.velocitycore.network.NetworkSender;
import de.steamwar.velocitycore.network.handlers.FightInfoHandler;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
import de.steamwar.messages.Message; import de.steamwar.messages.Message;
import de.steamwar.network.packets.server.StartingServerPacket; import de.steamwar.network.packets.server.StartingServerPacket;
import de.steamwar.persistent.Subserver; import de.steamwar.persistent.Subserver;
import de.steamwar.sql.IgnoreSystem; import de.steamwar.sql.IgnoreSystem;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import de.steamwar.velocitycore.network.NetworkSender;
import de.steamwar.velocitycore.network.handlers.FightInfoHandler;
import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.ClickEvent;
import java.util.UUID; import java.util.UUID;
@@ -19,11 +19,11 @@
package de.steamwar.velocitycore.commands; package de.steamwar.velocitycore.commands;
import de.steamwar.linkage.Linked;
import de.steamwar.velocitycore.discord.DiscordBot;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
import de.steamwar.sql.UserPerm; import de.steamwar.sql.UserPerm;
import de.steamwar.velocitycore.discord.DiscordBot;
@Linked @Linked
public class AlertCommand extends SWCommand { public class AlertCommand extends SWCommand {
@@ -23,7 +23,7 @@ import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper; import de.steamwar.command.TypeMapper;
import de.steamwar.command.TypeValidator; import de.steamwar.command.TypeValidator;
import de.steamwar.sql.GameModeConfig; import de.steamwar.data.BauLockState;
import de.steamwar.linkage.EventMode; import de.steamwar.linkage.EventMode;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance; import de.steamwar.linkage.LinkedInstance;
@@ -33,13 +33,16 @@ import de.steamwar.messages.PlayerChatter;
import de.steamwar.network.packets.server.BaumemberUpdatePacket; import de.steamwar.network.packets.server.BaumemberUpdatePacket;
import de.steamwar.persistent.Bauserver; import de.steamwar.persistent.Bauserver;
import de.steamwar.sql.BauweltMember; import de.steamwar.sql.BauweltMember;
import de.steamwar.sql.GameModeConfig;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import de.steamwar.velocitycore.*; import de.steamwar.velocitycore.ServerStarter;
import de.steamwar.velocitycore.ServerVersion;
import de.steamwar.velocitycore.SubserverSystem;
import de.steamwar.velocitycore.VelocityCore;
import de.steamwar.velocitycore.inventory.SWInventory; import de.steamwar.velocitycore.inventory.SWInventory;
import de.steamwar.velocitycore.inventory.SWItem; import de.steamwar.velocitycore.inventory.SWItem;
import de.steamwar.velocitycore.network.NetworkSender; import de.steamwar.velocitycore.network.NetworkSender;
import de.steamwar.velocitycore.util.BauLock; import de.steamwar.velocitycore.util.BauLock;
import de.steamwar.data.BauLockState;
import java.util.Collection; import java.util.Collection;
import java.util.function.Consumer; import java.util.function.Consumer;
@@ -219,7 +222,7 @@ public class BauCommand extends SWCommand {
@Register("delete") @Register("delete")
public void delete(PlayerChatter sender, ServerVersion version) { public void delete(PlayerChatter sender, ServerVersion version) {
SWInventory inventory = new SWInventory(sender, 9, new Message("BAU_DELETE_GUI_NAME")); SWInventory inventory = new SWInventory(sender, 9, new Message("BAU_DELETE_GUI_NAME"));
inventory.addItem(0, new SWItem(new Message("BAU_DELETE_GUI_DELETE"), 10), click -> { inventory.addItem(0, new SWItem("LIME_DYE", new Message("BAU_DELETE_GUI_DELETE")), click -> {
String world = version.getWorldFolder(ServerStarter.WORLDS_BASE_PATH) + sender.user().getId(); String world = version.getWorldFolder(ServerStarter.WORLDS_BASE_PATH) + sender.user().getId();
VelocityCore.schedule(() -> { VelocityCore.schedule(() -> {
@@ -233,7 +236,7 @@ public class BauCommand extends SWCommand {
inventory.close(); inventory.close();
}); });
inventory.addItem(8, new SWItem(new Message("BAU_DELETE_GUI_CANCEL"), 1), click -> inventory.close()); inventory.addItem(8, new SWItem("RED_DYE", new Message("BAU_DELETE_GUI_CANCEL")), click -> inventory.close());
inventory.open(); inventory.open();
} }
@@ -19,19 +19,18 @@
package de.steamwar.velocitycore.commands; package de.steamwar.velocitycore.commands;
import de.steamwar.sql.GameModeConfig; import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.sql.SchematicType; import de.steamwar.messages.Chatter;
import de.steamwar.messages.PlayerChatter;
import de.steamwar.sql.GameModeConfig;
import de.steamwar.sql.UserPerm;
import de.steamwar.velocitycore.ArenaMode; import de.steamwar.velocitycore.ArenaMode;
import de.steamwar.velocitycore.ServerStarter; import de.steamwar.velocitycore.ServerStarter;
import de.steamwar.velocitycore.ServerVersion; import de.steamwar.velocitycore.ServerVersion;
import de.steamwar.velocitycore.VelocityCore; import de.steamwar.velocitycore.VelocityCore;
import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.messages.Chatter;
import de.steamwar.messages.PlayerChatter;
import de.steamwar.sql.UserPerm;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -22,15 +22,14 @@ package de.steamwar.velocitycore.commands;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator; import de.steamwar.command.TypeValidator;
import de.steamwar.sql.GameModeConfig;
import de.steamwar.linkage.EventMode; import de.steamwar.linkage.EventMode;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
import de.steamwar.messages.Message; import de.steamwar.messages.Message;
import de.steamwar.messages.PlayerChatter; import de.steamwar.messages.PlayerChatter;
import de.steamwar.persistent.Subserver; import de.steamwar.persistent.Subserver;
import de.steamwar.sql.GameModeConfig;
import de.steamwar.sql.IgnoreSystem; import de.steamwar.sql.IgnoreSystem;
import de.steamwar.sql.SchematicType;
import de.steamwar.velocitycore.ServerStarter; import de.steamwar.velocitycore.ServerStarter;
import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.ClickEvent;
@@ -21,7 +21,6 @@ package de.steamwar.velocitycore.commands;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.sql.GameModeConfig;
import de.steamwar.linkage.EventMode; import de.steamwar.linkage.EventMode;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
@@ -29,7 +28,7 @@ import de.steamwar.messages.Message;
import de.steamwar.messages.PlayerChatter; import de.steamwar.messages.PlayerChatter;
import de.steamwar.persistent.Arenaserver; import de.steamwar.persistent.Arenaserver;
import de.steamwar.persistent.Subserver; import de.steamwar.persistent.Subserver;
import de.steamwar.sql.SchematicType; import de.steamwar.sql.GameModeConfig;
import de.steamwar.velocitycore.ArenaMode; import de.steamwar.velocitycore.ArenaMode;
import de.steamwar.velocitycore.ServerStarter; import de.steamwar.velocitycore.ServerStarter;
import de.steamwar.velocitycore.inventory.SWInventory; import de.steamwar.velocitycore.inventory.SWInventory;
@@ -100,15 +99,15 @@ public class FightCommand extends SWCommand {
} }
SWInventory inventory = new SWInventory(sender, 9, new Message("FIGHT_MERGE_TITLE")); SWInventory inventory = new SWInventory(sender, 9, new Message("FIGHT_MERGE_TITLE"));
inventory.addItem(0, new SWItem(new Message("FIGHT_MERGE_DECLINE"), 1), click -> { inventory.addItem(0, new SWItem("RED_DYE", new Message("FIGHT_MERGE_DECLINE")), click -> {
inventory.close(); inventory.close();
declineMerge.run(sender, mode, map); declineMerge.run(sender, mode, map);
}); });
Arenaserver finalMergable = mergable; Arenaserver finalMergable = mergable;
SWItem item = new SWItem(new Message("FIGHT_MERGE_INFO", mode.GameName, finalMergable.getMap()), 11); SWItem item = new SWItem("YELLOW_DYE", new Message("FIGHT_MERGE_INFO", mode.GameName, finalMergable.getMap()));
item.addLore(new Message("FIGHT_MERGE_INFO_LORE_1", finalMergable.getRegisteredServer().getPlayersConnected().toArray(new Player[1])[0].getUsername())); item.addLore(new Message("FIGHT_MERGE_INFO_LORE_1", finalMergable.getRegisteredServer().getPlayersConnected().toArray(new Player[1])[0].getUsername()));
inventory.addItem(4, item, click -> {}); inventory.addItem(4, item, click -> {});
inventory.addItem(8, new SWItem(new Message("FIGHT_MERGE_ACCEPT"), 10), click -> { inventory.addItem(8, new SWItem("LIME_DYE", new Message("FIGHT_MERGE_ACCEPT")), click -> {
if(Subserver.getServerList().contains(finalMergable)) { if(Subserver.getServerList().contains(finalMergable)) {
finalMergable.sendPlayer(sender.getPlayer()); finalMergable.sendPlayer(sender.getPlayer());
} else { } else {
@@ -20,13 +20,12 @@
package de.steamwar.velocitycore.commands; package de.steamwar.velocitycore.commands;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.sql.GameModeConfig;
import de.steamwar.linkage.EventMode; import de.steamwar.linkage.EventMode;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
import de.steamwar.messages.Message; import de.steamwar.messages.Message;
import de.steamwar.messages.PlayerChatter; import de.steamwar.messages.PlayerChatter;
import de.steamwar.sql.SchematicType; import de.steamwar.sql.GameModeConfig;
import de.steamwar.velocitycore.ServerStarter; import de.steamwar.velocitycore.ServerStarter;
import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.ClickEvent;
@@ -19,10 +19,10 @@
package de.steamwar.velocitycore.commands; package de.steamwar.velocitycore.commands;
import de.steamwar.linkage.Linked;
import de.steamwar.velocitycore.listeners.ChatListener;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.messages.PlayerChatter; import de.steamwar.messages.PlayerChatter;
import de.steamwar.velocitycore.listeners.ChatListener;
@Linked @Linked
public class LocalCommand extends SWCommand { public class LocalCommand extends SWCommand {
@@ -19,17 +19,17 @@
package de.steamwar.velocitycore.commands; package de.steamwar.velocitycore.commands;
import de.steamwar.linkage.Linked;
import de.steamwar.velocitycore.inventory.SWInventory;
import de.steamwar.velocitycore.inventory.SWItem;
import de.steamwar.velocitycore.inventory.SWListInv;
import de.steamwar.velocitycore.inventory.SWStreamInv;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.messages.Chatter; import de.steamwar.messages.Chatter;
import de.steamwar.messages.Message; import de.steamwar.messages.Message;
import de.steamwar.messages.PlayerChatter; import de.steamwar.messages.PlayerChatter;
import de.steamwar.sql.Mod; import de.steamwar.sql.Mod;
import de.steamwar.sql.UserPerm; import de.steamwar.sql.UserPerm;
import de.steamwar.velocitycore.inventory.SWInventory;
import de.steamwar.velocitycore.inventory.SWItem;
import de.steamwar.velocitycore.inventory.SWListInv;
import de.steamwar.velocitycore.inventory.SWStreamInv;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -72,11 +72,11 @@ public class ModCommand extends SWCommand {
private void openTypeGUI(PlayerChatter player, String title, Consumer<Mod.ModType> function) { private void openTypeGUI(PlayerChatter player, String title, Consumer<Mod.ModType> function) {
SWInventory inv = new SWInventory(player, 9, new Message(title)); SWInventory inv = new SWInventory(player, 9, new Message(title));
inv.addItem(1, new SWItem(new Message("MOD_UNCLASSIFIED"), 8), click -> function.accept(Mod.ModType.UNKLASSIFIED)); inv.addItem(1, new SWItem("GRAY_DYE", new Message("MOD_UNCLASSIFIED")), click -> function.accept(Mod.ModType.UNKLASSIFIED));
inv.addItem(2, new SWItem(new Message("MOD_ALLOWED"), 2), click -> function.accept(Mod.ModType.GREEN)); inv.addItem(2, new SWItem("GREEN_DYE", new Message("MOD_ALLOWED")), click -> function.accept(Mod.ModType.GREEN));
inv.addItem(3, new SWItem(new Message("MOD_FORBIDDEN"), 11), click -> function.accept(Mod.ModType.YELLOW)); inv.addItem(3, new SWItem("YELLOW_DYE", new Message("MOD_FORBIDDEN")), click -> function.accept(Mod.ModType.YELLOW));
inv.addItem(4, new SWItem(new Message("MOD_AUTOBAN"), 1), click -> function.accept(Mod.ModType.RED)); inv.addItem(4, new SWItem("RED_DYE", new Message("MOD_AUTOBAN")), click -> function.accept(Mod.ModType.RED));
inv.addItem(5, new SWItem(new Message("MOD_YT"), 13), click -> function.accept(Mod.ModType.YOUTUBER_ONLY)); inv.addItem(5, new SWItem("MAGENTA_DYE", new Message("MOD_YT")), click -> function.accept(Mod.ModType.YOUTUBER_ONLY));
inv.addItem(8, new SWItem("ARROW", new Message("MOD_ITEM_BACK")), click -> { inv.addItem(8, new SWItem("ARROW", new Message("MOD_ITEM_BACK")), click -> {
inv.close(); inv.close();
@@ -29,7 +29,6 @@ import de.steamwar.messages.Message;
import de.steamwar.sql.BannedUserIPs; import de.steamwar.sql.BannedUserIPs;
import de.steamwar.sql.Punishment; import de.steamwar.sql.Punishment;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import de.steamwar.sql.UserPerm;
import de.steamwar.velocitycore.VelocityCore; import de.steamwar.velocitycore.VelocityCore;
import de.steamwar.velocitycore.listeners.IPSanitizer; import de.steamwar.velocitycore.listeners.IPSanitizer;

Some files were not shown because too many files have changed in this diff Show More