Add some QOL Simulator changes
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed

Dieser Commit ist enthalten in:
yoyosource 2023-10-25 23:03:59 +02:00
Ursprung 21ec66b4e2
Commit 61f7218fc0
11 geänderte Dateien mit 83 neuen und 37 gelöschten Zeilen

Datei anzeigen

@ -59,10 +59,7 @@ import org.bukkit.event.player.*;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.Collections; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -279,7 +276,11 @@ public class SimulatorCursor implements Listener {
} }
pos.setX(pos.getBlockX() + 0.5); pos.setX(pos.getBlockX() + 0.5);
pos.setY(pos.getBlockY()); if (pos.getY() - pos.getBlockY() != 0 && face == BlockFace.UP) {
pos.setY(pos.getBlockY() + 1.0);
} else {
pos.setY(pos.getBlockY());
}
pos.setZ(pos.getBlockZ() + 0.5); pos.setZ(pos.getBlockZ() + 0.5);
return pos; return pos;
} }
@ -374,12 +375,19 @@ public class SimulatorCursor implements Listener {
element.open(player, simulator, group1, back); element.open(player, simulator, group1, back);
break; break;
default: default:
// Open multi element present in Simulator List<SimulatorGroup> parents = elements.stream().map(e -> e.getGroup(simulator)).distinct().collect(Collectors.toList());
SimulatorGroup group2 = new SimulatorGroup(); if (parents.size() == 1) {
group2.setMaterial(null); // Open multi element present in Simulator in existing group
group2.getElements().addAll(elements); SimulatorGui simulatorGui = new SimulatorGui(player, simulator);
SimulatorGui simulatorGui = new SimulatorGui(player, simulator); new SimulatorGroupGui(player, simulator, parents.get(0), simulatorGui).open();
new SimulatorGroupGui(player, simulator, group2, simulatorGui).open(); } else {
// Open multi element present in Simulator in implicit group
SimulatorGroup group2 = new SimulatorGroup();
group2.setMaterial(null);
group2.getElements().addAll(elements);
SimulatorGui simulatorGui = new SimulatorGui(player, simulator);
new SimulatorGroupGui(player, simulator, group2, simulatorGui).open();
}
break; break;
} }
return; return;

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem.features.simulator2; package de.steamwar.bausystem.features.simulator2;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.features.simulator2.data.Simulator; import de.steamwar.bausystem.features.simulator2.data.Simulator;
import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorPageGui; import de.steamwar.bausystem.features.simulator2.gui.base.SimulatorPageGui;
@ -27,6 +28,7 @@ import de.steamwar.inventory.SWItem;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -76,7 +78,26 @@ public class SimulatorStorage {
@Override @Override
public SWItem convert(Simulator simulator) { public SWItem convert(Simulator simulator) {
return simulator.toItem(player, clickType -> { return simulator.toItem(player, clickType -> {
System.out.println(clickType); ItemStack mainHand = player.getInventory().getItemInMainHand();
ItemStack offHand = player.getInventory().getItemInOffHand();
ItemStack itemStack;
if (SimulatorCursor.isSimulatorItem(mainHand)) {
itemStack = mainHand;
} else if (SimulatorCursor.isSimulatorItem(offHand)) {
itemStack = offHand;
} else {
itemStack = null;
}
if (itemStack == null) {
return;
}
// TODO: Dynamic Item Lore, and remove if simulator does not exist anymore (On Join for every Player Inventory Slot with Simulator...)
ItemUtils.setTag(itemStack, simulatorSelection, simulator.getName());
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setDisplayName(BauSystem.MESSAGE.parse("SIMULATOR_WAND_NAME_SELECTED", player, simulator.getName()));
itemStack.setItemMeta(itemMeta);
player.closeInventory();
}); });
} }
}; };

Datei anzeigen

@ -50,14 +50,4 @@ public class SimulatorTestCommand extends SWCommand {
SimulatorGroup group3 = new SimulatorGroup().add(new RedstoneElement(new Vector(-484, 47, 307)).add(new RedstonePhase())); SimulatorGroup group3 = new SimulatorGroup().add(new RedstoneElement(new Vector(-484, 47, 307)).add(new RedstonePhase()));
SIMULATOR.getElements().add(group3); SIMULATOR.getElements().add(group3);
} }
@Register("open")
public void openCommand(Player player) {
new SimulatorGui(player, SIMULATOR).open();
}
@Register("run")
public void runCommand(Player player) {
SimulatorExecutor.run(SIMULATOR);
}
} }

Datei anzeigen

@ -88,13 +88,12 @@ public class SimulatorWatcher {
Map<Vector, Set<Class<?>>> positionCache = new HashMap<>(); Map<Vector, Set<Class<?>>> positionCache = new HashMap<>();
simulator.getElements().stream().map(group -> group.getElements().stream().map(element -> new Pair<>(group, element)).collect(Collectors.toList())).flatMap(List::stream).forEach(pair -> { simulator.getElements().stream().map(group -> group.getElements().stream().map(element -> new Pair<>(group, element)).collect(Collectors.toList())).flatMap(List::stream).forEach(pair -> {
SimulatorGroup group = pair.getKey(); SimulatorGroup group = pair.getKey();
// TODO: Disabled material
SimulatorElement<?> element = pair.getValue(); SimulatorElement<?> element = pair.getValue();
boolean wasNotPresent = positionCache.computeIfAbsent(element.getPosition(), __ -> new HashSet<>()) boolean wasNotPresent = positionCache.computeIfAbsent(element.getPosition(), __ -> new HashSet<>())
.add(element.getClass()); .add(element.getClass());
if (!wasNotPresent) return; if (!wasNotPresent) return;
Material material = element.getWorldMaterial(); Material material = group.isDisabled() || element.isDisabled() ? element.getWorldDisabledMaterial() : element.getWorldMaterial();
Location location = element.getWorldPos().toLocation(WORLD); Location location = element.getWorldPos().toLocation(WORLD);
RFallingBlockEntity rFallingBlockEntity = new RFallingBlockEntity(server, location, material); RFallingBlockEntity rFallingBlockEntity = new RFallingBlockEntity(server, location, material);
rFallingBlockEntity.setNoGravity(true); rFallingBlockEntity.setNoGravity(true);

Datei anzeigen

@ -79,6 +79,8 @@ public abstract class SimulatorElement<T extends SimulatorPhase> {
public abstract Material getWorldMaterial(); public abstract Material getWorldMaterial();
public abstract Material getWorldDisabledMaterial();
public Vector getWorldPos() { public Vector getWorldPos() {
return position; return position;
} }

Datei anzeigen

@ -44,6 +44,11 @@ public class RedstoneElement extends SimulatorElement<RedstonePhase> {
return Material.REDSTONE_BLOCK; return Material.REDSTONE_BLOCK;
} }
@Override
public Material getWorldDisabledMaterial() {
return Material.WHITE_STAINED_GLASS;
}
@Override @Override
public Vector getWorldPos() { public Vector getWorldPos() {
return position.clone().add(new Vector(0.5, 0, 0.5)); return position.clone().add(new Vector(0.5, 0, 0.5));

Datei anzeigen

@ -82,6 +82,11 @@ public class TNTElement extends SimulatorElement<TNTPhase> {
return Material.TNT; return Material.TNT;
} }
@Override
public Material getWorldDisabledMaterial() {
return Material.RED_STAINED_GLASS;
}
@Override @Override
public void open(Player player, Simulator simulator, SimulatorGroup group, SimulatorBaseGui back) { public void open(Player player, Simulator simulator, SimulatorGroup group, SimulatorBaseGui back) {
new SimulatorTNTGui(player, simulator, this, group, back).open(); new SimulatorTNTGui(player, simulator, this, group, back).open();

Datei anzeigen

@ -31,9 +31,12 @@ import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.List;
import java.util.stream.Collectors;
public class SimulatorGroupGui extends SimulatorPageGui<SimulatorElement<?>> { public class SimulatorGroupGui extends SimulatorPageGui<SimulatorElement<?>> {
private final SimulatorGroup simulatorGroup; private SimulatorGroup simulatorGroup;
private final SimulatorBaseGui back; private final SimulatorBaseGui back;
public SimulatorGroupGui(Player player, Simulator simulator, SimulatorGroup simulatorGroup, SimulatorBaseGui back) { public SimulatorGroupGui(Player player, Simulator simulator, SimulatorGroup simulatorGroup, SimulatorBaseGui back) {
@ -49,6 +52,14 @@ public class SimulatorGroupGui extends SimulatorPageGui<SimulatorElement<?>> {
@Override @Override
public void headerAndFooter() { public void headerAndFooter() {
if (simulatorGroup.getMaterial() == null) {
List<SimulatorGroup> parents = data.stream().map(e -> e.getGroup(simulator)).distinct().collect(Collectors.toList());
if (parents.size() == 1) {
simulatorGroup = parents.get(0);
data = simulatorGroup.getElements();
}
}
if (simulatorGroup.getElements().removeIf(element -> element.getPhases().isEmpty())) { if (simulatorGroup.getElements().removeIf(element -> element.getPhases().isEmpty())) {
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
} }
@ -69,15 +80,20 @@ public class SimulatorGroupGui extends SimulatorPageGui<SimulatorElement<?>> {
}, clickType -> { }, clickType -> {
})); }));
inventory.setItem(simulatorGroup.getMaterial() != null ? 48 : 49, new SWItem(Material.REPEATER, "§eSettings", clickType -> { inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
new SimulatorGroupSettingsGui(player, simulator, simulatorGroup, this).open(); new SimulatorGroupSettingsGui(player, simulator, simulatorGroup, this).open();
})); }));
if (simulatorGroup.getMaterial() != null) { boolean disabled = simulatorGroup.getMaterial() == null ? simulatorGroup.getElements().stream().allMatch(SimulatorElement::isDisabled) : simulatorGroup.isDisabled();
inventory.setItem(50, new SWItem(simulatorGroup.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, simulatorGroup.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { inventory.setItem(50, new SWItem(disabled ? Material.ENDER_PEARL : Material.ENDER_EYE, simulatorGroup.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> {
simulatorGroup.setDisabled(!simulatorGroup.isDisabled()); if (simulatorGroup.getMaterial() == null) {
SimulatorWatcher.update(simulator); simulatorGroup.getElements().forEach(simulatorElement -> {
})); simulatorElement.setDisabled(!disabled);
} });
} else {
simulatorGroup.setDisabled(!disabled);
}
SimulatorWatcher.update(simulator);
}));
} }
@Override @Override

Datei anzeigen

@ -85,14 +85,14 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui<RedstonePhase> {
new SimulatorMaterialGui(player, simulator, redstone::getMaterial, redstone::setMaterial, this).open(); new SimulatorMaterialGui(player, simulator, redstone::getMaterial, redstone::setMaterial, this).open();
})); }));
//Settings // Settings
inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> { inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
new SimulatorRedstoneSettingsGui(player, simulator, redstone, this).open(); new SimulatorRedstoneSettingsGui(player, simulator, redstone, this).open();
})); }));
//Group chooser // Group chooser
inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> { inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> {
new SimulatorGroupChooserGui(player, simulator, redstone, parent, this).open(); new SimulatorGroupChooserGui(player, simulator, redstone, redstone.getGroup(simulator), this).open();
})); }));
//Enable/Disable //Enable/Disable

Datei anzeigen

@ -89,7 +89,7 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
new SimulatorTNTSettingsGui(player, simulator, tnt, this).open(); new SimulatorTNTSettingsGui(player, simulator, tnt, this).open();
})); }));
inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> { inventory.setItem(49, new SWItem(Material.LEAD, "§eMove", clickType -> {
new SimulatorGroupChooserGui(player, simulator, tnt, parent, this).open(); new SimulatorGroupChooserGui(player, simulator, tnt, tnt.getGroup(simulator), this).open();
})); }));
inventory.setItem(50, new SWItem(tnt.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, tnt.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { inventory.setItem(50, new SWItem(tnt.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, tnt.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> {
tnt.setDisabled(!tnt.isDisabled()); tnt.setDisabled(!tnt.isDisabled());

Datei anzeigen

@ -29,7 +29,7 @@ import java.util.List;
public abstract class SimulatorPageGui<T> extends SimulatorBaseGui { public abstract class SimulatorPageGui<T> extends SimulatorBaseGui {
protected int page = 0; protected int page = 0;
protected final List<T> data; protected List<T> data;
protected SimulatorPageGui(Player player, Simulator simulator, int size, List<T> data) { protected SimulatorPageGui(Player player, Simulator simulator, int size, List<T> data) {
super(player, simulator, size); super(player, simulator, size);