From 8c115f0f785357688daea74344317cda74968046 Mon Sep 17 00:00:00 2001 From: Malte Reents Date: Tue, 12 Mar 2024 16:57:22 +0100 Subject: [PATCH 1/3] Bugs fixed + Verrsion change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn das Bett negative Koordinaten hatte, konnte es nicht beim abbauen identifizierrt werden. Nummer geändert auf 1.0.2 --- gradle.properties | 2 +- src/main/java/modchest/REServerMod.java | 2 -- .../event/playerAfterRespawnEvent.java | 4 +-- src/main/java/modchest/mixin/bedBlock.java | 34 +++++++++---------- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5da3466..7ddd058 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.19.2+build.28 loader_version=0.14.23 # Mod Properties -mod_version=1.0.1 +mod_version=1.0.2 maven_group=modchest archives_base_name=reservermod diff --git a/src/main/java/modchest/REServerMod.java b/src/main/java/modchest/REServerMod.java index 37c25ad..fe7cbcc 100644 --- a/src/main/java/modchest/REServerMod.java +++ b/src/main/java/modchest/REServerMod.java @@ -11,8 +11,6 @@ public class REServerMod implements ModInitializer { public static final String MOD_ID = "modchest"; public static final Logger LOGGER = LoggerFactory.getLogger("modchest"); // Erster Error Logger - //TODO: beim bett wird noch im zwei block-radius gesucht, damit der respawn point auch gelöscht wird, wenn man nur einen der beiden hälften zerstört - @Override public void onInitialize() { //Der uebersicht halber sind jetzt alle initializer in Klassen in util in initializer initializer.itemGroups(); diff --git a/src/main/java/modchest/event/playerAfterRespawnEvent.java b/src/main/java/modchest/event/playerAfterRespawnEvent.java index fc098ae..f6941fb 100644 --- a/src/main/java/modchest/event/playerAfterRespawnEvent.java +++ b/src/main/java/modchest/event/playerAfterRespawnEvent.java @@ -14,14 +14,14 @@ import net.minecraft.world.World; public class playerAfterRespawnEvent implements ServerPlayerEvents.AfterRespawn { //Wenn die Multi-Spawn mod verwendet wurde, muss der Vanillaspawn wieder gesetzt werden @Override public void afterRespawn(ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer, boolean alive) { - setAndGetMultiButtonsSpawn setAndGet = new setAndGetMultiButtonsSpawn(); //Damit die Mehtoden benutzt werden koennen, muss ein Objekt erstellt werden; ist aber egal, weil eh keine Daten in dieser Klasse gespeichert werden + setAndGetMultiButtonsSpawn setAndGet = new setAndGetMultiButtonsSpawn(); //Damit die Methoden benutzt werden koennen, muss ein Objekt erstellt werden; ist aber egal, weil eh keine Daten in dieser Klasse gespeichert werden NbtCompound nbt = setAndGet.getMultiSpawnVanilla(newPlayer); //holt sich den nbt-tag if (nbt != null) { try { int[] location = nbt.getIntArray("location"); //holt sich den gespeicherten Ort BlockPos blockPos = new BlockPos(location[0], location[1], location[2]); - String[] parts = nbt.getString("dimension").split(":"); //holt sich die gespeicherte Dimension; trennt den String entspreichend; damit sollte es auch funktionieren, sollte eine Mod weiter Dimensionen hinzufuegen + String[] parts = nbt.getString("dimension").split(":"); //holt sich die gespeicherte Dimension; trennt den String entspreichend; damit sollte es auch funktionieren, sollte eine Mod weitere Dimensionen hinzufuegen parts = parts[2].split("]"); RegistryKey dim = RegistryKey.of(Registry.WORLD_KEY, new Identifier(parts[0])); diff --git a/src/main/java/modchest/mixin/bedBlock.java b/src/main/java/modchest/mixin/bedBlock.java index bc1fc19..a995ba4 100644 --- a/src/main/java/modchest/mixin/bedBlock.java +++ b/src/main/java/modchest/mixin/bedBlock.java @@ -23,37 +23,43 @@ public class bedBlock { @Inject(method = "onBreak", at = @At("HEAD")) public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player, CallbackInfo ci) { //Ueberprueft, wenn ein Bett zerstoert wird, ob jemand dieses Bett als Spawnpunkt hat - if (!world.isClient) { //Stellt sicher, dass das ganze nciht auf dem CLient rechnet wird, weil der Code sonst abstuertzt - int posBedX= pos.getX(); - int posBedY= pos.getY(); - int posBedZ= pos.getZ(); + if (!world.isClient) { //Stellt sicher, dass das ganze nicht auf dem Client gerechnet wird, weil der Code sonst abstuertzt + + int posBedX = pos.getX(); + int posBedY = pos.getY(); + int posBedZ = pos.getZ(); String bedData = state.toString(); if (Objects.equals(bedData.split("part=")[1], "foot]")) { //das fussende wurde zerstoert, damit der Code also geht, muss in richtung kopfende eins gegangen werden switch (bedData.split("facing=")[1].split(",")[0]) { case "east": posBedX++; - player.sendMessage(Text.of("east")); break; case "west": posBedX--; - player.sendMessage(Text.of("west")); break; case "south": posBedZ++; - player.sendMessage(Text.of("south")); break; case "north": posBedZ--; - player.sendMessage(Text.of("north")); break; default: - player.sendMessage(Text.of(bedData.split("facing=")[1].split(",")[0])); break; } } - setAndGetMultiButtonsSpawn setAndGet = new setAndGetMultiButtonsSpawn(); //Damit die Mehtoden benutzt werden koennen, muss ein Objekt erstellt werden; ist aber egal, weil eh keine Daten in dieser Klasse gespeichert werden + if (posBedX < 0) { //Es gibt leider einen rundungsfehler. Wenn Das Bett negative koordinaten hat, rundet es weg von der Null wahrend der Spieler richtung Null aufrundet + posBedX++; + } + if (posBedY < 0) { + posBedY++; + } + if (posBedZ < 0) { + posBedZ++; + } + + setAndGetMultiButtonsSpawn setAndGet = new setAndGetMultiButtonsSpawn(); //Damit die Methoden benutzt werden koennen, muss ein Objekt erstellt werden; ist aber egal, weil eh keine Daten in dieser Klasse gespeichert werden List playerArray = null; try { //Sollte der Code doch ausversehen auf dem Client ausgefuehrt werden, wuerde die folgende Zeile einen Error schmeissen playerArray = world.getPlayers(); //holt sich die liste aller Spieler auf dem server @@ -68,21 +74,15 @@ public class bedBlock { } catch (Exception e) { REServerMod.LOGGER.info("Error casting playerArray to ServerPlayerEntity: " + e); } - if (posBedX == posXYZ[0] && posBedY == posXYZ[1] && posBedZ == posXYZ[2]) { //TODO: change range to 1 //Gleicht ab, ob die Koordinaten uebereinstimmen; die Spawnpunkte sind nicht immer ganz sauber, daher wird in Blockrange 1 geschaut + if (posBedX == posXYZ[0] && posBedY == posXYZ[1] && posBedZ == posXYZ[2]) { //Gleicht ab, ob die Koordinaten uebereinstimmen try { //Sollte der Code doch ausversehen auf dem Client ausgefuehrt werden, wuerde die folgende Zeile einen Error schmeissen setAndGet.setMultiSpawnBlank((ServerPlayerEntity) playerArray.get(i), j); //Wird ein bett zerstoert, wird der Spawnpunkt geblanked } catch (Exception e) { REServerMod.LOGGER.info("Error when trying to get players Array after Bed was destroyed: " + e); } - } } } } } - - private boolean inRange(int one, int two, int range) { - one = (one - two); - return (-range) <= one && one <= range; - } } -- 2.40.1 From e678b1f05ac18d122b9bbe5437427b1567e196f2 Mon Sep 17 00:00:00 2001 From: Malte Reents Date: Wed, 13 Mar 2024 22:56:46 +0100 Subject: [PATCH 2/3] fix for null-NBT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wenn ein leerer NBT gespeichert wurde (ohne spawnpunkt), gab das bisher einen Fehler und das speichern ist abgestürtzt --- .../modchest/mixin/ServerPlayerEntityMixin.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/modchest/mixin/ServerPlayerEntityMixin.java b/src/main/java/modchest/mixin/ServerPlayerEntityMixin.java index 06c2e4a..0a70b69 100644 --- a/src/main/java/modchest/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/modchest/mixin/ServerPlayerEntityMixin.java @@ -32,13 +32,25 @@ public abstract class ServerPlayerEntityMixin implements ServerPlayerEntityInter @Inject(method = "writeCustomDataToNbt", at = @At("TAIL")) public void writeCustomDataToNbt(NbtCompound nbt, CallbackInfo ci) { //Immer wenn eine andere Methode aufruft, dass Daten abgespeichert werden sollen, tun wir das jetzt auch - nbt.put("REServerMod", this.dataSaver); + if (dataSaver != null) { //wenn der dataSaver null ist, wuerde sonst ein Error kommen, weil Minecraft keine leeren NBTs absepeicheern kann :( + try { + nbt.put("REServerMod", this.dataSaver); + } catch (Exception e) { + REServerMod.LOGGER.info("Error while saving custom NBt-Data: " + e); + } + } else { + REServerMod.LOGGER.info("write failed! This probably means, that the player hasn't set a custom spanpoint yet"); + } //REServerMod.LOGGER.info("writeCustomDataToNbt called"); } @Inject(method = "readCustomDataFromNbt", at = @At("TAIL")) public void readCustomDataFromNbt(NbtCompound nbt, CallbackInfo ci) { //gleiches beim einlesen. Werden NBT-Daten eingelesen, tun wird das auch - dataSaver = (NbtCompound) nbt.get("REServerMod"); + try { + dataSaver = (NbtCompound) nbt.get("REServerMod"); + } catch (Exception e) { + REServerMod.LOGGER.info("Error while saving custom NBt-Data: " + e); + } //REServerMod.LOGGER.info("readCustomDataFromNbt called with following Data: " + Arrays.toString(nbt.getIntArray("REServerMod.sleep_data"))); } -- 2.40.1 From 90e9d5df5ba7603e917bab7e1acd0eaa661b37c2 Mon Sep 17 00:00:00 2001 From: Malte Date: Wed, 13 Mar 2024 23:03:44 +0100 Subject: [PATCH 3/3] gradle.properties aktualisiert --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 7ddd058..f5228ad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.19.2+build.28 loader_version=0.14.23 # Mod Properties -mod_version=1.0.2 +mod_version=1.0.3 maven_group=modchest archives_base_name=reservermod -- 2.40.1