syncing with main #16
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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]));
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
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");
|
//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
|
||||||
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")));
|
//REServerMod.LOGGER.info("readCustomDataFromNbt called with following Data: " + Arrays.toString(nbt.getIntArray("REServerMod.sleep_data")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue