Compare commits

..

7 Commits

Author SHA1 Message Date
Malte 0c99c0b24e Merge pull request 'syncing with main' (#16) from main into denkmalschutzblock
Reviewed-on: #16
2024-03-13 23:10:59 +01:00
Malte cd6ec3e294 Merge pull request 'gradle.properties aktualisiert' (#15) from malte-patch-1 into main
Reviewed-on: #15
2024-03-13 23:04:00 +01:00
Malte 90e9d5df5b gradle.properties aktualisiert 2024-03-13 23:03:44 +01:00
Malte d56761cd27 Merge pull request 'fix for null-NBT' (#14) from multi-sleep into main
Reviewed-on: #14
2024-03-13 22:58:55 +01:00
Malte Reents e678b1f05a fix for null-NBT
Wenn ein leerer NBT gespeichert wurde (ohne spawnpunkt), gab das bisher einen Fehler und das speichern ist abgestürtzt
2024-03-13 22:56:46 +01:00
Malte 71c2263c9d Merge pull request 'Version change' (#12) from multi-sleep into main
Reviewed-on: #12
2024-03-12 17:05:24 +01:00
Malte Reents 8c115f0f78 Bugs fixed + Verrsion change
Wenn das Bett negative Koordinaten hatte, konnte es nicht beim abbauen identifizierrt werden.
Nummer geändert auf 1.0.2
2024-03-12 16:57:22 +01:00
5 changed files with 34 additions and 24 deletions

View File

@ -9,7 +9,7 @@ yarn_mappings=1.19.2+build.28
loader_version=0.14.23 loader_version=0.14.23
# Mod Properties # Mod Properties
mod_version=1.0.1 mod_version=1.0.3
maven_group=modchest maven_group=modchest
archives_base_name=reservermod archives_base_name=reservermod

View File

@ -11,8 +11,6 @@ public class REServerMod implements ModInitializer {
public static final String MOD_ID = "modchest"; public static final String MOD_ID = "modchest";
public static final Logger LOGGER = LoggerFactory.getLogger("modchest"); // Erster Error Logger 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 @Override
public void onInitialize() { //Der uebersicht halber sind jetzt alle initializer in Klassen in util in initializer public void onInitialize() { //Der uebersicht halber sind jetzt alle initializer in Klassen in util in initializer
initializer.itemGroups(); initializer.itemGroups();

View File

@ -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 public class playerAfterRespawnEvent implements ServerPlayerEvents.AfterRespawn { //Wenn die Multi-Spawn mod verwendet wurde, muss der Vanillaspawn wieder gesetzt werden
@Override @Override
public void afterRespawn(ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer, boolean alive) { 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 NbtCompound nbt = setAndGet.getMultiSpawnVanilla(newPlayer); //holt sich den nbt-tag
if (nbt != null) { if (nbt != null) {
try { try {
int[] location = nbt.getIntArray("location"); //holt sich den gespeicherten Ort int[] location = nbt.getIntArray("location"); //holt sich den gespeicherten Ort
BlockPos blockPos = new BlockPos(location[0], location[1], location[2]); 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("]"); parts = parts[2].split("]");
RegistryKey<World> dim = RegistryKey.of(Registry.WORLD_KEY, new Identifier(parts[0])); RegistryKey<World> dim = RegistryKey.of(Registry.WORLD_KEY, new Identifier(parts[0]));

View File

@ -32,13 +32,25 @@ public abstract class ServerPlayerEntityMixin implements ServerPlayerEntityInter
@Inject(method = "writeCustomDataToNbt", at = @At("TAIL")) @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 public void writeCustomDataToNbt(NbtCompound nbt, CallbackInfo ci) { //Immer wenn eine andere Methode aufruft, dass Daten abgespeichert werden sollen, tun wir das jetzt auch
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); 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"); //REServerMod.LOGGER.info("writeCustomDataToNbt called");
} }
@Inject(method = "readCustomDataFromNbt", at = @At("TAIL")) @Inject(method = "readCustomDataFromNbt", at = @At("TAIL"))
public void readCustomDataFromNbt(NbtCompound nbt, CallbackInfo ci) { //gleiches beim einlesen. Werden NBT-Daten eingelesen, tun wird das auch public void readCustomDataFromNbt(NbtCompound nbt, CallbackInfo ci) { //gleiches beim einlesen. Werden NBT-Daten eingelesen, tun wird das auch
try {
dataSaver = (NbtCompound) nbt.get("REServerMod"); 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"))); //REServerMod.LOGGER.info("readCustomDataFromNbt called with following Data: " + Arrays.toString(nbt.getIntArray("REServerMod.sleep_data")));
} }

View File

@ -23,37 +23,43 @@ public class bedBlock {
@Inject(method = "onBreak", at = @At("HEAD")) @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 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 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 posBedX = pos.getX();
int posBedZ= pos.getZ(); int posBedY = pos.getY();
int posBedZ = pos.getZ();
String bedData = state.toString(); 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 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]) { switch (bedData.split("facing=")[1].split(",")[0]) {
case "east": case "east":
posBedX++; posBedX++;
player.sendMessage(Text.of("east"));
break; break;
case "west": case "west":
posBedX--; posBedX--;
player.sendMessage(Text.of("west"));
break; break;
case "south": case "south":
posBedZ++; posBedZ++;
player.sendMessage(Text.of("south"));
break; break;
case "north": case "north":
posBedZ--; posBedZ--;
player.sendMessage(Text.of("north"));
break; break;
default: default:
player.sendMessage(Text.of(bedData.split("facing=")[1].split(",")[0]));
break; 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<? extends PlayerEntity> playerArray = null; List<? extends PlayerEntity> playerArray = null;
try { //Sollte der Code doch ausversehen auf dem Client ausgefuehrt werden, wuerde die folgende Zeile einen Error schmeissen 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 playerArray = world.getPlayers(); //holt sich die liste aller Spieler auf dem server
@ -68,21 +74,15 @@ public class bedBlock {
} catch (Exception e) { } catch (Exception e) {
REServerMod.LOGGER.info("Error casting playerArray to ServerPlayerEntity: " + 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 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 setAndGet.setMultiSpawnBlank((ServerPlayerEntity) playerArray.get(i), j); //Wird ein bett zerstoert, wird der Spawnpunkt geblanked
} catch (Exception e) { } catch (Exception e) {
REServerMod.LOGGER.info("Error when trying to get players Array after Bed was destroyed: " + 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;
}
} }