From 8bea55a8d24d3eec627fcc36a0cefb299f8acf0e Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 10 Aug 2021 14:39:34 +0300 Subject: [PATCH] Level biome source fix (WIP) --- src/main/java/ru/betterend/DataFixer.java | 21 +- .../mixin/common/MinecraftServerMixin.java | 9 +- .../mixin/common/PlayerListMixin.java | 332 ------------------ .../assets/betterend/lang/en_us.json | 2 +- .../assets/betterend/lang/ru_ru.json | 2 +- .../resources/betterend.mixins.common.json | 1 - 6 files changed, 27 insertions(+), 340 deletions(-) delete mode 100644 src/main/java/ru/betterend/mixin/common/PlayerListMixin.java diff --git a/src/main/java/ru/betterend/DataFixer.java b/src/main/java/ru/betterend/DataFixer.java index 075d68669..5c65717a4 100644 --- a/src/main/java/ru/betterend/DataFixer.java +++ b/src/main/java/ru/betterend/DataFixer.java @@ -1,7 +1,12 @@ package ru.betterend; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; import ru.bclib.api.datafixer.DataFixerAPI; import ru.bclib.api.datafixer.Patch; +import ru.bclib.api.datafixer.PatchFunction; + +import java.io.File; public class DataFixer { public static void register() { @@ -13,7 +18,21 @@ public static void register() { private static final class BetterEndPatch extends Patch { protected BetterEndPatch() { super(BetterEnd.MOD_ID, "0.11.0"); - System.out.println("BE Patch!"); } + + /*public PatchFunction getLevelDatPatcher() { + return (root, profile) -> { + CompoundTag dimensions = root.getCompound("Data").getCompound("WorldGenSettings").getCompound("dimensions"); + if (dimensions.contains("minecraft:the_end")) { + CompoundTag biomeSource = dimensions.getCompound("minecraft:the_end").getCompound("generator").getCompound("biome_source"); + if (!biomeSource.getString("type").equals("betterend:better_end_biome_source")) { + BetterEnd.LOGGER.info("Applying biome source patch"); + biomeSource.putString("type", "betterend:better_end_biome_source"); + return true; + } + } + return false; + }; + }*/ } } diff --git a/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java index 84575b1cf..398e2b16f 100644 --- a/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java @@ -61,16 +61,17 @@ private void be_createLevels(ChunkProgressListener worldGenerationProgressListen } @Shadow - private static void setInitialSpawn(ServerLevel serverLevel, ServerLevelData serverLevelData, boolean bl, boolean bl2) { - } - - ; + private static void setInitialSpawn(ServerLevel serverLevel, ServerLevelData serverLevelData, boolean bl, boolean bl2) {} @Inject(method = "setInitialSpawn", at = @At(value = "HEAD"), cancellable = true) private static void be_setInitialSpawn(ServerLevel world, ServerLevelData serverWorldProperties, boolean bonusChest, boolean debugWorld, CallbackInfo info) { if (GeneratorOptions.swapOverworldToEnd() && world.dimension() == Level.OVERWORLD) { info.cancel(); } + if (GeneratorOptions.changeSpawn() && world.dimension() == Level.END) { + world.setDefaultSpawnPos(GeneratorOptions.getSpawn(), 0F); + info.cancel(); + } } diff --git a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java deleted file mode 100644 index 127a750a8..000000000 --- a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java +++ /dev/null @@ -1,332 +0,0 @@ -package ru.betterend.mixin.common; - -import com.mojang.authlib.GameProfile; -import com.mojang.serialization.DataResult; -import com.mojang.serialization.Dynamic; -import io.netty.buffer.Unpooled; -import net.minecraft.ChatFormatting; -import net.minecraft.Util; -import net.minecraft.core.RegistryAccess; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.Tag; -import net.minecraft.network.Connection; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.chat.ChatType; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientboundChangeDifficultyPacket; -import net.minecraft.network.protocol.game.ClientboundCustomPayloadPacket; -import net.minecraft.network.protocol.game.ClientboundLoginPacket; -import net.minecraft.network.protocol.game.ClientboundPlayerAbilitiesPacket; -import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket; -import net.minecraft.network.protocol.game.ClientboundSetCarriedItemPacket; -import net.minecraft.network.protocol.game.ClientboundUpdateMobEffectPacket; -import net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket; -import net.minecraft.network.protocol.game.ClientboundUpdateTagsPacket; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.ServerScoreboard; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.server.network.ServerGamePacketListenerImpl; -import net.minecraft.server.players.GameProfileCache; -import net.minecraft.server.players.PlayerList; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.level.GameRules; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.biome.BiomeManager; -import net.minecraft.world.level.dimension.DimensionType; -import net.minecraft.world.level.storage.LevelData; -import org.apache.logging.log4j.Logger; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.betterend.world.generator.GeneratorOptions; - -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; - -@Mixin(PlayerList.class) -public class PlayerListMixin { - @Final - @Shadow - private static Logger LOGGER; - - @Final - @Shadow - private MinecraftServer server; - - @Final - @Shadow - private RegistryAccess.RegistryHolder registryHolder; - - @Shadow - private int viewDistance; - - @Final - @Shadow - private List players; - - @Final - @Shadow - private Map playersByUUID; - - @Inject(method = "placeNewPlayer", at = @At(value = "HEAD"), cancellable = true) - public void be_placeNewPlayer(Connection connection, ServerPlayer serverPlayer, CallbackInfo info) { - if (GeneratorOptions.swapOverworldToEnd()) { - GameProfile gameProfile = serverPlayer.getGameProfile(); - GameProfileCache userCache = this.server.getProfileCache(); - Optional gameProfile2 = userCache.get(gameProfile.getId()); - String string = gameProfile2.isPresent() ? gameProfile2.get().getName() : gameProfile.getName(); - userCache.add(gameProfile); - CompoundTag compoundTag = this.load(serverPlayer); - ResourceKey var23; - if (compoundTag != null) { - DataResult> var10000 = DimensionType.parseLegacy(new Dynamic( - NbtOps.INSTANCE, - compoundTag.get("Dimension") - )); - Logger var10001 = LOGGER; - Objects.requireNonNull(var10001); - var23 = (ResourceKey) var10000.resultOrPartial(var10001::error).orElse(Level.END); - } - else { - var23 = Level.END; - } - - ResourceKey registryKey = var23; - ServerLevel serverLevel = this.server.getLevel(registryKey); - ServerLevel serverLevel3; - if (serverLevel == null) { - LOGGER.warn("Unknown respawn dimension {}, defaulting to overworld", registryKey); - serverLevel3 = this.server.overworld(); - } - else { - serverLevel3 = serverLevel; - } - - serverPlayer.setLevel(serverLevel3); - //serverPlayer.gameMode.setLevel((ServerLevel) serverPlayer.level); - String string2 = "local"; - if (connection.getRemoteAddress() != null) { - string2 = connection.getRemoteAddress().toString(); - } - - LOGGER.info( - "{}[{}] logged in with entity id {} at ({}, {}, {})", - serverPlayer.getName().getString(), - string2, - serverPlayer.getId(), - serverPlayer.getX(), - serverPlayer.getY(), - serverPlayer.getZ() - ); - LevelData worldProperties = serverLevel3.getLevelData(); - serverPlayer.loadGameTypes(compoundTag); - //this.updatePlayerGameMode(serverPlayer, (ServerPlayer) null, serverLevel3); - ServerGamePacketListenerImpl serverPlayNetworkHandler = new ServerGamePacketListenerImpl( - this.server, - connection, - serverPlayer - ); - GameRules gameRules = serverLevel3.getGameRules(); - boolean bl = gameRules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN); - boolean bl2 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO); - serverPlayNetworkHandler.send(new ClientboundLoginPacket( - serverPlayer.getId(), - serverPlayer.gameMode.getGameModeForPlayer(), - serverPlayer.gameMode.getPreviousGameModeForPlayer(), - BiomeManager.obfuscateSeed(serverLevel3.getSeed()), - worldProperties.isHardcore(), - this.server.levelKeys(), - this.registryHolder, - serverLevel3.dimensionType(), - serverLevel3.dimension(), - this.getMaxPlayers(), - this.viewDistance, - bl2, - !bl, - serverLevel3.isDebug(), - serverLevel3.isFlat() - )); - serverPlayNetworkHandler.send(new ClientboundCustomPayloadPacket( - ClientboundCustomPayloadPacket.BRAND, - (new FriendlyByteBuf(Unpooled.buffer())).writeUtf(this.getServer().getServerModName()) - )); - serverPlayNetworkHandler.send(new ClientboundChangeDifficultyPacket( - worldProperties.getDifficulty(), - worldProperties.isDifficultyLocked() - )); - serverPlayNetworkHandler.send(new ClientboundPlayerAbilitiesPacket(serverPlayer.getAbilities())); - serverPlayNetworkHandler.send(new ClientboundSetCarriedItemPacket(serverPlayer.getInventory().selected)); - serverPlayNetworkHandler.send(new ClientboundUpdateRecipesPacket(this.server.getRecipeManager() - .getRecipes())); - serverPlayNetworkHandler.send(new ClientboundUpdateTagsPacket(this.server.getTags() - .serializeToNetwork(this.registryHolder))); - this.sendPlayerPermissionLevel(serverPlayer); - serverPlayer.getStats().markAllDirty(); - serverPlayer.getRecipeBook().sendInitialRecipeBook(serverPlayer); - this.updateEntireScoreboard(serverLevel3.getScoreboard(), serverPlayer); - this.server.invalidateStatus(); - TranslatableComponent mutableText2; - if (serverPlayer.getGameProfile().getName().equalsIgnoreCase(string)) { - mutableText2 = new TranslatableComponent( - "multiplayer.player.joined", - new Object[] {serverPlayer.getDisplayName()} - ); - } - else { - mutableText2 = new TranslatableComponent( - "multiplayer.player.joined.renamed", - new Object[] {serverPlayer.getDisplayName(), string} - ); - } - - this.broadcastMessage(mutableText2.withStyle(ChatFormatting.YELLOW), ChatType.SYSTEM, Util.NIL_UUID); - serverPlayNetworkHandler.teleport( - serverPlayer.getX(), - serverPlayer.getY(), - serverPlayer.getZ(), - serverPlayer.getYRot(), - serverPlayer.getXRot() - ); - this.players.add(serverPlayer); - this.playersByUUID.put(serverPlayer.getUUID(), serverPlayer); - this.broadcastAll(new ClientboundPlayerInfoPacket( - ClientboundPlayerInfoPacket.Action.ADD_PLAYER, - new ServerPlayer[] {serverPlayer} - )); - - for (ServerPlayer player : this.players) { - serverPlayer.connection.send(new ClientboundPlayerInfoPacket( - ClientboundPlayerInfoPacket.Action.ADD_PLAYER, - new ServerPlayer[] {(ServerPlayer) player} - )); - } - - serverLevel3.addNewPlayer(serverPlayer); - this.server.getCustomBossEvents().onPlayerConnect(serverPlayer); - this.sendLevelInfo(serverPlayer, serverLevel3); - if (!this.server.getResourcePack().isEmpty()) { - serverPlayer.sendTexturePack( - this.server.getResourcePack(), - this.server.getResourcePackHash(), - this.server.isResourcePackRequired(), - this.server.getResourcePackPrompt() - ); - } - - for (MobEffectInstance statusEffectInstance : serverPlayer.getActiveEffects()) { - serverPlayNetworkHandler.send(new ClientboundUpdateMobEffectPacket( - serverPlayer.getId(), - statusEffectInstance - )); - } - - if (compoundTag != null && compoundTag.contains("RootVehicle", 10)) { - CompoundTag compoundTag2 = compoundTag.getCompound("RootVehicle"); - Entity entity = EntityType.loadEntityRecursive( - compoundTag2.getCompound("Entity"), - serverLevel3, - (vehicle) -> { - return !serverLevel3.addWithUUID(vehicle) ? null : vehicle; - } - ); - if (entity != null) { - UUID uUID2; - if (compoundTag2.hasUUID("Attach")) { - uUID2 = compoundTag2.getUUID("Attach"); - } - else { - uUID2 = null; - } - - Iterator var21; - Entity entity3; - if (entity.getUUID().equals(uUID2)) { - serverPlayer.startRiding(entity, true); - } - else { - var21 = entity.getIndirectPassengers().iterator(); - - while (var21.hasNext()) { - entity3 = (Entity) var21.next(); - if (entity3.getUUID().equals(uUID2)) { - serverPlayer.startRiding(entity3, true); - break; - } - } - } - - if (!serverPlayer.isPassenger()) { - LOGGER.warn("Couldn't reattach entity to player"); - entity.discard(); - var21 = entity.getIndirectPassengers().iterator(); - - while (var21.hasNext()) { - entity3 = (Entity) var21.next(); - entity3.discard(); - } - } - } - } - - serverPlayer.initInventoryMenu(); - info.cancel(); - } - } - - @Shadow - public CompoundTag load(ServerPlayer player) { - return null; - } - - // @Shadow - // private void updatePlayerGameMode(ServerPlayer player, @Nullable ServerPlayer oldPlayer, ServerLevel world) {} - - @Shadow - public void sendPlayerPermissionLevel(ServerPlayer player) { - } - - @Shadow - public int getPlayerCount() { - return 0; - } - - @Shadow - public int getMaxPlayers() { - return 0; - } - - @Shadow - public MinecraftServer getServer() { - return null; - } - - @Shadow - protected void updateEntireScoreboard(ServerScoreboard scoreboard, ServerPlayer player) { - } - - @Shadow - public void broadcastMessage(Component message, ChatType type, UUID senderUuid) { - } - - @Shadow - public void broadcastAll(Packet packet) { - } - - @Shadow - public void sendLevelInfo(ServerPlayer player, ServerLevel world) { - } -} diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 2e696d839..7002e595f 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -125,7 +125,7 @@ "block.betterend.dense_vine": "Dense Vine", "block.betterend.bubble_coral": "Bubble Coral", "block.betterend.aurora_crystal": "Aurora Crystal", - "item.betterend.crystal_shards": "Crystal Shards", + "item.betterend.crystal_shards": "Aurora Crystal Shards", "block.betterend.pythadendron_sapling": "Pythadendron Sapling", "block.betterend.pythadendron_bark": "Pythadendron Bark", diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index 43781a2dc..3f730d210 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -125,7 +125,7 @@ "block.betterend.dense_vine": "Плотная лоза", "block.betterend.bubble_coral": "Пузырчатый коралл", "block.betterend.aurora_crystal": "Кристалл авроры", - "item.betterend.crystal_shards": "Осколки кристаллов", + "item.betterend.crystal_shards": "Осколки кристаллов авроры", "block.betterend.pythadendron_sapling": "Саженец пифадендрона", "block.betterend.pythadendron_bark": "Кора пифадендрона", diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index d53b45181..1ef473e59 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -26,7 +26,6 @@ "ServerPlayerMixin", "SpikeFeatureMixin", "ServerLevelMixin", - "PlayerListMixin", "AnvilMenuMixin", "EnderManMixin", "EndSpikeMixin",