checking destroyed bed improved
Wenn das bett zerstört wird, wird ggf. die abzugleichende Koordinate ans kopfende verschoben
This commit is contained in:
parent
49b67c2355
commit
527ea812db
|
@ -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<? extends PlayerEntity> 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], 2) && inRange(pos.getY(), posXYZ[1], 2) && inRange(pos.getZ(), posXYZ[2], 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]) { //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) {
|
||||
|
|
|
@ -119,19 +119,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
|
||||
|
|
Loading…
Reference in New Issue