]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/commitdiff
Setup for 1.16.3 Fabric
authorIrtimaled <irtimaled@gmail.com>
Sat, 6 Jun 2020 08:12:12 +0000 (01:12 -0700)
committerIrtimaled <irtimaled@gmail.com>
Tue, 13 Oct 2020 07:09:06 +0000 (00:09 -0700)
61 files changed:
build.gradle
gradle.properties
src/main/java/com/irtimaled/bbor/client/Player.java
src/main/java/com/irtimaled/bbor/client/commands/Arguments.java
src/main/java/com/irtimaled/bbor/client/commands/ConfigCommand.java
src/main/java/com/irtimaled/bbor/client/commands/CustomCommand.java
src/main/java/com/irtimaled/bbor/client/commands/SeedCommand.java
src/main/java/com/irtimaled/bbor/client/commands/SpawningSphereCommand.java
src/main/java/com/irtimaled/bbor/client/commands/StructuresCommand.java
src/main/java/com/irtimaled/bbor/client/gui/AbstractControl.java
src/main/java/com/irtimaled/bbor/client/gui/AbstractSlider.java
src/main/java/com/irtimaled/bbor/client/gui/BoolButton.java
src/main/java/com/irtimaled/bbor/client/gui/BoundingBoxTypeButton.java
src/main/java/com/irtimaled/bbor/client/gui/ControlList.java
src/main/java/com/irtimaled/bbor/client/gui/ControlListSection.java
src/main/java/com/irtimaled/bbor/client/gui/IControl.java
src/main/java/com/irtimaled/bbor/client/gui/IntSettingSlider.java
src/main/java/com/irtimaled/bbor/client/gui/ListScreen.java
src/main/java/com/irtimaled/bbor/client/gui/LoadSavesScreen.java
src/main/java/com/irtimaled/bbor/client/gui/SearchField.java
src/main/java/com/irtimaled/bbor/client/gui/SelectableControlList.java
src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java
src/main/java/com/irtimaled/bbor/client/gui/WorldSaveRow.java
src/main/java/com/irtimaled/bbor/client/interop/BedrockCeilingHelper.java
src/main/java/com/irtimaled/bbor/client/interop/BiomeBorderHelper.java
src/main/java/com/irtimaled/bbor/client/interop/ClientInterop.java
src/main/java/com/irtimaled/bbor/client/interop/FlowerForestHelper.java
src/main/java/com/irtimaled/bbor/client/interop/ModPackFinder.java [deleted file]
src/main/java/com/irtimaled/bbor/client/interop/NBTStructureLoader.java
src/main/java/com/irtimaled/bbor/client/interop/SaveGameStructureLoader.java
src/main/java/com/irtimaled/bbor/client/interop/SpawnableBlocksHelper.java
src/main/java/com/irtimaled/bbor/client/interop/SpawningSphereHelper.java
src/main/java/com/irtimaled/bbor/client/keyboard/CustomKeyBinding.java
src/main/java/com/irtimaled/bbor/client/keyboard/Key.java
src/main/java/com/irtimaled/bbor/client/keyboard/KeyListener.java
src/main/java/com/irtimaled/bbor/client/providers/FlowerForestProvider.java
src/main/java/com/irtimaled/bbor/client/providers/SlimeChunkProvider.java
src/main/java/com/irtimaled/bbor/client/renderers/AbstractRenderer.java
src/main/java/com/irtimaled/bbor/client/renderers/RenderHelper.java
src/main/java/com/irtimaled/bbor/common/BoundingBoxType.java
src/main/java/com/irtimaled/bbor/common/ReflectionHelper.java
src/main/java/com/irtimaled/bbor/common/StructureProcessor.java
src/main/java/com/irtimaled/bbor/common/events/StructuresLoaded.java
src/main/java/com/irtimaled/bbor/common/events/WorldLoaded.java
src/main/java/com/irtimaled/bbor/common/interop/CommonInterop.java
src/main/java/com/irtimaled/bbor/common/messages/AddBoundingBox.java
src/main/java/com/irtimaled/bbor/common/messages/PayloadBuilder.java
src/main/java/com/irtimaled/bbor/common/messages/PayloadReader.java
src/main/java/com/irtimaled/bbor/common/models/DimensionId.java
src/main/java/com/irtimaled/bbor/common/models/ServerPlayer.java
src/main/java/com/irtimaled/bbor/mixin/client/MixinMinecraft.java
src/main/java/com/irtimaled/bbor/mixin/client/gui/screen/MixinOptionsScreen.java
src/main/java/com/irtimaled/bbor/mixin/client/renderer/MixinGameRenderer.java
src/main/java/com/irtimaled/bbor/mixin/network/play/client/MixinCCustomPayloadPacket.java
src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSChatPacket.java
src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSChunkDataPacket.java
src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSCommandListPacket.java
src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSCustomPayloadPlayPacket.java
src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSSpawnPositionPacket.java
src/main/java/com/irtimaled/bbor/mixin/resource/MixinResourcePackManager.java [new file with mode: 0644]
src/main/resources/mixins.bbor.json

index e8e912f083cc7125018cdacf2b6da7665ff180a5..095cb593d8c3653b96c7da1f8bdd485cfcb50223 100644 (file)
@@ -24,8 +24,8 @@ targetCompatibility = 1.8
 
 dependencies {
     minecraft 'com.mojang:minecraft:' + project.mcVersion
-    mappings 'net.fabricmc:yarn:' + project.mcVersion + '+build.9'
-    modCompile 'net.fabricmc:fabric-loader:0.8.3+build.196'
+    mappings 'net.fabricmc:yarn:' + project.mcVersion + '+build.27'
+    modCompile 'net.fabricmc:fabric-loader:0.9.3+build.207'
 }
 
 minecraft {
index a6f2081d4e7a96773f4f404a781d7e78c687e3ef..dc62e0be62a928b38523812ded22138d6f32d752 100644 (file)
@@ -1,4 +1,4 @@
 name=bbor
 buildVersion=2.4
 # leave a space to reduce merge conflicts on version change
-mcVersion=1.15.2
+mcVersion=1.16.3
index f468be0c4d4a4a8359783b24e779805b9e682d91..3f55634026ea6f923ead3ede401dda334fa1dbd0 100644 (file)
@@ -16,7 +16,7 @@ public class Player {
         x = player.prevX + (player.getX() - player.prevX) * partialTicks;
         y = player.prevY + (player.getY() - player.prevY) * partialTicks;
         z = player.prevZ + (player.getZ() - player.prevZ) * partialTicks;
-        dimensionId = DimensionId.from(player.dimension);
+        dimensionId = DimensionId.from(player.getEntityWorld().getRegistryKey());
     }
 
     static void setActiveY() {
index a130504d885f20965b472551688a40cbe9fce353..737b2edaee531ee28920570b649350b2a7bc36ca 100644 (file)
@@ -6,8 +6,8 @@ import com.irtimaled.bbor.common.models.Coords;
 import com.mojang.brigadier.arguments.*;
 import com.mojang.brigadier.context.CommandContext;
 import com.mojang.brigadier.exceptions.CommandSyntaxException;
-import net.minecraft.command.arguments.BlockPosArgumentType;
-import net.minecraft.command.arguments.Vec3ArgumentType;
+import net.minecraft.command.argument.BlockPosArgumentType;
+import net.minecraft.command.argument.Vec3ArgumentType;
 import net.minecraft.server.command.ServerCommandSource;
 
 import java.util.function.Supplier;
index cca87cf59796b39317db9d536c1cd3b45cd2fede..6927887c3bdd178f06d806ac68e3ff8fcf286207 100644 (file)
@@ -8,8 +8,8 @@ import com.mojang.brigadier.Command;
 import com.mojang.brigadier.CommandDispatcher;
 import com.mojang.brigadier.arguments.ArgumentType;
 import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import net.minecraft.command.CommandSource;
 import net.minecraft.server.command.CommandManager;
-import net.minecraft.server.command.CommandSource;
 import net.minecraft.server.command.ServerCommandSource;
 
 import java.util.function.Function;
index 4b1a137319d54c426f5167b7084fcc630726431c..59a94937d4b993b2bd9e253902a7d26fd946689d 100644 (file)
@@ -6,8 +6,8 @@ import com.irtimaled.bbor.client.providers.CustomLineProvider;
 import com.irtimaled.bbor.client.providers.CustomSphereProvider;
 import com.mojang.brigadier.CommandDispatcher;
 import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import net.minecraft.command.CommandSource;
 import net.minecraft.server.command.CommandManager;
-import net.minecraft.server.command.CommandSource;
 
 public class CustomCommand {
     private static final String COMMAND = "bbor:custom";
index e2e56aca759aeb912102b3610898f7a54328baf7..f9b1350437ddadb0de15542993cc789a2c0d430f 100644 (file)
@@ -3,8 +3,8 @@ package com.irtimaled.bbor.client.commands;
 import com.irtimaled.bbor.client.providers.SlimeChunkProvider;
 import com.mojang.brigadier.CommandDispatcher;
 import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import net.minecraft.command.CommandSource;
 import net.minecraft.server.command.CommandManager;
-import net.minecraft.server.command.CommandSource;
 
 public class SeedCommand {
     private static final String COMMAND = "bbor:seed";
index 88725956a1c005b0eed15ffac749522804837299..cd7bfdd7231f539abb92853c304218777b35c67c 100644 (file)
@@ -7,8 +7,8 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
 import com.mojang.brigadier.context.CommandContext;
 import com.mojang.brigadier.exceptions.CommandSyntaxException;
 import net.minecraft.client.MinecraftClient;
+import net.minecraft.command.CommandSource;
 import net.minecraft.server.command.CommandManager;
-import net.minecraft.server.command.CommandSource;
 import net.minecraft.server.command.ServerCommandSource;
 import net.minecraft.world.LightType;
 import net.minecraft.world.World;
index b6f795a913d86f8d517190e4a92b65da1732d234..160253e0e110106c86cceb3c087c3cf3775d8fd3 100644 (file)
@@ -4,8 +4,8 @@ import com.irtimaled.bbor.client.gui.LoadSavesScreen;
 import com.irtimaled.bbor.client.interop.ClientInterop;
 import com.mojang.brigadier.CommandDispatcher;
 import com.mojang.brigadier.builder.LiteralArgumentBuilder;
+import net.minecraft.command.CommandSource;
 import net.minecraft.server.command.CommandManager;
-import net.minecraft.server.command.CommandSource;
 
 public class StructuresCommand {
     private static final String COMMAND = "bbor:structures";
index da9de112d30d2275d1b43bcf02c92386898b22f8..01db585e620dea0f11533aaa0a9ec7510188cd46 100644 (file)
@@ -2,6 +2,8 @@ package com.irtimaled.bbor.client.gui;
 
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.widget.AbstractButtonWidget;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.text.LiteralText;
 
 import java.awt.*;
 
@@ -10,13 +12,13 @@ abstract class AbstractControl extends AbstractButtonWidget implements IControl
     protected final MinecraftClient minecraft;
 
     AbstractControl(int x, int y, int width, String name) {
-        super(x, y, width, 20, name);
+        super(x, y, width, 20, new LiteralText(name));
         this.minecraft = MinecraftClient.getInstance();
     }
 
     @Override
-    public void render(int mouseX, int mouseY) {
-        super.render(mouseX, mouseY, 0f);
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY) {
+        super.render(matrixStack, mouseX, mouseY, 0f);
     }
 
     public void setX(int x) {
@@ -36,11 +38,11 @@ abstract class AbstractControl extends AbstractButtonWidget implements IControl
     }
 
     @Override
-    protected void renderBg(MinecraftClient minecraft, int mouseX, int mouseY) {
-        if (active) renderBackground(mouseX, mouseY);
+    protected void renderBg(MatrixStack matrixStack, MinecraftClient minecraft, int mouseX, int mouseY) {
+        if (active) renderBackground(matrixStack, mouseX, mouseY);
     }
 
-    protected void renderBackground(int mouseX, int mouseY) {
+    protected void renderBackground(MatrixStack matrixStack, int mouseX, int mouseY) {
     }
 
     @Override
@@ -49,14 +51,14 @@ abstract class AbstractControl extends AbstractButtonWidget implements IControl
     }
 
     public void filter(String lowerValue) {
-        String lowerString = this.getMessage().toLowerCase();
+        String lowerString = this.getMessage().asString().toLowerCase();
         this.visible = lowerValue.equals("") ||
                 lowerString.startsWith(lowerValue) ||
                 lowerString.contains(" " + lowerValue);
     }
 
-    void drawRectangle(int left, int top, int right, int bottom, Color color) {
-        fill(left, top, right, bottom, color.getRGB());
+    void drawRectangle(MatrixStack matrixStack, int left, int top, int right, int bottom, Color color) {
+        fill(matrixStack, left, top, right, bottom, color.getRGB());
     }
 
     @Override
index 1ec236cfca49fce09da6060ac2b5df7b4fefe01f..f527fef67197ebab501c4870a6b8a0ecfe373ae1 100644 (file)
@@ -3,6 +3,7 @@ package com.irtimaled.bbor.client.gui;
 import com.irtimaled.bbor.common.MathHelper;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.sound.SoundManager;
+import net.minecraft.client.util.math.MatrixStack;
 
 abstract class AbstractSlider extends AbstractControl {
     private final int optionCount;
@@ -16,11 +17,11 @@ abstract class AbstractSlider extends AbstractControl {
     }
 
     @Override
-    protected void renderBackground(int mouseX, int mouseY) {
+    protected void renderBackground(MatrixStack matrixStack, int mouseX, int mouseY) {
         this.minecraft.getTextureManager().bindTexture(WIDGETS_LOCATION);
         int hoverState = super.getYImage(this.isHovered());
-        this.blit(this.x + (int) getProgressPercentage(), this.y, 0, 46 + hoverState * 20, 4, this.height);
-        this.blit(this.x + (int) getProgressPercentage() + 4, this.y, 196, 46 + hoverState * 20, 4, 20);
+        this.drawTexture(matrixStack, this.x + (int) getProgressPercentage(), this.y, 0, 46 + hoverState * 20, 4, this.height);
+        this.drawTexture(matrixStack, this.x + (int) getProgressPercentage() + 4, this.y, 196, 46 + hoverState * 20, 4, 20);
     }
 
     private double getProgressPercentage() {
index f7a0ab14041630b36e7306325f0cdb549c034eb7..edb1d87dd90cfd4876fa589e2cafc1ca1bea6bbd 100644 (file)
@@ -2,6 +2,7 @@ package com.irtimaled.bbor.client.gui;
 
 import com.irtimaled.bbor.client.config.ColorHelper;
 import com.irtimaled.bbor.client.config.ConfigManager;
+import net.minecraft.client.util.math.MatrixStack;
 
 public abstract class BoolButton extends AbstractButton {
     BoolButton(int width, String label, boolean enabled) {
@@ -15,13 +16,13 @@ public abstract class BoolButton extends AbstractButton {
     protected abstract boolean getValue();
 
     @Override
-    protected void renderBackground(int mouseX, int mouseY) {
+    protected void renderBackground(MatrixStack matrixStack, int mouseX, int mouseY) {
         int left = this.x + 1;
         int top = this.y + 1;
         int right = left + this.width - 2;
         int bottom = top + this.height - 2;
         if (this.getValue()) {
-            drawRectangle(left, top, right, bottom, ColorHelper.getColor(ConfigManager.buttonOnOverlay));
+            drawRectangle(matrixStack, left, top, right, bottom, ColorHelper.getColor(ConfigManager.buttonOnOverlay));
         }
     }
 }
index 8b08dd4462d2aa65bcfc24652d72a31fed907907..bcff9e2d336e321357e69fbdf5512b8a4bdcf912 100644 (file)
@@ -2,6 +2,7 @@ package com.irtimaled.bbor.client.gui;
 
 import com.irtimaled.bbor.client.config.BoundingBoxTypeHelper;
 import com.irtimaled.bbor.common.BoundingBoxType;
+import net.minecraft.client.util.math.MatrixStack;
 
 import java.awt.*;
 
@@ -14,8 +15,8 @@ public class BoundingBoxTypeButton extends BoolSettingButton {
     }
 
     @Override
-    protected void renderBackground(int mouseX, int mouseY) {
-        super.renderBackground(mouseX, mouseY);
+    protected void renderBackground(MatrixStack matrixStack, int mouseX, int mouseY) {
+        super.renderBackground(matrixStack, mouseX, mouseY);
 
         int left = x + 1;
         int top = y + 1;
@@ -25,17 +26,17 @@ public class BoundingBoxTypeButton extends BoolSettingButton {
         Color color = BoundingBoxTypeHelper.getColor(type);
 
         // top & left
-        drawRectangle(left, top, right, top + 1, color);
-        drawRectangle(left, top, left + 1, bottom, color);
+        drawRectangle(matrixStack, left, top, right, top + 1, color);
+        drawRectangle(matrixStack, left, top, left + 1, bottom, color);
 
         Color darker = color.darker();
         // bottom left & top right
-        drawRectangle(left, bottom - 2, left + 1, bottom, darker);
-        drawRectangle(right - 1, top, right, top + 1, darker);
+        drawRectangle(matrixStack, left, bottom - 2, left + 1, bottom, darker);
+        drawRectangle(matrixStack, right - 1, top, right, top + 1, darker);
 
         Color darkest = darker.darker();
         // bottom & right
-        drawRectangle(left + 1, bottom - 2, right, bottom, darkest);
-        drawRectangle(right - 1, top + 1, right, bottom, darkest);
+        drawRectangle(matrixStack, left + 1, bottom - 2, right, bottom, darkest);
+        drawRectangle(matrixStack, right - 1, top + 1, right, bottom, darkest);
     }
 }
index 9331c63998ded6ab70e5a37adfa563bd6afbd010..80554db10d5027a701ad8ff21d6f0ff5958b0615 100644 (file)
@@ -5,6 +5,7 @@ import com.irtimaled.bbor.client.renderers.Renderer;
 import com.irtimaled.bbor.common.MathHelper;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
+import net.minecraft.client.util.math.MatrixStack;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -152,7 +153,7 @@ public class ControlList extends DrawableHelper implements IControlSet {
         return true;
     }
 
-    public void render(int mouseX, int mouseY) {
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY) {
         this.amountScrolled = MathHelper.clamp(this.amountScrolled, 0.0D, this.getMaxScroll());
 
         RenderHelper.disableLighting();
@@ -161,11 +162,15 @@ public class ControlList extends DrawableHelper implements IControlSet {
 
         int listTop = this.top + PADDING - (int) this.amountScrolled;
 
-        drawEntries(mouseX, mouseY, listTop);
+        drawEntries(matrixStack, mouseX, mouseY, listTop);
+
+        RenderHelper.enableDepthTest();
+        RenderHelper.depthFuncAlways();
 
-        RenderHelper.disableDepthTest();
         this.overlayBackground(0, this.top);
         this.overlayBackground(this.bottom, this.height);
+        RenderHelper.depthFuncLessEqual();
+        RenderHelper.disableDepthTest();
         RenderHelper.enableBlend();
         RenderHelper.blendFuncGui();
         RenderHelper.disableAlphaTest();
@@ -185,7 +190,7 @@ public class ControlList extends DrawableHelper implements IControlSet {
     }
 
     private void drawListBackground() {
-        this.minecraft.getTextureManager().bindTexture(DrawableHelper.BACKGROUND_LOCATION);
+        this.minecraft.getTextureManager().bindTexture(DrawableHelper.OPTIONS_BACKGROUND_TEXTURE);
         Renderer.startTextured()
                 .setColor(32, 32, 32)
                 .setAlpha(255)
@@ -196,7 +201,7 @@ public class ControlList extends DrawableHelper implements IControlSet {
                 .render();
     }
 
-    private void drawEntries(int mouseX, int mouseY, int top) {
+    private void drawEntries(MatrixStack matrixStack, int mouseX, int mouseY, int top) {
         for (ControlListEntry entry : this.entries) {
             if (!entry.isVisible()) continue;
 
@@ -204,24 +209,27 @@ public class ControlList extends DrawableHelper implements IControlSet {
             entry.setY(top);
 
             int height = entry.getControlHeight();
-            drawEntry(mouseX, mouseY, top, entry, height);
-            top += height;
+            int bottom = top + height;
+            if(top <= this.bottom && bottom >= this.top) {
+                drawEntry(matrixStack, mouseX, mouseY, top, entry, height);
+            }
+            top = bottom;
         }
     }
 
-    protected void drawEntry(int mouseX, int mouseY, int top, ControlListEntry entry, int height) {
-        entry.render(mouseX, mouseY);
+    protected void drawEntry(MatrixStack matrixStack, int mouseX, int mouseY, int top, ControlListEntry entry, int height) {
+        entry.render(matrixStack, mouseX, mouseY);
     }
 
     private void overlayBackground(int top, int bottom) {
-        this.minecraft.getTextureManager().bindTexture(DrawableHelper.BACKGROUND_LOCATION);
+        this.minecraft.getTextureManager().bindTexture(DrawableHelper.OPTIONS_BACKGROUND_TEXTURE);
         Renderer.startTextured()
                 .setColor(64, 64, 64)
                 .setAlpha(255)
-                .addPoint(0, bottom, 0.0D, 0.0D, (float) bottom / 32.0F)
-                .addPoint(this.width, bottom, 0.0D, (float) this.width / 32.0F, (float) bottom / 32.0F)
-                .addPoint(this.width, top, 0.0D, (float) this.width / 32.0F, (float) top / 32.0F)
-                .addPoint(0, top, 0.0D, 0.0D, (float) top / 32.0F)
+                .addPoint(0, bottom, -100.0D, 0.0D, (float) bottom / 32.0F)
+                .addPoint(this.width, bottom, -100.0D, (float) this.width / 32.0F, (float) bottom / 32.0F)
+                .addPoint(this.width, top, -100.0D, (float) this.width / 32.0F, (float) top / 32.0F)
+                .addPoint(0, top, -100.0D, 0.0D, (float) top / 32.0F)
                 .render();
     }
 
index 9e90ade2ece84c6d748c43b5647ab15c17bb9866..9cab24f5e138ec093edfbac22d3d7b722cfd452c 100644 (file)
@@ -1,6 +1,7 @@
 package com.irtimaled.bbor.client.gui;
 
 import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.util.math.MatrixStack;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -47,12 +48,12 @@ public class ControlListSection extends ControlListEntry implements IControlSet
     }
 
     @Override
-    public void render(int mouseX, int mouseY) {
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY) {
         int x = this.getX();
         int y = this.getY();
         int top = y;
         if (this.title != null) {
-            this.minecraft.textRenderer.draw(this.title, x + 4, y + ((TITLE_HEIGHT - this.minecraft.textRenderer.fontHeight) / 1.5f), 16777215);
+            this.minecraft.textRenderer.draw(matrixStack, this.title, x + 4, y + ((TITLE_HEIGHT - this.minecraft.textRenderer.fontHeight) / 1.5f), 16777215);
             top += titleHeight;
         }
 
@@ -63,7 +64,7 @@ public class ControlListSection extends ControlListEntry implements IControlSet
 
             control.setX(left + x);
             control.setY(top);
-            control.render(mouseX, mouseY);
+            control.render(matrixStack, mouseX, mouseY);
             if (left == 0) {
                 height = control.getControlHeight();
             }
index dd9c8de742a5cdcd430b6ee95b35d1bd9227934a..5cb40aac67e0f152ba980aa70506c31ee86db1af 100644 (file)
@@ -1,9 +1,10 @@
 package com.irtimaled.bbor.client.gui;
 
 import net.minecraft.client.gui.Element;
+import net.minecraft.client.util.math.MatrixStack;
 
 interface IControl extends IFocusableControl, Element {
-    void render(int mouseX, int mouseY);
+    void render(MatrixStack matrixStack, int mouseX, int mouseY);
 
     boolean isVisible();
 }
index 36548cbf8827c2cd9cd5ec0c25850707599e6e20..a5f73b5f43ea2c72693e383bd71cecf9595f9084 100644 (file)
@@ -2,6 +2,7 @@ package com.irtimaled.bbor.client.gui;
 
 import com.irtimaled.bbor.client.config.Setting;
 import net.minecraft.client.resource.language.I18n;
+import net.minecraft.text.LiteralText;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -40,7 +41,7 @@ class IntSettingSlider extends AbstractSlider {
 
     private void updateText() {
         Integer value = setting.get();
-        this.setMessage(I18n.translate(format, displayValues.getOrDefault(value, value.toString())));
+        this.setMessage(new LiteralText(I18n.translate(format, displayValues.getOrDefault(value, value.toString()))));
     }
 
     @Override
index ea1ab200e608996fd8e2724f545548cab18cac33..9655563bcab7f6c838938ffb6c047c6290e0e6a2 100644 (file)
@@ -5,6 +5,7 @@ import com.irtimaled.bbor.client.interop.ClientInterop;
 import net.minecraft.client.gui.Element;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.resource.language.I18n;
+import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.text.LiteralText;
 
 public abstract class ListScreen extends Screen {
@@ -31,7 +32,7 @@ public abstract class ListScreen extends Screen {
     @Override
     protected void init() {
         this.controlList = this.buildList(48, this.height - 28);
-        this.searchField = new SearchField(this.font, this.width / 2 - 100, 22, 200, 20, this.controlList);
+        this.searchField = new SearchField(this.textRenderer, this.width / 2 - 100, 22, 200, 20, this.controlList);
         this.doneButton = new AbstractButton(this.width / 2 - 100, this.height - 24, 200, I18n.translate("gui.done")) {
             @Override
             public void onPressed() {
@@ -47,20 +48,20 @@ public abstract class ListScreen extends Screen {
     protected abstract ControlList buildList(int top, int bottom);
 
     @Override
-    public void render(int mouseX, int mouseY, float unknown) {
-        render(mouseX, mouseY);
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float unknown) {
+        render(matrixStack, mouseX, mouseY);
     }
 
-    protected void render(int mouseX, int mouseY) {
-        this.controlList.render(mouseX, mouseY);
+    protected void render(MatrixStack matrixStack, int mouseX, int mouseY) {
+        this.controlList.render(matrixStack, mouseX, mouseY);
 
-        this.drawCenteredString(this.font, this.title.asString(), this.width / 2, 8, 16777215);
-        this.searchField.render(mouseX, mouseY);
-        this.doneButton.render(mouseX, mouseY);
+        this.drawCenteredString(matrixStack, this.textRenderer, this.title.asString(), this.width / 2, 8, 16777215);
+        this.searchField.render(matrixStack, mouseX, mouseY);
+        this.doneButton.render(matrixStack, mouseX, mouseY);
 
-        int left = this.width - this.font.getStringWidth(version) - 2;
+        int left = this.width - this.textRenderer.getWidth(version) - 2;
         int top = this.height - 10;
-        this.drawString(this.font, version, left, top, -10658467);
+        this.drawStringWithShadow(matrixStack, this.textRenderer, version, left, top, -10658467);
     }
 
     @Override
index c44fd9466510ba1211b5163bdfcaa391bf0cfd84..7198838a7fac703e38bfd06a52430e351c3e3bff 100644 (file)
@@ -1,6 +1,7 @@
 package com.irtimaled.bbor.client.gui;
 
 import com.irtimaled.bbor.client.interop.ClientInterop;
+import net.minecraft.client.util.math.MatrixStack;
 import net.minecraft.world.level.storage.LevelStorage;
 import net.minecraft.world.level.storage.LevelStorageException;
 import net.minecraft.world.level.storage.LevelSummary;
@@ -18,7 +19,7 @@ public class LoadSavesScreen extends ListScreen {
     protected ControlList buildList(int top, int bottom) {
         controlList = new SelectableControlList(this.width, this.height, top, bottom);
         try {
-            final LevelStorage saveLoader = this.minecraft.getLevelStorage();
+            final LevelStorage saveLoader = this.client.getLevelStorage();
             List<LevelSummary> saveList = saveLoader.getLevelList();
             saveList.sort(null);
             saveList.forEach(world -> controlList.add(new WorldSaveRow(world, saveLoader, controlList::setSelectedEntry)));
@@ -34,10 +35,10 @@ public class LoadSavesScreen extends ListScreen {
     }
 
     @Override
-    public void render(int mouseX, int mouseY, float unknown) {
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float unknown) {
         ControlListEntry selectedEntry = getSelectedEntry();
         this.setCanExit(selectedEntry != null && selectedEntry.isVisible());
-        super.render(mouseX, mouseY, unknown);
+        super.render(matrixStack, mouseX, mouseY, unknown);
     }
 
     private ControlListEntry getSelectedEntry() {
index 272e6dd3769ebf54de63aa63e913fafaf3105b94..402bea9f5f38affdfe3641485de2476fbd71019a 100644 (file)
@@ -2,16 +2,18 @@ package com.irtimaled.bbor.client.gui;
 
 import net.minecraft.client.font.TextRenderer;
 import net.minecraft.client.gui.widget.TextFieldWidget;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.text.LiteralText;
 
 public class SearchField extends TextFieldWidget implements IControl {
     private final ControlList controlList;
 
     SearchField(TextRenderer fontRenderer, int left, int top, int width, int height, ControlList controlList) {
-        super(fontRenderer, left, top, width, height, "");
+        super(fontRenderer, left, top, width, height, new LiteralText(""));
 
         this.controlList = controlList;
         this.setChangedListener(text -> this.controlList.filter(removeLeadingSpaces(text.toLowerCase())));
-        this.setRenderTextProvider((text, id) -> removeLeadingSpaces(text));
+        this.setRenderTextProvider((text, id) -> new LiteralText(removeLeadingSpaces(text)).asOrderedText());
         this.setFocused(true);
     }
 
@@ -20,8 +22,8 @@ public class SearchField extends TextFieldWidget implements IControl {
     }
 
     @Override
-    public void render(int mouseX, int mouseY) {
-        this.render(mouseX, mouseY, 0f);
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY) {
+        this.render(matrixStack, mouseX, mouseY, 0f);
     }
 
     @Override
index c202c91dc7e9e8e6f02ed9de7fa8e0a4867c18e9..0b8fe01387559c2f3c8bd9df9c6c5ed88e83b1dc 100644 (file)
@@ -2,6 +2,7 @@ package com.irtimaled.bbor.client.gui;
 
 import com.irtimaled.bbor.client.renderers.RenderHelper;
 import com.irtimaled.bbor.client.renderers.Renderer;
+import net.minecraft.client.util.math.MatrixStack;
 
 public class SelectableControlList extends ControlList {
     private final int listRight;
@@ -79,7 +80,7 @@ public class SelectableControlList extends ControlList {
     }
 
     @Override
-    protected void drawEntry(int mouseX, int mouseY, int top, ControlListEntry entry, int height) {
+    protected void drawEntry(MatrixStack matrixStack, int mouseX, int mouseY, int top, ControlListEntry entry, int height) {
         if (this.selectedElement == entry.index) {
             RenderHelper.disableTexture();
             int color = this.isFocused ? 255 : 128;
@@ -98,7 +99,7 @@ public class SelectableControlList extends ControlList {
                     .render();
             RenderHelper.enableTexture();
         }
-        super.drawEntry(mouseX, mouseY, top, entry, height);
+        super.drawEntry(matrixStack, mouseX, mouseY, top, entry, height);
     }
 
     @Override
index 958194c71e63b24dae6b18fd5d7913a64055739f..27b7dafe90b8558fa58c24e138b435a66ee46cc6 100644 (file)
@@ -31,11 +31,11 @@ public class SettingsScreen extends ListScreen {
     protected ControlList buildList(int top, int bottom) {
         String version = SharedConstants.getGameVersion().getName();
         ControlList controlList = new ControlList(this.width, this.height, top, bottom);
-        if (this.minecraft.world != null) controlList.setTransparentBackground();
+        if (this.client.world != null) controlList.setTransparentBackground();
 
         controlList
                 .section(null,
-                        width -> new BoolButton(width, I18n.translate("bbor.options.active"), this.minecraft.world != null) {
+                        width -> new BoolButton(width, I18n.translate("bbor.options.active"), this.client.world != null) {
                             @Override
                             public void onPressed() {
                                 ClientRenderer.toggleActive();
index 3d88eccc4b72ce04834f91c15c01db986fe3999d..3c8aca227e191840dd12cfa5ab7f0bb5c851e2c1 100644 (file)
@@ -7,9 +7,11 @@ import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.DrawableHelper;
 import net.minecraft.client.texture.NativeImage;
 import net.minecraft.client.texture.NativeImageBackedTexture;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.nbt.NbtIo;
 import net.minecraft.util.Identifier;
 import net.minecraft.util.Util;
-import net.minecraft.world.level.LevelProperties;
+import net.minecraft.util.WorldSavePath;
 import net.minecraft.world.level.storage.LevelStorage;
 import net.minecraft.world.level.storage.LevelSummary;
 import org.apache.logging.log4j.LogManager;
@@ -17,6 +19,7 @@ import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -44,7 +47,7 @@ public class WorldSaveRow extends ControlListEntry implements Comparable<WorldSa
         this.setSelectedEntry = setSelectedEntry;
         this.client = MinecraftClient.getInstance();
         this.iconLocation = new Identifier("worlds/" + Hashing.sha1().hashUnencodedChars(worldSummary.getName()) + "/icon");
-        this.iconFile = saveLoader.resolveFile(worldSummary.getName(), "icon.png");
+        this.iconFile = worldSummary.getFile();
         if (!this.iconFile.isFile()) {
             this.iconFile = null;
         }
@@ -76,9 +79,20 @@ public class WorldSaveRow extends ControlListEntry implements Comparable<WorldSa
     @Override
     public void done() {
         String fileName = this.worldSummary.getName();
-        LevelProperties worldInfo = saveLoader.getLevelProperties(fileName);
-        long seed = worldInfo.getSeed();
-        ClientInterop.saveLoaded(fileName, seed);
+        LevelStorage.Session worldInfo = null;
+        try {
+            worldInfo = saveLoader.createSession(fileName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        try {
+            long seed = NbtIo.readCompressed(new FileInputStream(worldInfo.getDirectory(WorldSavePath.LEVEL_DAT).toFile()))
+                    .getCompound("Data")
+                    .getCompound("WorldGenSettings").getLong("seed");
+            worldInfo.close();
+            ClientInterop.saveLoaded(fileName, seed);
+        } catch (IOException ignored) {
+        }
     }
 
     private NativeImageBackedTexture loadIcon() {
@@ -99,17 +113,17 @@ public class WorldSaveRow extends ControlListEntry implements Comparable<WorldSa
     }
 
     @Override
-    public void render(int mouseX, int mouseY) {
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY) {
         String displayName = this.worldSummary.getDisplayName();
         String details = this.worldSummary.getName() + " (" + DATE_FORMAT.format(new Date(this.worldSummary.getLastPlayed())) + ")";
 
         int x = this.getX();
         int y = this.getY();
-        this.client.textRenderer.draw(displayName, (float) (x + ICON_SIZE + 3), (float) (y + 1), 16777215);
-        this.client.textRenderer.draw(details, (float) (x + ICON_SIZE + 3), (float) (y + 1 + this.client.textRenderer.fontHeight + 1), 8421504);
+        this.client.textRenderer.draw(matrixStack, displayName, (float) (x + ICON_SIZE + 3), (float) (y + 1), 16777215);
+        this.client.textRenderer.draw(matrixStack, details, (float) (x + ICON_SIZE + 3), (float) (y + 1 + this.client.textRenderer.fontHeight + 1), 8421504);
         this.client.getTextureManager().bindTexture(this.icon != null ? this.iconLocation : ICON_MISSING);
         RenderHelper.enableBlend();
-        DrawableHelper.blit(x, y, 0.0F, 0.0F, ICON_SIZE, ICON_SIZE, 32, 32);
+        DrawableHelper.drawTexture(matrixStack, x, y, 0.0F, 0.0F, ICON_SIZE, ICON_SIZE, 32, 32);
         RenderHelper.disableBlend();
     }
 
index ebf5d263f3166eecad9119fee615ab02979a5e85..9671a41b3c58967c079012726bdda662724c8961 100644 (file)
@@ -21,7 +21,7 @@ public class BedrockCeilingHelper {
 
     public static Random getRandomForChunk(int chunkX, int chunkZ) {
         ChunkRandom random = new ChunkRandom();
-        random.setSeed(chunkX, chunkZ);
+        random.setTerrainSeed(chunkX, chunkZ);
         return random;
     }
 }
index b932f044df8fc8cb966f071bea13d13d1482ad60..0da62167fa211ffd6d92174f7913fed22a3fc003 100644 (file)
@@ -2,6 +2,7 @@ package com.irtimaled.bbor.client.interop;
 
 import com.irtimaled.bbor.common.models.Coords;
 import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.world.ClientWorld;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.registry.Registry;
 import net.minecraft.world.biome.Biome;
@@ -13,7 +14,8 @@ public class BiomeBorderHelper {
 
     public static int getBiomeId(int x, int y, int z) {
         BlockPos pos = new BlockPos(x, y, z);
-        Biome biome = MinecraftClient.getInstance().world.getBiome(pos);
-        return Registry.BIOME.getRawId(biome);
+        ClientWorld world = MinecraftClient.getInstance().world;
+        Biome biome = world.getBiome(pos);
+        return world.getRegistryManager().get(Registry.BIOME_KEY).getRawId(biome);
     }
 }
index ddd0956675cce8b2c9f8f609d71ccaf9cb974d33..7588003b0fd48acdc8233dbc0070d35b04538c0a 100644 (file)
@@ -16,7 +16,7 @@ import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.network.ClientPlayNetworkHandler;
 import net.minecraft.client.network.ClientPlayerEntity;
-import net.minecraft.server.command.CommandSource;
+import net.minecraft.command.CommandSource;
 import net.minecraft.server.command.ServerCommandSource;
 import net.minecraft.text.*;
 import net.minecraft.util.Formatting;
@@ -30,7 +30,7 @@ public class ClientInterop {
 
     public static void render(float partialTicks, ClientPlayerEntity player) {
         Player.setPosition(partialTicks, player);
-        ClientRenderer.render(DimensionId.from(player.dimension));
+        ClientRenderer.render(DimensionId.from(player.getEntityWorld().getRegistryKey()));
     }
 
     public static void renderDeferred() {
@@ -48,9 +48,9 @@ public class ClientInterop {
                 } catch (CommandSyntaxException exception) {
                     commandSource.sendError(Texts.toText(exception.getRawMessage()));
                     if (exception.getInput() != null && exception.getCursor() >= 0) {
-                        Text suggestion = new LiteralText("")
+                        MutableText suggestion = new LiteralText("")
                                 .formatted(Formatting.GRAY)
-                                .styled(style -> style.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, message)));
+                                .styled(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, message)));
                         int textLength = Math.min(exception.getInput().length(), exception.getCursor());
                         if (textLength > 10) {
                             suggestion.append("...");
index be5189b99f6fcfb75f481583673b1e1b26c0a4e7..8afa36e3805d000de37c2c28b48706d495bd8c95 100644 (file)
@@ -8,8 +8,10 @@ import net.minecraft.block.BlockState;
 import net.minecraft.block.Blocks;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.biome.Biomes;
-import net.minecraft.world.gen.feature.DecoratedFeatureConfig;
+import net.minecraft.util.registry.BuiltinRegistries;
+import net.minecraft.world.biome.Biome;
+import net.minecraft.world.biome.BiomeKeys;
+import net.minecraft.world.gen.feature.ConfiguredFeature;
 import net.minecraft.world.gen.feature.FeatureConfig;
 import net.minecraft.world.gen.feature.FlowerFeature;
 
@@ -24,6 +26,8 @@ public class FlowerForestHelper {
     private static final FlowerFeature flowersFeature;
     private static final FeatureConfig flowersConfig;
 
+    public static final Biome BIOME = BuiltinRegistries.BIOME.get(BiomeKeys.FLOWER_FOREST);
+
     static {
         flowerColorMap.put(Blocks.DANDELION.getDefaultState(), ConfigManager.colorFlowerForestDandelion);
         flowerColorMap.put(Blocks.POPPY.getDefaultState(), ConfigManager.colorFlowerForestPoppy);
@@ -36,16 +40,15 @@ public class FlowerForestHelper {
         flowerColorMap.put(Blocks.OXEYE_DAISY.getDefaultState(), ConfigManager.colorFlowerForestOxeyeDaisy);
         flowerColorMap.put(Blocks.CORNFLOWER.getDefaultState(), ConfigManager.colorFlowerForestCornflower);
         flowerColorMap.put(Blocks.LILY_OF_THE_VALLEY.getDefaultState(), ConfigManager.colorFlowerForestLilyOfTheValley);
-
-        DecoratedFeatureConfig config = (DecoratedFeatureConfig) Biomes.FLOWER_FOREST.getFlowerFeatures().get(0).config;
-        flowersFeature = (FlowerFeature) config.feature.feature;
-        flowersConfig = config.feature.config;
+        ConfiguredFeature<?, ?> config = BIOME.getGenerationSettings().getFlowerFeatures().get(0);
+        flowersFeature = (FlowerFeature) config.feature;
+        flowersConfig = config.config;
     }
 
     public static Setting<HexColor> getFlowerColorAtPos(Coords coords) {
         int x = coords.getX();
         int z = coords.getZ();
-        BlockState blockState = flowersFeature.getFlowerToPlace(random, new BlockPos(x, coords.getY(), z), flowersConfig);
+        BlockState blockState = flowersFeature.getFlowerState(random, new BlockPos(x, coords.getY(), z), flowersConfig);
         return flowerColorMap.get(blockState);
     }
 
diff --git a/src/main/java/com/irtimaled/bbor/client/interop/ModPackFinder.java b/src/main/java/com/irtimaled/bbor/client/interop/ModPackFinder.java
deleted file mode 100644 (file)
index f70c93c..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.irtimaled.bbor.client.interop;
-
-import net.minecraft.resource.DefaultResourcePack;
-import net.minecraft.resource.ResourcePack;
-import net.minecraft.resource.ResourcePackProfile;
-import net.minecraft.resource.ResourcePackProvider;
-
-import java.util.Map;
-
-public class ModPackFinder implements ResourcePackProvider {
-    private static final String BBOR = "bbor";
-    private final ResourcePack modPack;
-
-    public ModPackFinder() {
-        modPack = new DefaultResourcePack(BBOR);
-    }
-
-    @Override
-    public <T extends ResourcePackProfile> void register(Map<String, T> map, ResourcePackProfile.Factory<T> factory) {
-        T resourcePackInfo = ResourcePackProfile.of(BBOR,
-                true,
-                () -> this.modPack,
-                factory,
-                ResourcePackProfile.InsertionPosition.BOTTOM);
-        if (resourcePackInfo != null) {
-            map.put(BBOR, resourcePackInfo);
-        }
-    }
-}
index e3cf56dc91f5f72e40094a891010ed97dd741117..7591e51b3c7ea967adb3331da5aa794e06544585 100644 (file)
@@ -4,68 +4,79 @@ import com.irtimaled.bbor.common.EventBus;
 import com.irtimaled.bbor.common.ReflectionHelper;
 import com.irtimaled.bbor.common.events.StructuresLoaded;
 import com.irtimaled.bbor.common.models.DimensionId;
+import net.minecraft.client.MinecraftClient;
 import net.minecraft.nbt.CompoundTag;
 import net.minecraft.nbt.ListTag;
 import net.minecraft.structure.StructureManager;
 import net.minecraft.structure.StructurePiece;
 import net.minecraft.structure.StructureStart;
 import net.minecraft.util.math.BlockBox;
+import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.ChunkPos;
+import net.minecraft.util.registry.DynamicRegistryManager;
 import net.minecraft.world.FeatureUpdater;
-import net.minecraft.world.IWorld;
 import net.minecraft.world.PersistentStateManager;
-import net.minecraft.world.WorldSaveHandler;
+import net.minecraft.world.StructureWorldAccess;
+import net.minecraft.world.World;
 import net.minecraft.world.biome.Biome;
 import net.minecraft.world.dimension.DimensionType;
+import net.minecraft.world.gen.StructureAccessor;
 import net.minecraft.world.gen.chunk.ChunkGenerator;
+import net.minecraft.world.gen.feature.FeatureConfig;
+import net.minecraft.world.level.storage.LevelStorage;
 import net.minecraft.world.storage.RegionBasedStorage;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.*;
-import java.util.function.Function;
+import java.util.function.BiFunction;
 
 class NBTStructureLoader {
     private final DimensionId dimensionId;
     private final Set<String> loadedChunks = new HashSet<>();
 
     private FeatureUpdater legacyStructureDataUtil = null;
-    private WorldSaveHandler saveHandler = null;
+    private LevelStorage.Session saveHandler = null;
     private File chunkSaveLocation = null;
     private ChunkLoader chunkLoader;
 
-    NBTStructureLoader(DimensionId dimensionId, WorldSaveHandler saveHandler, File worldDirectory) {
+    NBTStructureLoader(DimensionId dimensionId, LevelStorage.Session saveHandler, File worldDirectory) {
         this.dimensionId = dimensionId;
         this.configure(saveHandler, worldDirectory);
     }
 
     void clear() {
         this.legacyStructureDataUtil = null;
-        this.saveHandler = null;
         this.chunkSaveLocation = null;
         this.loadedChunks.clear();
+        close(this.saveHandler, this.chunkLoader);
+        this.saveHandler = null;
+        this.chunkLoader = null;
+    }
 
-        if (this.chunkLoader == null) return;
-        try {
-            this.chunkLoader.close();
-        } catch (IOException ignored) {
+    private void close(AutoCloseable... closeables) {
+        for (AutoCloseable closeable : closeables) {
+            if(closeable == null) continue;
+            try {
+                closeable.close();
+            } catch (Exception ignored) {
+            }
         }
-        this.chunkLoader = null;
     }
 
-    void configure(WorldSaveHandler saveHandler, File worldDirectory) {
+    void configure(LevelStorage.Session saveHandler, File worldDirectory) {
         this.saveHandler = saveHandler;
         if (worldDirectory != null) {
-            this.chunkSaveLocation = new File(dimensionId.getDimensionType().getSaveDirectory(worldDirectory), "region");
+            this.chunkSaveLocation = new File(DimensionType.getSaveDirectory(this.dimensionId.getDimensionType(), worldDirectory), "region");
             this.chunkLoader = new ChunkLoader(this.chunkSaveLocation);
         }
     }
 
     private FeatureUpdater getLegacyStructureDataUtil() {
         if (this.legacyStructureDataUtil == null) {
-            File dataFolder = new File(DimensionType.OVERWORLD.getSaveDirectory(this.saveHandler.getWorldDir()), "data");
+            File dataFolder = new File(this.saveHandler.getWorldDirectory(World.OVERWORLD), "data");
             this.legacyStructureDataUtil = FeatureUpdater.create(dimensionId.getDimensionType(),
-                    new PersistentStateManager(dataFolder, this.saveHandler.getDataFixer()));
+                    new PersistentStateManager(dataFolder, MinecraftClient.getInstance().getDataFixer()));
         }
         return this.legacyStructureDataUtil;
     }
@@ -94,7 +105,7 @@ class NBTStructureLoader {
         CompoundTag structureStarts = loadStructureStarts(chunkX, chunkZ);
         if (structureStarts == null || structureStarts.getSize() == 0) return;
 
-        Map<String, StructureStart> structureStartMap = new HashMap<>();
+        Map<String, StructureStart<?>> structureStartMap = new HashMap<>();
         for (String key : structureStarts.getKeys()) {
             CompoundTag compound = structureStarts.getCompound(key);
             if (compound.contains("BB")) {
@@ -105,7 +116,7 @@ class NBTStructureLoader {
         EventBus.publish(new StructuresLoaded(structureStartMap, dimensionId));
     }
 
-    private static class SimpleStructureStart extends StructureStart {
+    private static class SimpleStructureStart extends StructureStart<FeatureConfig> {
         SimpleStructureStart(CompoundTag compound) {
             super(null,
                     0,
@@ -122,8 +133,7 @@ class NBTStructureLoader {
         }
 
         @Override
-        public void initialize(ChunkGenerator<?> chunkGenerator, StructureManager structureManager, int i, int i1, Biome biome) {
-
+        public void init(DynamicRegistryManager dynamicRegistryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, int i, int j, Biome biome, FeatureConfig featureConfig) {
         }
     }
 
@@ -138,19 +148,19 @@ class NBTStructureLoader {
         }
 
         @Override
-        public boolean generate(IWorld iWorld, ChunkGenerator<?> chunkGenerator, Random random, BlockBox blockBox, ChunkPos chunkPos) {
+        public boolean generate(StructureWorldAccess structureWorldAccess, StructureAccessor structureAccessor, ChunkGenerator chunkGenerator, Random random, BlockBox blockBox, ChunkPos chunkPos, BlockPos blockPos) {
             return false;
         }
     }
 
-    private static class ChunkLoader {
-        private static final Function<File, RegionBasedStorage> creator =
-                ReflectionHelper.getPrivateInstanceBuilder(RegionBasedStorage.class, File.class);
+    private static class ChunkLoader implements AutoCloseable {
+        private static final BiFunction<File, Boolean, RegionBasedStorage> creator =
+                ReflectionHelper.getPrivateInstanceBuilder(RegionBasedStorage.class, File.class, boolean.class);
 
         private final RegionBasedStorage regionFileCache;
 
         public ChunkLoader(File file) {
-            this.regionFileCache = creator.apply(file);
+            this.regionFileCache = creator.apply(file, false);
         }
 
         public CompoundTag readChunk(int chunkX, int chunkZ) throws IOException {
index 9f7f54ebc9339cfb66985e1170dbc3fa411c88af..998ab11b4b73daefb8caea5bb7c6b434de9fac8e 100644 (file)
@@ -3,22 +3,26 @@ package com.irtimaled.bbor.client.interop;
 import com.irtimaled.bbor.client.Player;
 import com.irtimaled.bbor.common.models.DimensionId;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.world.WorldSaveHandler;
 import net.minecraft.world.level.storage.LevelStorage;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 public class SaveGameStructureLoader {
     private static final Map<DimensionId, NBTStructureLoader> nbtStructureLoaders = new HashMap<>();
-    private static WorldSaveHandler saveHandler = null;
+    private static LevelStorage.Session saveHandler = null;
     private static File worldDirectory = null;
 
     static void loadSaveGame(String fileName) {
         MinecraftClient minecraft = MinecraftClient.getInstance();
         LevelStorage saveLoader = minecraft.getLevelStorage();
-        saveHandler = saveLoader.createSaveHandler(fileName, null);
+        try {
+            saveHandler = saveLoader.createSession(fileName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
         worldDirectory = saveLoader.getSavesDirectory().resolve(fileName).toFile();
 
         for (DimensionId dimensionId : nbtStructureLoaders.keySet()) {
index 7672372b359eced4956e905a4279b8217b98b7bd..99d3371e3f7fd75eef64970cc2868e8268234adc 100644 (file)
@@ -4,8 +4,8 @@ import com.irtimaled.bbor.common.models.Coords;
 import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
 import net.minecraft.client.MinecraftClient;
-import net.minecraft.entity.EntityCategory;
 import net.minecraft.entity.EntityType;
+import net.minecraft.entity.SpawnGroup;
 import net.minecraft.tag.BlockTags;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.Direction;
@@ -15,7 +15,7 @@ import net.minecraft.world.World;
 import net.minecraft.world.biome.Biome;
 
 public class SpawnableBlocksHelper {
-    private static final EntityType entityType = EntityType.Builder.create(EntityCategory.MONSTER)
+    private static final EntityType entityType = EntityType.Builder.create(SpawnGroup.MONSTER)
             .setDimensions(0f, 0f).disableSaving().build(null);
 
     public static void findSpawnableBlocks(Coords coords, int width, int height, BlockProcessor blockProcessor) {
@@ -34,8 +34,6 @@ public class SpawnableBlocksHelper {
         World world = MinecraftClient.getInstance().world;
         for (int x = minX; x < maxX; x++) {
             for (int z = minZ; z < maxZ; z++) {
-                if (isBiomeHostileSpawnProof(world, new BlockPos(x, 1, z))) continue;
-
                 BlockState upperBlockState = world.getBlockState(new BlockPos(x, minY - 1, z));
                 for (int y = Math.max(1, minY); y < maxY; y++) {
                     BlockState spawnBlockState = upperBlockState;
@@ -49,20 +47,16 @@ public class SpawnableBlocksHelper {
         }
     }
 
-    static boolean isBiomeHostileSpawnProof(World world, BlockPos pos) {
-        Biome biome = world.getBiome(pos);
-        return biome.getMaxSpawnLimit() == 0 ||
-                biome.getEntitySpawnList(EntityCategory.MONSTER).isEmpty();
-    }
-
     static boolean isSpawnable(World world, BlockPos pos, BlockState spawnBlockState, BlockState upperBlockState) {
         VoxelShape collisionShape = upperBlockState.getCollisionShape(world, pos);
-        boolean isNether = world.dimension.isNether();
-        return spawnBlockState.allowsSpawning(world, pos.down(), isNether ? EntityType.ZOMBIE_PIGMAN : entityType) &&
+        Biome biome = world.getBiome(pos);
+        boolean isNether = biome.getCategory() == Biome.Category.NETHER;
+        return biome.getCategory() != Biome.Category.MUSHROOM &&
+                spawnBlockState.allowsSpawning(world, pos.down(), isNether ? EntityType.ZOMBIFIED_PIGLIN : entityType) &&
                 !Block.isFaceFullSquare(collisionShape, Direction.UP) &&
                 !upperBlockState.emitsRedstonePower() &&
-                !upperBlockState.matches(BlockTags.RAILS) &&
-                collisionShape.getMaximum(Direction.Axis.Y) <= 0 &&
+                !upperBlockState.isIn(BlockTags.RAILS) &&
+                collisionShape.getMax(Direction.Axis.Y) <= 0 &&
                 upperBlockState.getFluidState().isEmpty() &&
                 (isNether || world.getLightLevel(LightType.BLOCK, pos) <= 7);
     }
index 706d38e9befe393ee4e917f6967a54439982f6b6..0abe2aea4392319ee03353ac79affd8aa02ab8b8 100644 (file)
@@ -30,8 +30,6 @@ public class SpawningSphereHelper {
                 double distance = center.getDistance(new Point(closestX, center.getY(), closestZ));
                 if (distance > BoundingBoxSpawningSphere.SPAWN_RADIUS) continue;
 
-                if (SpawnableBlocksHelper.isBiomeHostileSpawnProof(world, new BlockPos(x, 1, z))) continue;
-
                 BlockState upperBlockState = world.getBlockState(new BlockPos(x, minY - 1, z));
                 for (int y = minY; y < maxY; y++) {
                     BlockState spawnBlockState = upperBlockState;
index ba13fcfeb3e557305fbeb79c875bb6f7631d7317..ffdb16fc45eec00998d64c9422511bf9239dcb39 100644 (file)
@@ -12,9 +12,9 @@ class CustomKeyBinding extends KeyBinding {
     }
 
     @Override
-    public void setKeyCode(InputUtil.KeyCode input) {
-        super.setKeyCode(input);
-        int keyCode = input.getKeyCode();
+    public void setBoundKey(InputUtil.Key input) {
+        super.setBoundKey(input);
+        int keyCode = input.getCode();
         key.updateKeyCode(keyCode);
     }
 
index 6d6aefd065ab6f0753f6d81f7bfd5695df1a370d..41d7a600ee73d8acbbedb9af3cc8fbdada8b0a2f 100644 (file)
@@ -78,8 +78,8 @@ public class Key {
     }
 
     public Key register(String keyName) {
-        InputUtil.KeyCode input = InputUtil.fromName(keyName);
-        Key key = new Key(input.getKeyCode());
+        InputUtil.Key input = InputUtil.fromTranslationKey(keyName);
+        Key key = new Key(input.getCode());
         subKeys.add(key);
         return key;
     }
index 021572ce68b7af049e02b84e908714167c7fb62c..0039d75afd87d516ce9b8d96fb8bd4351723996c 100644 (file)
@@ -21,8 +21,8 @@ public class KeyListener {
     }
 
     public static Key register(String description, String keyName) {
-        InputUtil.KeyCode input = InputUtil.fromName(keyName);
-        CustomKeyBinding keyBinding = new CustomKeyBinding(description, input.getKeyCode());
+        InputUtil.Key input = InputUtil.fromTranslationKey(keyName);
+        CustomKeyBinding keyBinding = new CustomKeyBinding(description, input.getCode());
         keyBindings.add(keyBinding);
 
         Key key = keyBinding.getKey();
index e704d8d0be92db8b4ffc68ce70cebbffa8ca2683..1ca34ec938c8672ac4db7cfacadc5f7a64b8f4d4 100644 (file)
@@ -10,14 +10,13 @@ import com.irtimaled.bbor.common.BoundingBoxType;
 import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.models.Coords;
 import com.irtimaled.bbor.common.models.DimensionId;
-import net.minecraft.util.registry.Registry;
-import net.minecraft.world.biome.Biomes;
+import net.minecraft.util.registry.BuiltinRegistries;
 
 import java.util.HashMap;
 import java.util.Map;
 
 public class FlowerForestProvider implements IBoundingBoxProvider<BoundingBoxFlowerForest>, ICachingProvider {
-    public static final int FLOWER_FOREST_BIOME_ID = Registry.BIOME.getRawId(Biomes.FLOWER_FOREST);
+    public static final int FLOWER_FOREST_BIOME_ID = BuiltinRegistries.BIOME.getRawId(FlowerForestHelper.BIOME);
     private static Coords lastPlayerCoords = null;
     private static Integer lastRenderDistance = null;
     private static Map<Coords, BoundingBoxFlowerForest> lastBoundingBoxes = new HashMap<>();
index ca4b5ca5a38dd1c18420b5232a17f890c4dcc419..032b1ee884f73687a02b9271190dd47865445e5f 100644 (file)
@@ -23,7 +23,7 @@ public class SlimeChunkProvider implements IBoundingBoxProvider<BoundingBoxSlime
     }
 
     private static boolean isSlimeChunk(int chunkX, int chunkZ) {
-        return ChunkRandom.create(chunkX, chunkZ, seed, 987234911L).nextInt(10) == 0;
+        return ChunkRandom.getSlimeRandom(chunkX, chunkZ, seed, 987234911L).nextInt(10) == 0;
     }
 
     public void clearCache() {
index bd92c2bb3a1bad9fde9a76140575c7b57a78e12a..d7f220f4dde2caf1a6916fb5a31828b67cd89ffa 100644 (file)
@@ -6,6 +6,7 @@ import com.irtimaled.bbor.common.MathHelper;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.util.math.MatrixStack;
 
 import java.awt.*;
 import java.util.function.Supplier;
@@ -116,12 +117,11 @@ public abstract class AbstractRenderer<T extends AbstractBoundingBox> {
 
     void renderText(OffsetPoint offsetPoint, String... texts) {
         TextRenderer fontRenderer = MinecraftClient.getInstance().textRenderer;
-
         RenderHelper.beforeRenderFont(offsetPoint);
         float top = -(fontRenderer.fontHeight * texts.length) / 2f;
         for (String text : texts) {
-            float left = fontRenderer.getStringWidth(text) / 2f;
-            fontRenderer.draw(text, -left, top, -1);
+            float left = fontRenderer.getWidth(text) / 2f;
+            fontRenderer.draw(new MatrixStack(), text, -left, top, -1);
             top += fontRenderer.fontHeight;
         }
         RenderHelper.afterRenderFont();
index c57de9a6ffe32d37e423bc875425c33502872626..f21183aadace9d5172597179e8245d49413a840f 100644 (file)
@@ -135,4 +135,12 @@ public class RenderHelper {
     public static void blendFuncGui() {
         GlStateManager.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ZERO, GL11.GL_ONE);
     }
+
+    public static void depthFuncAlways() {
+        GlStateManager.depthFunc(GL11.GL_ALWAYS);
+    }
+
+    public static void depthFuncLessEqual() {
+        GlStateManager.depthFunc(GL11.GL_LEQUAL);
+    }
 }
index 05cca0af01c7999e356dc47e4a2d6ec11acf0d1d..38850f8c4f35e9f1affe9358f6a90511588e27d0 100644 (file)
@@ -20,24 +20,24 @@ public class BoundingBoxType {
     public static final BoundingBoxType FlowerForest = register("Flower Forest");
     public static final BoundingBoxType BedrockCeiling = register("Bedrock Ceiling");
 
-    public static final BoundingBoxType JungleTemple = register("Jungle_Pyramid");
-    public static final BoundingBoxType DesertTemple = register("Desert_Pyramid");
-    public static final BoundingBoxType WitchHut = register("Swamp_Hut");
-    public static final BoundingBoxType OceanMonument = register("Monument");
-    public static final BoundingBoxType Shipwreck = register("Shipwreck");
-    public static final BoundingBoxType OceanRuin = register("Ocean_Ruin");
-    public static final BoundingBoxType BuriedTreasure = register("Buried_Treasure");
-    public static final BoundingBoxType Stronghold = register("Stronghold");
-    public static final BoundingBoxType MineShaft = register("Mineshaft");
-    public static final BoundingBoxType NetherFortress = register("Fortress");
-    public static final BoundingBoxType EndCity = register("EndCity");
-    public static final BoundingBoxType Mansion = register("Mansion");
-    public static final BoundingBoxType Igloo = register("Igloo");
-    public static final BoundingBoxType PillagerOutpost = register("Pillager_Outpost");
-    public static final BoundingBoxType Village = register("Village");
-    public static final BoundingBoxType NetherFossil = register("Nether_Fossil");
-    public static final BoundingBoxType BastionRemnant = register("Bastion_Remnant");
-    public static final BoundingBoxType RuinedPortal = register("Ruined_Portal");
+    public static final BoundingBoxType JungleTemple = register("jungle_pyramid");
+    public static final BoundingBoxType DesertTemple = register("desert_pyramid");
+    public static final BoundingBoxType WitchHut = register("swamp_hut");
+    public static final BoundingBoxType OceanMonument = register("monument");
+    public static final BoundingBoxType Shipwreck = register("shipwreck");
+    public static final BoundingBoxType OceanRuin = register("ocean_ruin");
+    public static final BoundingBoxType BuriedTreasure = register("buried_treasure");
+    public static final BoundingBoxType Stronghold = register("stronghold");
+    public static final BoundingBoxType MineShaft = register("mineshaft");
+    public static final BoundingBoxType NetherFortress = register("fortress");
+    public static final BoundingBoxType EndCity = register("endcity");
+    public static final BoundingBoxType Mansion = register("mansion");
+    public static final BoundingBoxType Igloo = register("igloo");
+    public static final BoundingBoxType PillagerOutpost = register("pillager_outpost");
+    public static final BoundingBoxType Village = register("village");
+    public static final BoundingBoxType NetherFossil = register("nether_fossil");
+    public static final BoundingBoxType BastionRemnant = register("bastion_remnant");
+    public static final BoundingBoxType RuinedPortal = register("ruined_portal");
 
     private static BoundingBoxType register(String name) {
         return structureTypeMap.computeIfAbsent(name.hashCode(), k -> new BoundingBoxType(name));
index a350d459ba9814dcecd6ea43a369cbaf5f42ae03..734ed67e865fa68f70e60bde3af80442ea27e0c7 100644 (file)
@@ -4,11 +4,12 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 
 public class ReflectionHelper {
     public static <T, R> Function<T, R> getPrivateFieldGetter(Class<?> clazz, Type fieldType, Type... genericTypeArguments) {
-        Field field = findField(clazz, fieldType, genericTypeArguments);
+        Field field = getGenericField(clazz, fieldType, genericTypeArguments);
         if (field == null) return obj -> null;
 
         field.setAccessible(true);
@@ -21,6 +22,11 @@ public class ReflectionHelper {
         };
     }
 
+    public static Field getGenericField(Class<?> clazz, Type fieldType, Type[] genericTypeArguments) {
+        Field field = findField(clazz, fieldType, genericTypeArguments);
+        return field != null ? field : findField(clazz, fieldType, null);
+    }
+
     private static Field findField(Class<?> clazz, Type fieldType, Type[] genericTypeArguments) {
         for (Field field : clazz.getDeclaredFields()) {
             Type type = field.getGenericType();
@@ -33,6 +39,8 @@ public class ReflectionHelper {
             Type rawType = genericType.getRawType();
             if (rawType != fieldType) continue;
 
+            if (genericTypeArguments == null) return field;
+
             Type[] actualTypeArguments = genericType.getActualTypeArguments();
             if (!typesMatch(genericTypeArguments, actualTypeArguments)) continue;
 
@@ -52,14 +60,14 @@ public class ReflectionHelper {
         return true;
     }
 
-    public static <T, R> Function<T, R> getPrivateInstanceBuilder(Class<R> clazz, Class<T> parameter) {
-        Constructor<R> constructor = findConstructor(clazz, parameter);
-        if (constructor == null) return obj -> null;
+    public static <T, R, S> BiFunction<T, R, S> getPrivateInstanceBuilder(Class<S> clazz, Class<T> parameter1, Class<R> parameter2) {
+        Constructor<S> constructor = findConstructor(clazz, parameter1, parameter2);
+        if (constructor == null) return (obj1, obj2) -> null;
 
         constructor.setAccessible(true);
-        return obj -> {
+        return (obj1, obj2) -> {
             try {
-                return (R) constructor.newInstance(obj);
+                return (S) constructor.newInstance(obj1, obj2);
             } catch (Exception ignored) {
                 return null;
             }
index b63e0ebdf033040cd71cd50af270c5e3f2dd49ec..86c7dba8f7694c4dba755cd088af36c15bb24d0c 100644 (file)
@@ -24,8 +24,7 @@ class StructureProcessor {
 
     private final BoundingBoxCache boundingBoxCache;
 
-    private void addStructures(BoundingBoxType type, Map<String, StructureStart> structureMap) {
-        StructureStart structureStart = structureMap.get(type.getName());
+    private void addStructures(BoundingBoxType type, StructureStart<?> structureStart) {
         if (structureStart == null) return;
 
         BlockBox bb = structureStart.getBoundingBox();
@@ -47,9 +46,9 @@ class StructureProcessor {
         return BoundingBoxCuboid.from(min, max, type);
     }
 
-    void process(Map<String, StructureStart> structures) {
+    void process(Map<String, StructureStart<?>> structures) {
         if (structures.size() > 0) {
-            supportedStructures.forEach(type -> addStructures(type, structures));
+            supportedStructures.forEach(type -> addStructures(type, structures.get(type.getName())));
         }
     }
 }
index 1d03c50ab9343059d071b3c235c1b6502e841839..32b5016c89f248c7650ea927cbe9c2aa81f7b30c 100644 (file)
@@ -6,15 +6,15 @@ import net.minecraft.structure.StructureStart;
 import java.util.Map;
 
 public class StructuresLoaded {
-    private final Map<String, StructureStart> structures;
+    private final Map<String, StructureStart<?>> structures;
     private final DimensionId dimensionId;
 
-    public StructuresLoaded(Map<String, StructureStart> structures, DimensionId dimensionId) {
+    public StructuresLoaded(Map<String, StructureStart<?>> structures, DimensionId dimensionId) {
         this.structures = structures;
         this.dimensionId = dimensionId;
     }
 
-    public Map<String, StructureStart> getStructures() {
+    public Map<String, StructureStart<?>> getStructures() {
         return structures;
     }
 
index f96d4d7a7f5020a10e357cdf289de730dabe10ac..cb1a04a043c73dc17d57e01ae28c464b945204f4 100644 (file)
@@ -2,7 +2,7 @@ package com.irtimaled.bbor.common.events;
 
 import com.irtimaled.bbor.common.models.DimensionId;
 import net.minecraft.server.world.ServerWorld;
-import net.minecraft.world.level.LevelProperties;
+import net.minecraft.world.WorldProperties;
 
 public class WorldLoaded {
     private final DimensionId dimensionId;
@@ -11,9 +11,9 @@ public class WorldLoaded {
     private final int spawnZ;
 
     public WorldLoaded(ServerWorld world) {
-        LevelProperties info = world.getLevelProperties();
-        this.dimensionId = DimensionId.from(world.getDimension().getType());
-        this.seed = info.getSeed();
+        WorldProperties info = world.getLevelProperties();
+        this.dimensionId = DimensionId.from(world.getRegistryKey());
+        this.seed = world.getSeed();
         this.spawnX = info.getSpawnX();
         this.spawnZ = info.getSpawnZ();
     }
index 92ff557530a27c4b6463a135d5bbe306fc3c4176..21aebc1ebb827585b7f20f21f0f17ae97b63f8ef 100644 (file)
@@ -12,12 +12,14 @@ import net.minecraft.structure.StructureStart;
 import net.minecraft.world.chunk.WorldChunk;
 
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Map;
 
 public class CommonInterop {
     public static void chunkLoaded(WorldChunk chunk) {
-        DimensionId dimensionId = DimensionId.from(chunk.getWorld().getDimension().getType());
-        Map<String, StructureStart> structures = chunk.getStructureStarts();
+        DimensionId dimensionId = DimensionId.from(chunk.getWorld().getRegistryKey());
+        Map<String, StructureStart<?>> structures = new HashMap<>();
+        chunk.getStructureStarts().entrySet().forEach(es -> structures.put(es.getKey().getName(), es.getValue()));
         if (structures.size() > 0) EventBus.publish(new StructuresLoaded(structures, dimensionId));
     }
 
@@ -39,7 +41,7 @@ public class CommonInterop {
         ServerPlayNetworkHandler connection = player.networkHandler;
         if (connection == null) return;
 
-        ClientConnection networkManager = connection.client;
+        ClientConnection networkManager = connection.connection;
         if (networkManager.isLocal()) return;
 
         EventBus.publish(new PlayerLoggedIn(new ServerPlayer(player)));
index 2bf61c4d2344d532990bd83a86013da6ce313ef6..cc3759c5f0d4cdf72bc4b00e9b0b43bfbcc5e8ee 100644 (file)
@@ -3,14 +3,12 @@ package com.irtimaled.bbor.common.messages;
 import com.irtimaled.bbor.client.events.AddBoundingBoxReceived;
 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
 import com.irtimaled.bbor.common.models.DimensionId;
-import net.minecraft.world.dimension.DimensionType;
 
 import java.util.HashSet;
 import java.util.Set;
 
 public class AddBoundingBox {
     public static final String NAME = "bbor:add_bounding_box_v2";
-    public static final String LEGACY = "bbor:add_bounding_box";
 
     public static PayloadBuilder getPayload(DimensionId dimensionId, AbstractBoundingBox key, Set<AbstractBoundingBox> boundingBoxes) {
         if (!BoundingBoxSerializer.canSerialize(key)) return null;
@@ -26,8 +24,8 @@ public class AddBoundingBox {
         return builder;
     }
 
-    public static AddBoundingBoxReceived getEvent(PayloadReader reader, String name) {
-        DimensionId dimensionId = getDimensionId(reader, name);
+    public static AddBoundingBoxReceived getEvent(PayloadReader reader) {
+        DimensionId dimensionId = reader.readDimensionId();
         AbstractBoundingBox key = BoundingBoxDeserializer.deserialize(reader);
         if (key == null) return null;
 
@@ -40,12 +38,4 @@ public class AddBoundingBox {
             boundingBoxes.add(key);
         return new AddBoundingBoxReceived(dimensionId, key, boundingBoxes);
     }
-
-    private static DimensionId getDimensionId(PayloadReader reader, String name) {
-        if (name.equals(NAME)) return reader.readDimensionId();
-
-        int dimensionRawId = reader.readVarInt();
-        DimensionType dimensionType = DimensionType.byRawId(dimensionRawId);
-        return DimensionId.from(dimensionType);
-    }
 }
index 8606a07819a25c49362f53b85435f489a5e34418..5c84b2cf6b61b8d3968efee2376d34c343d767c7 100644 (file)
@@ -3,11 +3,11 @@ package com.irtimaled.bbor.common.messages;
 import com.irtimaled.bbor.common.models.Coords;
 import com.irtimaled.bbor.common.models.DimensionId;
 import io.netty.buffer.Unpooled;
-import net.minecraft.client.network.packet.CustomPayloadS2CPacket;
 import net.minecraft.network.Packet;
-import net.minecraft.server.network.packet.CustomPayloadC2SPacket;
+import net.minecraft.network.PacketByteBuf;
+import net.minecraft.network.packet.c2s.play.CustomPayloadC2SPacket;
+import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
 import net.minecraft.util.Identifier;
-import net.minecraft.util.PacketByteBuf;
 
 import java.util.HashMap;
 import java.util.Map;
index 22f3b707a722e6738a4461593876491acd455e20..a036a21144a444d64d79428a4078552e9faa96c5 100644 (file)
@@ -2,7 +2,7 @@ package com.irtimaled.bbor.common.messages;
 
 import com.irtimaled.bbor.common.models.Coords;
 import com.irtimaled.bbor.common.models.DimensionId;
-import net.minecraft.util.PacketByteBuf;
+import net.minecraft.network.PacketByteBuf;
 
 public class PayloadReader {
     private final PacketByteBuf buffer;
index fb76702f920c976f6e1f93859af0699761a43577..01f89b29ceaf8dbe3e002eb8b6911c79ee8abb87 100644 (file)
@@ -1,24 +1,34 @@
 package com.irtimaled.bbor.common.models;
 
+import com.irtimaled.bbor.common.ReflectionHelper;
 import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.RegistryKey;
+import net.minecraft.world.World;
 import net.minecraft.world.dimension.DimensionType;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
 
 public class DimensionId {
+    private static final Function<DimensionType, Optional<RegistryKey<DimensionType>>> getRegistryKey =
+            ReflectionHelper.getPrivateFieldGetter(DimensionType.class, Optional.class);
+    private static final Map<Identifier, RegistryKey<World>> typeMap = new HashMap<>();
     private static final Map<Identifier, DimensionId> dimensionIdMap = new HashMap<>();
 
-    public static DimensionId from(DimensionType dimensionType) {
-        return from(DimensionType.getId(dimensionType));
+    public static DimensionId from(RegistryKey<World> registryKey) {
+        Identifier value = registryKey.getValue();
+        typeMap.put(value, registryKey);
+        return from(value);
     }
 
     public static DimensionId from(Identifier value) {
         return dimensionIdMap.computeIfAbsent(value, DimensionId::new);
     }
 
-    public static DimensionId OVERWORLD = DimensionId.from(DimensionType.OVERWORLD);
-    public static DimensionId NETHER = DimensionId.from(DimensionType.THE_NETHER);
+    public static DimensionId OVERWORLD = DimensionId.from(World.OVERWORLD);
+    public static DimensionId NETHER = DimensionId.from(World.NETHER);
 
     private final Identifier value;
 
@@ -30,8 +40,8 @@ public class DimensionId {
         return value;
     }
 
-    public DimensionType getDimensionType() {
-        return DimensionType.byId(value);
+    public RegistryKey<World> getDimensionType() {
+        return typeMap.get(value);
     }
 
     @Override
index 6da6096f9714c3e91a2eadd1e4e57de48e270248..80ce70d1bec5b91f4601ddc9ea9e42eeb3d7f68d 100644 (file)
@@ -11,7 +11,7 @@ public class ServerPlayer {
     private final Consumer<Packet<?>> packetConsumer;
 
     public ServerPlayer(ServerPlayerEntity player) {
-        this.dimensionId = DimensionId.from(player.dimension);
+        this.dimensionId = DimensionId.from(player.getEntityWorld().getRegistryKey());
         this.packetConsumer = player.networkHandler::sendPacket;
     }
 
index 27c751de8bab1b30e703c853d04f816f68e0e576..5e30839db759930a5efa7b4bfaec7ca2615fe569 100644 (file)
@@ -1,31 +1,18 @@
 package com.irtimaled.bbor.mixin.client;
 
 import com.irtimaled.bbor.client.ClientProxy;
-import com.irtimaled.bbor.client.interop.ModPackFinder;
 import net.minecraft.client.MinecraftClient;
 import net.minecraft.client.RunArgs;
-import net.minecraft.client.resource.ClientResourcePackProfile;
-import net.minecraft.resource.ResourcePackManager;
-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;
 
 @Mixin(MinecraftClient.class)
-public class MixinMinecraft {
-    @Shadow
-    @Final
-    private ResourcePackManager<ClientResourcePackProfile> resourcePackManager;
-
-    @Inject(method = "<init>", at = @At("RETURN"))
+public abstract class MixinMinecraft {
+    @Inject(method = "<init>", at = @At(value = "RETURN"))
     private void constructor(RunArgs configuration, CallbackInfo ci) {
         new ClientProxy().init();
     }
 
-    @Inject(method = "startTimerHackThread", at = @At("RETURN"))
-    private void init(CallbackInfo ci) {
-        this.resourcePackManager.registerProvider(new ModPackFinder());
-    }
 }
index 7bd6c52cd0695705f1ad3486ba86c00efd5efa03..bb03b7a20b8a704d4b7e6ebcf84736591dd970d2 100644 (file)
@@ -2,14 +2,14 @@ package com.irtimaled.bbor.mixin.client.gui.screen;
 
 import com.irtimaled.bbor.client.gui.SettingsScreenButton;
 import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.gui.screen.SettingsScreen;
+import net.minecraft.client.gui.screen.options.OptionsScreen;
 import net.minecraft.client.gui.widget.AbstractButtonWidget;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
-@Mixin(SettingsScreen.class)
+@Mixin(OptionsScreen.class)
 public class MixinOptionsScreen extends Screen {
     private MixinOptionsScreen() {
         super(null);
index b58b9a5fa432d1809b63c1b1fb101ba8d34c74f4..291d16c8fed01d83e11c36b51e6b4308c163f003 100644 (file)
@@ -6,8 +6,8 @@ import net.minecraft.client.render.Camera;
 import net.minecraft.client.render.GameRenderer;
 import net.minecraft.client.render.LightmapTextureManager;
 import net.minecraft.client.render.WorldRenderer;
-import net.minecraft.client.util.math.Matrix4f;
 import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.util.math.Matrix4f;
 import org.spongepowered.asm.mixin.Final;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
index b76ad0ff9e6167336c8f6d224c0a79c5a58d86c1..5f595c3adafe0d48cf4114a19064aec89928f30e 100644 (file)
@@ -3,8 +3,8 @@ package com.irtimaled.bbor.mixin.network.play.client;
 import com.irtimaled.bbor.common.interop.CommonInterop;
 import com.irtimaled.bbor.common.messages.SubscribeToServer;
 import net.minecraft.network.listener.ServerPlayPacketListener;
+import net.minecraft.network.packet.c2s.play.CustomPayloadC2SPacket;
 import net.minecraft.server.network.ServerPlayNetworkHandler;
-import net.minecraft.server.network.packet.CustomPayloadC2SPacket;
 import net.minecraft.util.Identifier;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
@@ -16,7 +16,7 @@ public class MixinCCustomPayloadPacket {
     @Shadow
     private Identifier channel;
 
-    @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/listener/ServerPlayPacketListener;onCustomPayload(Lnet/minecraft/server/network/packet/CustomPayloadC2SPacket;)V"))
+    @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/listener/ServerPlayPacketListener;onCustomPayload(Lnet/minecraft/network/packet/c2s/play/CustomPayloadC2SPacket;)V"))
     private void processPacket(ServerPlayPacketListener netHandlerPlayServer, CustomPayloadC2SPacket packet) {
         if (this.channel.toString().equals(SubscribeToServer.NAME)) {
             CommonInterop.playerSubscribed(((ServerPlayNetworkHandler) netHandlerPlayServer).player);
index f98d52b5c316c1c45d21e3817f2058ecba09b7fd..b4ed03c0db39f5fb1326f844652c9fcdd348a083 100644 (file)
@@ -1,7 +1,7 @@
 package com.irtimaled.bbor.mixin.network.play.server;
 
 import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.network.packet.ChatMessageS2CPacket;
+import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
 import net.minecraft.text.Text;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
@@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
 
-@Mixin(ChatMessageS2CPacket.class)
+@Mixin(GameMessageS2CPacket.class)
 public class MixinSChatPacket {
     @Shadow
     private Text message;
index 05276828ed1ad2fc244b147b00939ed0f99cc9a5..703e23e7c84014f1860ee12c2800d895c2ad00bf 100644 (file)
@@ -1,8 +1,8 @@
 package com.irtimaled.bbor.mixin.network.play.server;
 
 import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.network.packet.ChunkDataS2CPacket;
 import net.minecraft.network.listener.ClientPlayPacketListener;
+import net.minecraft.network.packet.s2c.play.ChunkDataS2CPacket;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.injection.At;
index 1a4f8d154d01b4a70135cb7e3e7b154b529aab6d..849615031e25fd9de69dd4f71316f741dc5e34c1 100644 (file)
@@ -3,8 +3,8 @@ package com.irtimaled.bbor.mixin.network.play.server;
 import com.irtimaled.bbor.client.interop.ClientInterop;
 import com.irtimaled.bbor.common.TypeHelper;
 import net.minecraft.client.network.ClientPlayNetworkHandler;
-import net.minecraft.client.network.packet.CommandTreeS2CPacket;
 import net.minecraft.network.listener.ClientPlayPacketListener;
+import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.injection.At;
 import org.spongepowered.asm.mixin.injection.Inject;
index 2bccd1c76c0ba2134b004c907ca9e6b8718c9368..3ac6988b2d839e2c472e5f22c72775cb58646c24 100644 (file)
@@ -6,10 +6,10 @@ import com.irtimaled.bbor.common.messages.InitializeClient;
 import com.irtimaled.bbor.common.messages.PayloadReader;
 import com.irtimaled.bbor.common.messages.SubscribeToServer;
 import net.minecraft.client.network.ClientPlayNetworkHandler;
-import net.minecraft.client.network.packet.CustomPayloadS2CPacket;
+import net.minecraft.network.PacketByteBuf;
 import net.minecraft.network.listener.ClientPlayPacketListener;
+import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
 import net.minecraft.util.Identifier;
-import net.minecraft.util.PacketByteBuf;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
 import org.spongepowered.asm.mixin.injection.At;
@@ -20,7 +20,7 @@ public abstract class MixinSCustomPayloadPlayPacket {
     @Shadow
     private Identifier channel;
 
-    @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/listener/ClientPlayPacketListener;onCustomPayload(Lnet/minecraft/client/network/packet/CustomPayloadS2CPacket;)V"))
+    @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/listener/ClientPlayPacketListener;onCustomPayload(Lnet/minecraft/network/packet/s2c/play/CustomPayloadS2CPacket;)V"))
     private void processPacket(ClientPlayPacketListener netHandlerPlayClient, CustomPayloadS2CPacket packet) {
         String channelName = channel.toString();
         if (channelName.startsWith("bbor:")) {
@@ -34,9 +34,8 @@ public abstract class MixinSCustomPayloadPlayPacket {
                         ((ClientPlayNetworkHandler) netHandlerPlayClient).sendPacket(SubscribeToServer.getPayload().build());
                         break;
                     }
-                    case AddBoundingBox.NAME:
-                    case AddBoundingBox.LEGACY: {
-                        EventBus.publish(AddBoundingBox.getEvent(reader, channelName));
+                    case AddBoundingBox.NAME: {
+                        EventBus.publish(AddBoundingBox.getEvent(reader));
                         break;
                     }
                 }
index ac684e500aa55fae78b277ce96b0052bdab6badc..36afaa96372f4013d53beab3da5422d90ceff9b2 100644 (file)
@@ -1,7 +1,7 @@
 package com.irtimaled.bbor.mixin.network.play.server;
 
 import com.irtimaled.bbor.client.interop.ClientInterop;
-import net.minecraft.client.network.packet.PlayerSpawnPositionS2CPacket;
+import net.minecraft.network.packet.s2c.play.PlayerSpawnPositionS2CPacket;
 import net.minecraft.util.math.BlockPos;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
diff --git a/src/main/java/com/irtimaled/bbor/mixin/resource/MixinResourcePackManager.java b/src/main/java/com/irtimaled/bbor/mixin/resource/MixinResourcePackManager.java
new file mode 100644 (file)
index 0000000..cc99033
--- /dev/null
@@ -0,0 +1,42 @@
+package com.irtimaled.bbor.mixin.resource;
+
+import com.google.common.collect.ImmutableMap;
+import net.minecraft.resource.DefaultResourcePack;
+import net.minecraft.resource.ResourcePackManager;
+import net.minecraft.resource.ResourcePackProfile;
+import net.minecraft.resource.ResourcePackSource;
+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.Redirect;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import java.util.Map;
+
+@Mixin(ResourcePackManager.class)
+public class MixinResourcePackManager {
+    private static final String BBOR = "bbor";
+    @Shadow
+    @Final
+    private ResourcePackProfile.Factory profileFactory;
+    private ResourcePackProfile resourcePackProfile;
+
+    @Inject(method = "<init>(Lnet/minecraft/resource/ResourcePackProfile$Factory;[Lnet/minecraft/resource/ResourcePackProvider;)V",
+            at = @At("RETURN"))
+    private void afterConstructor(CallbackInfo ci) {
+        resourcePackProfile = ResourcePackProfile.of(BBOR,
+                true,
+                () -> new DefaultResourcePack(BBOR),
+                this.profileFactory,
+                ResourcePackProfile.InsertionPosition.BOTTOM,
+                ResourcePackSource.PACK_SOURCE_BUILTIN);
+    }
+
+    @Redirect(method = "providePackProfiles", at = @At(value = "INVOKE", target = "Lcom/google/common/collect/ImmutableMap;copyOf(Ljava/util/Map;)Lcom/google/common/collect/ImmutableMap;"))
+    private ImmutableMap<String, ResourcePackProfile> beforeReturn(Map<String, ResourcePackProfile> map) {
+        map.put(BBOR, resourcePackProfile);
+        return ImmutableMap.copyOf(map);
+    }
+}
index 4a469cbb9f638d7df8c37919f59f97d8b5071672..340651ad319618c34356213c4862ee388f6a315a 100644 (file)
     "client.network.login.MixinClientLoginNetHandler",
     "client.network.play.MixinClientPlayNetHandler",
     "client.renderer.MixinGameRenderer",
-    "client.world.MixinClientWorld",
     "client.settings.MixinKeyBinding",
+    "client.world.MixinClientWorld",
     "network.play.server.MixinSChatPacket",
     "network.play.server.MixinSChunkDataPacket",
     "network.play.server.MixinSCommandListPacket",
     "network.play.server.MixinSCustomPayloadPlayPacket",
-    "network.play.server.MixinSSpawnPositionPacket"
+    "network.play.server.MixinSSpawnPositionPacket",
+    "resource.MixinResourcePackManager"
   ],
   "server": [
     "server.dedicated.MixinDedicatedServer"