forked from SteamWar/SteamWar
Update SimulatorCursor
This commit is contained in:
+27
-31
@@ -40,13 +40,10 @@ import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
|
|||||||
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
|
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
|
||||||
import de.steamwar.bausystem.utils.ItemUtils;
|
import de.steamwar.bausystem.utils.ItemUtils;
|
||||||
import de.steamwar.bausystem.utils.RayTraceUtils;
|
import de.steamwar.bausystem.utils.RayTraceUtils;
|
||||||
import de.steamwar.data.CMDs;
|
|
||||||
import de.steamwar.entity.REntity;
|
import de.steamwar.entity.REntity;
|
||||||
import de.steamwar.entity.REntityServer;
|
import de.steamwar.entity.REntityServer;
|
||||||
import de.steamwar.entity.RFallingBlockEntity;
|
import de.steamwar.entity.RFallingBlockEntity;
|
||||||
import de.steamwar.inventory.SWAnvilInv;
|
import de.steamwar.inventory.SWAnvilInv;
|
||||||
import de.steamwar.inventory.SWInventory;
|
|
||||||
import de.steamwar.inventory.SWItem;
|
|
||||||
import de.steamwar.linkage.Linked;
|
import de.steamwar.linkage.Linked;
|
||||||
import de.steamwar.linkage.MinVersion;
|
import de.steamwar.linkage.MinVersion;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
@@ -74,14 +71,14 @@ import java.util.stream.Collectors;
|
|||||||
@MinVersion(19)
|
@MinVersion(19)
|
||||||
public class SimulatorCursor implements Listener {
|
public class SimulatorCursor implements Listener {
|
||||||
|
|
||||||
private final World WORLD = Bukkit.getWorlds().get(0);
|
private static final World WORLD = Bukkit.getWorlds().get(0);
|
||||||
private Class<?> position = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos");
|
private Class<?> position = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos");
|
||||||
private Class<?> look = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Rot");
|
private Class<?> look = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Rot");
|
||||||
private Class<?> positionLook = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$PosRot");
|
private Class<?> positionLook = Reflection.getClass("net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$PosRot");
|
||||||
|
|
||||||
private Map<Player, CursorType> cursorType = Collections.synchronizedMap(new HashMap<>());
|
private static Map<Player, CursorType> cursorType = Collections.synchronizedMap(new HashMap<>());
|
||||||
private Map<Player, REntityServer> cursors = Collections.synchronizedMap(new HashMap<>());
|
private static Map<Player, REntityServer> cursors = Collections.synchronizedMap(new HashMap<>());
|
||||||
private final Set<Player> calculating = new HashSet<>();
|
private static final Set<Player> calculating = new HashSet<>();
|
||||||
|
|
||||||
public static boolean isSimulatorItem(ItemStack itemStack) {
|
public static boolean isSimulatorItem(ItemStack itemStack) {
|
||||||
return ItemUtils.isItem(itemStack, "simulator");
|
return ItemUtils.isItem(itemStack, "simulator");
|
||||||
@@ -121,7 +118,7 @@ public class SimulatorCursor implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
|
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
|
||||||
event.getChanged().forEach(this::calcCursor);
|
event.getChanged().forEach(SimulatorCursor::calcCursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -150,29 +147,28 @@ public class SimulatorCursor implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (LAST_SNEAKS.containsKey(player)) {
|
if (LAST_SNEAKS.containsKey(player)) {
|
||||||
SWInventory swInventory = new SWInventory(player, 9, "Simulator Cursor");
|
|
||||||
int slot = 2;
|
|
||||||
CursorType currentType = cursorType.getOrDefault(player, CursorType.TNT);
|
CursorType currentType = cursorType.getOrDefault(player, CursorType.TNT);
|
||||||
for (CursorType type : CursorType.values()) {
|
if (currentType == CursorType.TNT) {
|
||||||
boolean selected = type == currentType;
|
cursorType.put(player, CursorType.REDSTONE_BLOCK);
|
||||||
SWItem swItem = new SWItem(selected ? type.material : type.nonSelectedMaterial, "§e" + type.name)
|
} else {
|
||||||
.setCustomModelData(selected ? 0 : CMDs.Simulator.NEW_PHASE)
|
cursorType.put(player, CursorType.TNT);
|
||||||
.setLore(Collections.singletonList("§eClick to select"))
|
|
||||||
.setCallback(click -> {
|
|
||||||
cursorType.put(player, type);
|
|
||||||
calcCursor(player);
|
|
||||||
player.closeInventory();
|
|
||||||
});
|
|
||||||
swInventory.setItem(slot, swItem);
|
|
||||||
slot += 2;
|
|
||||||
}
|
}
|
||||||
swInventory.open();
|
calcCursor(player);
|
||||||
} else {
|
} else {
|
||||||
LAST_SNEAKS.put(player, System.currentTimeMillis());
|
LAST_SNEAKS.put(player, System.currentTimeMillis());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void calcCursor(Player player) {
|
public static CursorType getCursorType(Player player) {
|
||||||
|
return cursorType.getOrDefault(player, CursorType.TNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setCursorType(Player player, CursorType cursorType) {
|
||||||
|
SimulatorCursor.cursorType.put(player, cursorType);
|
||||||
|
calcCursor(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void calcCursor(Player player) {
|
||||||
synchronized (calculating) {
|
synchronized (calculating) {
|
||||||
if (calculating.contains(player)) return;
|
if (calculating.contains(player)) return;
|
||||||
calculating.add(player);
|
calculating.add(player);
|
||||||
@@ -220,7 +216,7 @@ public class SimulatorCursor implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized boolean removeCursor(Player player) {
|
private static synchronized boolean removeCursor(Player player) {
|
||||||
REntityServer entityServer = cursors.get(player);
|
REntityServer entityServer = cursors.get(player);
|
||||||
boolean hadCursor = entityServer != null && !entityServer.getEntities().isEmpty();
|
boolean hadCursor = entityServer != null && !entityServer.getEntities().isEmpty();
|
||||||
if (entityServer != null) {
|
if (entityServer != null) {
|
||||||
@@ -229,7 +225,7 @@ public class SimulatorCursor implements Listener {
|
|||||||
return hadCursor;
|
return hadCursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
private synchronized void showCursor(Player player, RayTraceUtils.RRayTraceResult rayTraceResult, boolean hasSimulatorSelected) {
|
private static synchronized void showCursor(Player player, RayTraceUtils.RRayTraceResult rayTraceResult, boolean hasSimulatorSelected) {
|
||||||
REntityServer entityServer = cursors.computeIfAbsent(player, __ -> {
|
REntityServer entityServer = cursors.computeIfAbsent(player, __ -> {
|
||||||
REntityServer rEntityServer = new REntityServer();
|
REntityServer rEntityServer = new REntityServer();
|
||||||
rEntityServer.addPlayer(player);
|
rEntityServer.addPlayer(player);
|
||||||
@@ -354,11 +350,11 @@ public class SimulatorCursor implements Listener {
|
|||||||
OBSERVER(Material.OBSERVER, Material.QUARTZ, SimulatorCursor::getPosBlockAligned, "Observer", vector -> new ObserverElement(vector).add(new ObserverPhase())),
|
OBSERVER(Material.OBSERVER, Material.QUARTZ, SimulatorCursor::getPosBlockAligned, "Observer", vector -> new ObserverElement(vector).add(new ObserverPhase())),
|
||||||
;
|
;
|
||||||
|
|
||||||
private Material material;
|
public final Material material;
|
||||||
private Material nonSelectedMaterial;
|
public final Material nonSelectedMaterial;
|
||||||
private BiFunction<Player, RayTraceUtils.RRayTraceResult, Vector> position;
|
public final BiFunction<Player, RayTraceUtils.RRayTraceResult, Vector> position;
|
||||||
private String name;
|
public final String name;
|
||||||
private Function<Vector, SimulatorElement<?>> elementFunction;
|
public final Function<Vector, SimulatorElement<?>> elementFunction;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
+67
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* This file is a part of the SteamWar software.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2020 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.features.simulator.gui;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.features.simulator.SimulatorCursor;
|
||||||
|
import de.steamwar.bausystem.features.simulator.data.Simulator;
|
||||||
|
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
|
||||||
|
import de.steamwar.data.CMDs;
|
||||||
|
import de.steamwar.inventory.SWItem;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
public class SimulatorCursorSwitcherGui extends SimulatorBaseGui {
|
||||||
|
|
||||||
|
private SimulatorBaseGui back;
|
||||||
|
|
||||||
|
public SimulatorCursorSwitcherGui(Player player, Simulator simulator, SimulatorBaseGui back) {
|
||||||
|
super(player, simulator, 9);
|
||||||
|
this.back = back;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String title() {
|
||||||
|
return "Simulator Cursor";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void populate() {
|
||||||
|
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
|
||||||
|
back.open();
|
||||||
|
}).setCustomModelData(CMDs.BACK));
|
||||||
|
|
||||||
|
int slot = 2;
|
||||||
|
SimulatorCursor.CursorType currentType = SimulatorCursor.getCursorType(player);
|
||||||
|
for (SimulatorCursor.CursorType type : SimulatorCursor.CursorType.values()) {
|
||||||
|
boolean selected = type == currentType;
|
||||||
|
SWItem swItem = new SWItem(selected ? type.material : type.nonSelectedMaterial, "§e" + type.name)
|
||||||
|
.setCustomModelData(selected ? 0 : CMDs.Simulator.NEW_PHASE)
|
||||||
|
.setLore(Collections.singletonList("§eClick to select"))
|
||||||
|
.setCallback(click -> {
|
||||||
|
SimulatorCursor.setCursorType(player, type);
|
||||||
|
player.closeInventory();
|
||||||
|
});
|
||||||
|
inventory.setItem(slot, swItem);
|
||||||
|
slot += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
-1
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package de.steamwar.bausystem.features.simulator.gui;
|
package de.steamwar.bausystem.features.simulator.gui;
|
||||||
|
|
||||||
|
import de.steamwar.bausystem.features.simulator.SimulatorCursor;
|
||||||
import de.steamwar.bausystem.features.simulator.SimulatorWatcher;
|
import de.steamwar.bausystem.features.simulator.SimulatorWatcher;
|
||||||
import de.steamwar.bausystem.features.simulator.data.Simulator;
|
import de.steamwar.bausystem.features.simulator.data.Simulator;
|
||||||
import de.steamwar.bausystem.features.simulator.data.SimulatorElement;
|
import de.steamwar.bausystem.features.simulator.data.SimulatorElement;
|
||||||
@@ -49,7 +50,11 @@ public class SimulatorGui extends SimulatorPageGui<SimulatorGroup> {
|
|||||||
inventory.setItem(4, simulator.toItem(player, clickType -> {
|
inventory.setItem(4, simulator.toItem(player, clickType -> {
|
||||||
new SimulatorMaterialGui(player, simulator, simulator::getMaterial, simulator::setMaterial, this).open();
|
new SimulatorMaterialGui(player, simulator, simulator::getMaterial, simulator::setMaterial, this).open();
|
||||||
}));
|
}));
|
||||||
inventory.setItem(49, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
|
SimulatorCursor.CursorType cursorType = SimulatorCursor.getCursorType(player);
|
||||||
|
inventory.setItem(48, new SWItem(cursorType.material, "§7Placing §8-§e " + cursorType.name, clickType -> {
|
||||||
|
new SimulatorCursorSwitcherGui(player, simulator, this).open();
|
||||||
|
}));
|
||||||
|
inventory.setItem(50, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
|
||||||
new SimulatorSettingsGui(player, simulator, this).open();
|
new SimulatorSettingsGui(player, simulator, this).open();
|
||||||
}).setCustomModelData(CMDs.Simulator.SETTINGS));
|
}).setCustomModelData(CMDs.Simulator.SETTINGS));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user