From d337e6dcb0bd377e5c408df20b4dfc7b704ed626 Mon Sep 17 00:00:00 2001 From: LatvianModder Date: Thu, 18 Apr 2024 17:44:59 +0300 Subject: [PATCH] Ported some stuff from 1.20.1 --- .../mods/kubejs/BuiltinKubeJSPlugin.java | 2 + .../block/custom/CarpetBlockBuilder.java | 40 +++++++++++++++++++ .../mods/kubejs/core/ServerPlayerKJS.java | 28 ++++++++----- .../mods/kubejs/gui/chest/ChestMenuData.java | 5 ++- .../kubejs/gui/chest/CustomChestMenu.java | 7 ++-- 5 files changed, 66 insertions(+), 16 deletions(-) create mode 100644 src/main/java/dev/latvian/mods/kubejs/block/custom/CarpetBlockBuilder.java diff --git a/src/main/java/dev/latvian/mods/kubejs/BuiltinKubeJSPlugin.java b/src/main/java/dev/latvian/mods/kubejs/BuiltinKubeJSPlugin.java index 754a2bb39..a2261c002 100644 --- a/src/main/java/dev/latvian/mods/kubejs/BuiltinKubeJSPlugin.java +++ b/src/main/java/dev/latvian/mods/kubejs/BuiltinKubeJSPlugin.java @@ -26,6 +26,7 @@ import dev.latvian.mods.kubejs.block.SoundTypeWrapper; import dev.latvian.mods.kubejs.block.custom.BasicBlockJS; import dev.latvian.mods.kubejs.block.custom.ButtonBlockBuilder; +import dev.latvian.mods.kubejs.block.custom.CarpetBlockBuilder; import dev.latvian.mods.kubejs.block.custom.CropBlockBuilder; import dev.latvian.mods.kubejs.block.custom.FallingBlockBuilder; import dev.latvian.mods.kubejs.block.custom.FenceBlockBuilder; @@ -199,6 +200,7 @@ public void init() { RegistryInfo.BLOCK.addType("falling", FallingBlockBuilder.class, FallingBlockBuilder::new); RegistryInfo.BLOCK.addType("crop", CropBlockBuilder.class, CropBlockBuilder::new); RegistryInfo.BLOCK.addType("cardinal", HorizontalDirectionalBlockBuilder.class, HorizontalDirectionalBlockBuilder::new); + RegistryInfo.BLOCK.addType("carpet", CarpetBlockBuilder.class, CarpetBlockBuilder::new); RegistryInfo.ITEM.addType("basic", BasicItemJS.Builder.class, BasicItemJS.Builder::new); RegistryInfo.ITEM.addType("sword", SwordItemBuilder.class, SwordItemBuilder::new); diff --git a/src/main/java/dev/latvian/mods/kubejs/block/custom/CarpetBlockBuilder.java b/src/main/java/dev/latvian/mods/kubejs/block/custom/CarpetBlockBuilder.java new file mode 100644 index 000000000..0c21cbede --- /dev/null +++ b/src/main/java/dev/latvian/mods/kubejs/block/custom/CarpetBlockBuilder.java @@ -0,0 +1,40 @@ +package dev.latvian.mods.kubejs.block.custom; + +import dev.latvian.mods.kubejs.client.VariantBlockStateGenerator; +import dev.latvian.mods.kubejs.generator.AssetJsonGenerator; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.CarpetBlock; + +public class CarpetBlockBuilder extends ShapedBlockBuilder { + public CarpetBlockBuilder(ResourceLocation i) { + super(i, "_carpet"); + tagBoth(BlockTags.WOOL_CARPETS.location()); + } + + @Override + public Block createObject() { + return new CarpetBlock(createProperties()); + } + + @Override + protected void generateBlockStateJson(VariantBlockStateGenerator bs) { + var mod = newID("block/", "").toString(); + bs.variant("", (v) -> v.model(mod)); + } + + @Override + protected void generateBlockModelJsons(AssetJsonGenerator generator) { + var texture = textures.get("texture").getAsString(); + + generator.blockModel(id, m -> { + m.parent("minecraft:block/carpet"); + m.texture("wool", texture); + }); + } + + public CarpetBlockBuilder texture(String texture) { + return (CarpetBlockBuilder) textureAll(texture); + } +} \ No newline at end of file diff --git a/src/main/java/dev/latvian/mods/kubejs/core/ServerPlayerKJS.java b/src/main/java/dev/latvian/mods/kubejs/core/ServerPlayerKJS.java index d1073587b..2ce91ed39 100644 --- a/src/main/java/dev/latvian/mods/kubejs/core/ServerPlayerKJS.java +++ b/src/main/java/dev/latvian/mods/kubejs/core/ServerPlayerKJS.java @@ -21,7 +21,9 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.players.UserBanListEntry; import net.minecraft.util.Mth; +import net.minecraft.world.Container; import net.minecraft.world.MenuProvider; +import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -186,20 +188,22 @@ public AbstractContainerMenu createMenu(int i, Inventory inventory, Player playe }); } - default ItemStack[] kjs$captureInventory(boolean autoRestore) { + default Container kjs$captureInventory(boolean autoRestore) { var playerItems = kjs$self().getInventory().items; - var captured = new ItemStack[playerItems.size()]; + var captured = new SimpleContainer(playerItems.size()); var map = new HashMap(); - for (int i = 0; i < captured.length; i++) { + for (int i = 0; i < playerItems.size(); i++) { var c = playerItems.set(i, ItemStack.EMPTY); - if (autoRestore && !c.isEmpty()) { - map.put(i, c); - } + if (!c.isEmpty()) { + if (autoRestore) { + map.put(i, c); + } - captured[i] = c.copy(); + captured.setItem(i, c.copy()); + } } if (autoRestore && !map.isEmpty()) { @@ -213,12 +217,16 @@ public AbstractContainerMenu createMenu(int i, Inventory inventory, Player playe var data = new ChestMenuData(kjs$self(), title, Mth.clamp(rows, 1, 6)); gui.accept(data); - if (kjs$self().containerMenu instanceof CustomChestMenu open && open.data.rows == data.rows && open.data.title.equals(title)) { + if (kjs$self().containerMenu instanceof CustomChestMenu open) { data.capturedInventory = open.data.capturedInventory; + } else { + data.capturedInventory = kjs$captureInventory(true); + } + + if (kjs$self().containerMenu instanceof CustomChestMenu open && open.data.rows == data.rows && open.data.title.equals(title)) { open.data = data; data.sync(); } else { - data.capturedInventory = data.playerSlots ? new ItemStack[0] : kjs$captureInventory(true); data.sync(); kjs$self().openMenu(new MenuProvider() { @@ -229,7 +237,7 @@ public Component getDisplayName() { @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - return new CustomChestMenu(i, inventory, data); + return new CustomChestMenu(i, data); } }); } diff --git a/src/main/java/dev/latvian/mods/kubejs/gui/chest/ChestMenuData.java b/src/main/java/dev/latvian/mods/kubejs/gui/chest/ChestMenuData.java index 6359abe5b..15ee30c91 100644 --- a/src/main/java/dev/latvian/mods/kubejs/gui/chest/ChestMenuData.java +++ b/src/main/java/dev/latvian/mods/kubejs/gui/chest/ChestMenuData.java @@ -2,6 +2,7 @@ import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.Container; import net.minecraft.world.inventory.ClickType; import net.minecraft.world.item.ItemStack; @@ -9,7 +10,7 @@ public class ChestMenuData { public final ServerPlayer player; - public final Component title; + public Component title; public final int rows; public final ChestMenuSlot[] slots; public ChestMenuClickEvent.Callback anyClicked; @@ -17,7 +18,7 @@ public class ChestMenuData { public boolean playerSlots; public Runnable closed; public ItemStack mouseItem; - public ItemStack[] capturedInventory; + public Container capturedInventory; public ChestMenuData(ServerPlayer player, Component title, int rows) { this.player = player; diff --git a/src/main/java/dev/latvian/mods/kubejs/gui/chest/CustomChestMenu.java b/src/main/java/dev/latvian/mods/kubejs/gui/chest/CustomChestMenu.java index a086318c4..61eb24b9f 100644 --- a/src/main/java/dev/latvian/mods/kubejs/gui/chest/CustomChestMenu.java +++ b/src/main/java/dev/latvian/mods/kubejs/gui/chest/CustomChestMenu.java @@ -1,7 +1,6 @@ package dev.latvian.mods.kubejs.gui.chest; import dev.latvian.mods.kubejs.util.ConsoleJS; -import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.ClickType; @@ -23,7 +22,7 @@ public class CustomChestMenu extends AbstractContainerMenu { public ChestMenuData data; - public CustomChestMenu(int containerId, Inventory inventory, ChestMenuData data) { + public CustomChestMenu(int containerId, ChestMenuData data) { super(TYPES[data.rows - 1], containerId); this.data = data; @@ -38,12 +37,12 @@ public CustomChestMenu(int containerId, Inventory inventory, ChestMenuData data) if (data.playerSlots) { for (int y = 0; y < 3; y++) { for (int x = 0; x < 9; x++) { - addSlot(new Slot(inventory, x + y * 9 + 9, 8 + x * 18, 103 + y * 18 + k)); + addSlot(new Slot(data.capturedInventory, x + y * 9 + 9, 8 + x * 18, 103 + y * 18 + k)); } } for (int x = 0; x < 9; x++) { - addSlot(new Slot(inventory, x, 8 + x * 18, 161 + k)); + addSlot(new Slot(data.capturedInventory, x, 8 + x * 18, 161 + k)); } } else { for (int y = 0; y < 3; y++) {