diff --git a/gradle.properties b/gradle.properties index 388008f..5da3466 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,9 +9,9 @@ yarn_mappings=1.19.2+build.28 loader_version=0.14.23 # Mod Properties -mod_version=1.0.0 +mod_version=1.0.1 maven_group=modchest archives_base_name=reservermod # Dependencies -fabric_version=0.76.1+1.19.2 \ No newline at end of file +fabric_version=0.76.1+1.19.2 diff --git a/src/client/java/modchest/REServerModClient.java b/src/client/java/modchest/REServerModClient.java index 7ed34a4..0d18944 100644 --- a/src/client/java/modchest/REServerModClient.java +++ b/src/client/java/modchest/REServerModClient.java @@ -13,6 +13,6 @@ public class REServerModClient implements ClientModInitializer { modNetworkingClient.registerC2SPackets(); //Identifier unter denen der Client zuhoert werden registriert - LOGGER.info("Modchest successfully loaded!"); + LOGGER.info("Modchest-Client successfully loaded!"); } } \ No newline at end of file diff --git a/src/client/java/modchest/networking/packet/respawnRequestS2CPacket.java b/src/client/java/modchest/networking/packet/respawnRequestS2CPacket.java index 12c10c9..d2e9aa9 100644 --- a/src/client/java/modchest/networking/packet/respawnRequestS2CPacket.java +++ b/src/client/java/modchest/networking/packet/respawnRequestS2CPacket.java @@ -9,7 +9,7 @@ import net.minecraft.network.PacketByteBuf; public class respawnRequestS2CPacket { public static void receive(MinecraftClient minecraftClient, ClientPlayNetworkHandler clientPlayNetworkHandler, PacketByteBuf packetByteBuf, PacketSender packetSender) { - REServerModClient.LOGGER.info("Server asked for respawn after pressing a saved respawn button!"); + //REServerModClient.LOGGER.info("Server asked for respawn after pressing a saved respawn button!"); minecraftClient.player.requestRespawn(); } } diff --git a/src/main/java/modchest/REServerMod.java b/src/main/java/modchest/REServerMod.java index 8430a45..37c25ad 100644 --- a/src/main/java/modchest/REServerMod.java +++ b/src/main/java/modchest/REServerMod.java @@ -11,10 +11,12 @@ 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(); - //initializer.itemsAndBlocks(); + initializer.itemGroups(); + initializer.itemsAndBlocks(); initializer.events(); initializer.networking(); diff --git a/src/main/java/modchest/mixin/bedBlock.java b/src/main/java/modchest/mixin/bedBlock.java index 41f3cd4..bc1fc19 100644 --- a/src/main/java/modchest/mixin/bedBlock.java +++ b/src/main/java/modchest/mixin/bedBlock.java @@ -16,6 +16,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.Arrays; import java.util.List; +import java.util.Objects; @Mixin(BedBlock.class) public class bedBlock { @@ -23,6 +24,35 @@ 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(); + + 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 List playerArray = null; try { //Sollte der Code doch ausversehen auf dem Client ausgefuehrt werden, wuerde die folgende Zeile einen Error schmeissen @@ -38,7 +68,7 @@ public class bedBlock { } catch (Exception e) { REServerMod.LOGGER.info("Error casting playerArray to ServerPlayerEntity: " + e); } - if (inRange(pos.getX(), posXYZ[0], 1) && inRange(pos.getY(), posXYZ[1], 1) && inRange(pos.getZ(), posXYZ[2], 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]) { //TODO: change range to 1 //Gleicht ab, ob die Koordinaten uebereinstimmen; die Spawnpunkte sind nicht immer ganz sauber, daher wird in Blockrange 1 geschaut 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) { diff --git a/src/main/java/modchest/networking/packet/deathScreenMultiButtonsC2SPacket.java b/src/main/java/modchest/networking/packet/deathScreenMultiButtonsC2SPacket.java index 078549d..63440ce 100644 --- a/src/main/java/modchest/networking/packet/deathScreenMultiButtonsC2SPacket.java +++ b/src/main/java/modchest/networking/packet/deathScreenMultiButtonsC2SPacket.java @@ -38,7 +38,7 @@ public class deathScreenMultiButtonsC2SPacket { player.setSpawnPoint(World.OVERWORLD, new BlockPos(posXYZ[0], posXYZ[1], posXYZ[2]), 0, true, true); //neuer Spawn wird gesetzt ServerPlayNetworking.send(player, modNetworkingServer.request_respawn, PacketByteBufs.create()); //Anfrage an den Client zum respawnen wird gesendet player.sendMessage((Text.translatable("chat.modchest.multispawn.respawned", num))); - REServerMod.LOGGER.info("Respawned Player: " + player.getDisplayName() + "at " + Arrays.toString(setAndGet.getMultiSpawn(player, num))); + REServerMod.LOGGER.info("Respawned Player " + player.getEntityName() + " at " + Arrays.toString(setAndGet.getMultiSpawn(player, num))); setAndGet.setMultiSpawn(player, 6); } catch (Exception e) { REServerMod.LOGGER.info("Sorry! Following error, trying to respawn player " + player.getDisplayName() + ": " + e); @@ -50,6 +50,5 @@ public class deathScreenMultiButtonsC2SPacket { player.sendMessage(Text.translatable("chat.modchest.multispawn.spawnnotset")); } } - } } diff --git a/src/main/java/modchest/util/setAndGetMultiButtonsSpawn.java b/src/main/java/modchest/util/setAndGetMultiButtonsSpawn.java index bfc08de..7ee7e51 100644 --- a/src/main/java/modchest/util/setAndGetMultiButtonsSpawn.java +++ b/src/main/java/modchest/util/setAndGetMultiButtonsSpawn.java @@ -26,12 +26,16 @@ public class setAndGetMultiButtonsSpawn { fullArray[2] = (int) player.getZ(); try { - assert subNbt != null; - subNbt.putIntArray(String.valueOf(spawn), fullArray); //speichert unseren array an der entsprechenden nummer ab - topNbt.put("multi_sleep", subNbt); //speichert den tag unter multi_sleep im top-tag ab - castedPlayer.setDataSaver(topNbt); //speichert den top-tag wieder im spieler ab + if (subNbt != null) { + subNbt.putIntArray(String.valueOf(spawn), fullArray); //speichert unseren array an der entsprechenden nummer ab + topNbt.put("multi_sleep", subNbt); //speichert den tag unter multi_sleep im top-tag ab + castedPlayer.setDataSaver(topNbt); //speichert den top-tag wieder im spieler ab + } else { + REServerMod.LOGGER.info("Error when trying to write spawn to file!"); + player.sendMessage(Text.translatable("chat.modchest.multispawn.spawnnotsaved")); + } } catch (Exception e) { - REServerMod.LOGGER.info("Sorry! Error when saving Spawnpoint! Exception: " + e); + REServerMod.LOGGER.info("Error when saving Spawnpoint! Exception: " + e); player.sendMessage(Text.translatable("chat.modchest.multispawn.spawnnotsaved")); } } @@ -119,19 +123,21 @@ public class setAndGetMultiButtonsSpawn { if (subNbt != null) { NbtCompound nbt = (NbtCompound) subNbt.get("vanillaSpawnData"); //hollt sich die daten - assert nbt != null; - if (!nbt.getBoolean("used")) { - nbt.putBoolean("used", true); //setzt den verwendet boolean auf true; nicht ganz perfekt, sollte ein fehler beim speichern auftreten wird es nicht nochmal versucht, speichert aber massiv an coding und leistung - subNbt.put("vanillaSpawnData", nbt); - topNbt.put("multi_sleep", subNbt); //muss den bearbeiteten nbt wieder abgespeichert (nur der boolean wurde ueberschrieben) - castedPlayer.setDataSaver(topNbt); - return nbt; //gibt den nbt-tag an die aufrufende Methode - } else { - return null; + if (nbt != null) { + if (!nbt.getBoolean("used")) { + nbt.putBoolean("used", true); //setzt den verwendet boolean auf true; nicht ganz perfekt, sollte ein fehler beim speichern auftreten wird es nicht nochmal versucht, speichert aber massiv an coding und leistung + subNbt.put("vanillaSpawnData", nbt); + topNbt.put("multi_sleep", subNbt); //muss den bearbeiteten nbt wieder abgespeichert (nur der boolean wurde ueberschrieben) + castedPlayer.setDataSaver(topNbt); + return nbt; //gibt den nbt-tag an die aufrufende Methode + } else { + return null; + } } } else { return null; } + return null; } public synchronized void setMultiSpawnBlank(ServerPlayerEntity player, int spawn) { //wird aufgerufen wenn das Bett dieses Spielers zerstoert wurde diff --git a/src/main/resources/assets/modchest/icon.png b/src/main/resources/assets/modchest/icon.png index 047b91f..f2da261 100644 Binary files a/src/main/resources/assets/modchest/icon.png and b/src/main/resources/assets/modchest/icon.png differ diff --git a/src/main/resources/assets/modchest/icon.png.old b/src/main/resources/assets/modchest/icon.png.old new file mode 100644 index 0000000..047b91f Binary files /dev/null and b/src/main/resources/assets/modchest/icon.png.old differ diff --git a/src/main/resources/data/icon.png b/src/main/resources/data/icon.png new file mode 100644 index 0000000..f2da261 Binary files /dev/null and b/src/main/resources/data/icon.png differ diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ad0d2aa..20a6044 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "sources": "https://github.com/FabricMC/fabric-example-mod" }, "license": "CC0-1.0", - "icon": "assets/reservermod/icon.png", + "icon": "assets/modchest/icon.png", "environment": "*", "entrypoints": { "main": [