multi-sleep improved #9
|
@ -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.0
|
mod_version=1.0.1
|
||||||
maven_group=modchest
|
maven_group=modchest
|
||||||
archives_base_name=reservermod
|
archives_base_name=reservermod
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,6 @@ public class REServerModClient implements ClientModInitializer {
|
||||||
|
|
||||||
modNetworkingClient.registerC2SPackets(); //Identifier unter denen der Client zuhoert werden registriert
|
modNetworkingClient.registerC2SPackets(); //Identifier unter denen der Client zuhoert werden registriert
|
||||||
|
|
||||||
LOGGER.info("Modchest successfully loaded!");
|
LOGGER.info("Modchest-Client successfully loaded!");
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,7 +9,7 @@ import net.minecraft.network.PacketByteBuf;
|
||||||
public class respawnRequestS2CPacket {
|
public class respawnRequestS2CPacket {
|
||||||
|
|
||||||
public static void receive(MinecraftClient minecraftClient, ClientPlayNetworkHandler clientPlayNetworkHandler, PacketByteBuf packetByteBuf, PacketSender packetSender) {
|
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();
|
minecraftClient.player.requestRespawn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,10 +11,12 @@ 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();
|
||||||
//initializer.itemsAndBlocks();
|
initializer.itemsAndBlocks();
|
||||||
initializer.events();
|
initializer.events();
|
||||||
initializer.networking();
|
initializer.networking();
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
@Mixin(BedBlock.class)
|
@Mixin(BedBlock.class)
|
||||||
public class bedBlock {
|
public class bedBlock {
|
||||||
|
@ -23,6 +24,35 @@ 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 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
|
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<? 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
|
||||||
|
@ -38,7 +68,7 @@ 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 (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
|
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) {
|
||||||
|
|
|
@ -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
|
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
|
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)));
|
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);
|
setAndGet.setMultiSpawn(player, 6);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
REServerMod.LOGGER.info("Sorry! Following error, trying to respawn player " + player.getDisplayName() + ": " + 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"));
|
player.sendMessage(Text.translatable("chat.modchest.multispawn.spawnnotset"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,12 +26,16 @@ public class setAndGetMultiButtonsSpawn {
|
||||||
fullArray[2] = (int) player.getZ();
|
fullArray[2] = (int) player.getZ();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
assert subNbt != null;
|
if (subNbt != null) {
|
||||||
subNbt.putIntArray(String.valueOf(spawn), fullArray); //speichert unseren array an der entsprechenden nummer ab
|
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
|
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
|
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) {
|
} 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"));
|
player.sendMessage(Text.translatable("chat.modchest.multispawn.spawnnotsaved"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,19 +123,21 @@ public class setAndGetMultiButtonsSpawn {
|
||||||
|
|
||||||
if (subNbt != null) {
|
if (subNbt != null) {
|
||||||
NbtCompound nbt = (NbtCompound) subNbt.get("vanillaSpawnData"); //hollt sich die daten
|
NbtCompound nbt = (NbtCompound) subNbt.get("vanillaSpawnData"); //hollt sich die daten
|
||||||
assert nbt != null;
|
if (nbt != null) {
|
||||||
if (!nbt.getBoolean("used")) {
|
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
|
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);
|
subNbt.put("vanillaSpawnData", nbt);
|
||||||
topNbt.put("multi_sleep", subNbt); //muss den bearbeiteten nbt wieder abgespeichert (nur der boolean wurde ueberschrieben)
|
topNbt.put("multi_sleep", subNbt); //muss den bearbeiteten nbt wieder abgespeichert (nur der boolean wurde ueberschrieben)
|
||||||
castedPlayer.setDataSaver(topNbt);
|
castedPlayer.setDataSaver(topNbt);
|
||||||
return nbt; //gibt den nbt-tag an die aufrufende Methode
|
return nbt; //gibt den nbt-tag an die aufrufende Methode
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setMultiSpawnBlank(ServerPlayerEntity player, int spawn) { //wird aufgerufen wenn das Bett dieses Spielers zerstoert wurde
|
public synchronized void setMultiSpawnBlank(ServerPlayerEntity player, int spawn) { //wird aufgerufen wenn das Bett dieses Spielers zerstoert wurde
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 453 B After Width: | Height: | Size: 85 KiB |
Binary file not shown.
After Width: | Height: | Size: 453 B |
Binary file not shown.
After Width: | Height: | Size: 85 KiB |
|
@ -16,7 +16,7 @@
|
||||||
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
"sources": "https://github.com/FabricMC/fabric-example-mod"
|
||||||
},
|
},
|
||||||
"license": "CC0-1.0",
|
"license": "CC0-1.0",
|
||||||
"icon": "assets/reservermod/icon.png",
|
"icon": "assets/modchest/icon.png",
|
||||||
"environment": "*",
|
"environment": "*",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
"main": [
|
"main": [
|
||||||
|
|
Loading…
Reference in New Issue