diff --git a/common/src/main/java/mod/adrenix/nostalgic/config/ClientConfig.java b/common/src/main/java/mod/adrenix/nostalgic/config/ClientConfig.java index d8d7eca6d..072ba7128 100644 --- a/common/src/main/java/mod/adrenix/nostalgic/config/ClientConfig.java +++ b/common/src/main/java/mod/adrenix/nostalgic/config/ClientConfig.java @@ -337,7 +337,12 @@ public static class EyeCandy public boolean disableEmptyArmorTexture = CandyTweak.DISABLE_EMPTY_ARMOR_TEXTURE.register("disableEmptyArmorTexture"); public boolean disableEmptyShieldTexture = CandyTweak.DISABLE_EMPTY_SHIELD_TEXTURE.register("disableEmptyShieldTexture"); public boolean invertedPlayerLighting = CandyTweak.INVERTED_PLAYER_LIGHTING.register("invertedPlayerLighting"); + + // Creative Inventory Screen public Hotbar oldCreativeHotbar = CandyTweak.OLD_CREATIVE_HOTBAR.register("oldCreativeHotbar"); + public OldCreativeInventory oldCreativeInventory = CandyTweak.OLD_CREATIVE_INVENTORY.register("oldCreativeInventory"); + public String oldCreativeInventoryVersion = CandyTweak.OLD_CREATIVE_INVENTORY_VERSION.register("oldCreativeInventoryVersion"); + public boolean oldCreativeInventoryAlwaysShowModernItems = CandyTweak.OLD_CREATIVE_INVENTORY_ALWAYS_SHOW_MODERN_ITEMS.register("oldCreativeInventoryAlwaysShowModernItems"); // Generic Screen diff --git a/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/ClassicCreativeModeInventoryScreen.java b/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/ClassicCreativeModeInventoryScreen.java new file mode 100644 index 000000000..59f537937 --- /dev/null +++ b/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/ClassicCreativeModeInventoryScreen.java @@ -0,0 +1,140 @@ +package mod.adrenix.nostalgic.helper.candy.screen.inventory; + +import mod.adrenix.nostalgic.util.common.asset.TextureLocation; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; +import net.minecraft.client.gui.screens.inventory.EffectRenderingInventoryScreen; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.component.DataComponents; +import net.minecraft.network.chat.CommonComponents; +import net.minecraft.world.Container; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.SimpleContainer; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; + +public class ClassicCreativeModeInventoryScreen extends EffectRenderingInventoryScreen { + + private static final int NUM_ROWS = 5; + private static final int NUM_COLS = 9; + private static final int CONTAINER_SIZE = 45; + static final SimpleContainer CONTAINER = new SimpleContainer(CONTAINER_SIZE); + LocalPlayer player; + + public ClassicCreativeModeInventoryScreen(LocalPlayer localPlayer) { + super(new ClassicCreativeModeInventoryScreen.ClassicItemPickerMenu(localPlayer), localPlayer.getInventory(), CommonComponents.EMPTY); + localPlayer.containerMenu = this.menu; + this.menu.minecraft = this.minecraft; + this.menu.refreshItems(); + player = localPlayer; + } + + @Override + protected void init() { + super.init(); + + this.imageWidth = this.width / 2 + 120; + this.imageHeight = 180; + this.leftPos = this.width / 2 - 120; + this.topPos = 30; + } + + @Override + protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) { + return; + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { + + int left = this.leftPos; + int top = this.topPos; + + guiGraphics.fillGradient(left, top, this.imageWidth, this.imageHeight, -1878719232, -1070583712); + guiGraphics.drawCenteredString(this.font, "Select block",this.width / 2, 40,16777215); + //guiGraphics.blit(TextureLocation.ALL_ITEMS, left, top, 0, 0, this.imageWidth, this.imageHeight); +/* + int scrollLeft = left + 154; + int l = scrollLeft + 17; + int n = l + 160 + 2; + int scrollTop = top + 17 + (int)((float)(n - l - 17) * this.scrollOffs); + + guiGraphics.blit(TextureLocation.ALL_ITEMS, scrollLeft, scrollTop, 0, 208, 16, 16);*/ + } + + public void renderBackground(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + this.renderBg(guiGraphics, partialTick, mouseX, mouseY); + } + + @Override + protected void slotClicked(Slot slot, int slotId, int mouseButton, ClickType type) { + if (slot != null && type == ClickType.PICKUP) { + this.minecraft.player.setItemInHand(InteractionHand.MAIN_HAND,slot.getItem()); + this.minecraft.player.inventoryMenu.broadcastChanges(); + this.onClose(); + } + } + + public static class ClassicItemPickerMenu extends CreativeModeInventoryScreen.ItemPickerMenu { + Minecraft minecraft; + Player localPlayer; + public float currentScroll = 0.0f; + public ClassicItemPickerMenu(Player player) { + super(player); + this.localPlayer = player; + this.slots.clear(); + refreshItems(); + Inventory inventory = player.getInventory(); + + int i; + for (i = 0; i < NUM_ROWS; ++i) { + for (int j = 0; j < NUM_COLS; ++j) { + this.addSlot(new ClassicCreativeModeInventoryScreen.CustomCreativeSlot(ClassicCreativeModeInventoryScreen.CONTAINER, i * 9 + j, 14 + j * 24, 27 + i * 24)); + } + } + this.scrollTo(0.0F); + } + + public void refreshItems() { + this.items.clear(); + this.items.addAll(OldCreativeModeItemHelper.GetClassicItems()); + } + @Override + public void scrollTo(float pos) { + int i = this.getRowIndexForScroll(pos); + this.currentScroll = pos; + for(int j = 0; j < NUM_ROWS; ++j) { + for(int k = 0; k < NUM_COLS; ++k) { + int l = k + (j + i) * NUM_COLS; + if (l >= 0 && l < this.items.size()) { + ClassicCreativeModeInventoryScreen.CONTAINER.setItem(k + j * NUM_COLS, (ItemStack)this.items.get(l)); + } else { + ClassicCreativeModeInventoryScreen.CONTAINER.setItem(k + j * NUM_COLS, ItemStack.EMPTY); + } + } + } + } + } + @Environment(EnvType.CLIENT) + private static class CustomCreativeSlot extends Slot { + public CustomCreativeSlot(Container container, int slot, int x, int y) { + super(container, slot, x, y); + } + + public boolean mayPickup(Player player) { + ItemStack itemStack = this.getItem(); + if (super.mayPickup(player) && !itemStack.isEmpty()) { + return itemStack.isItemEnabled(player.level().enabledFeatures()) && !itemStack.has(DataComponents.CREATIVE_SLOT_LOCK); + } else { + return itemStack.isEmpty(); + } + } + + } +} diff --git a/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/OldCreativeModeInventoryScreen.java b/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/OldCreativeModeInventoryScreen.java new file mode 100644 index 000000000..3d3cf672a --- /dev/null +++ b/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/OldCreativeModeInventoryScreen.java @@ -0,0 +1,331 @@ +package mod.adrenix.nostalgic.helper.candy.screen.inventory; + +import mod.adrenix.nostalgic.tweak.config.CandyTweak; +import mod.adrenix.nostalgic.tweak.enums.OldCreativeInventory; +import mod.adrenix.nostalgic.util.common.asset.TextureLocation; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.*; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.component.DataComponents; +import net.minecraft.network.chat.CommonComponents; +import net.minecraft.util.Mth; +import net.minecraft.world.Container; +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; +import net.minecraft.world.inventory.ClickType; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.*; +import org.jetbrains.annotations.Nullable; + + +@Environment(EnvType.CLIENT) +public class OldCreativeModeInventoryScreen extends EffectRenderingInventoryScreen { + private static final int NUM_ROWS = 9; + private static final int NUM_COLS = 8; + private static final int CONTAINER_SIZE = 72; + static final SimpleContainer CONTAINER = new SimpleContainer(CONTAINER_SIZE); + private CreativeInventoryListener listener; + + public OldCreativeModeInventoryScreen(LocalPlayer localPlayer) { + super(new OldCreativeModeInventoryScreen.OldItemPickerMenu(localPlayer), localPlayer.getInventory(), CommonComponents.EMPTY); + localPlayer.containerMenu = this.menu; + this.menu.minecraft = this.minecraft; + this.imageHeight = 208; + this.imageWidth = 176; + this.leftPos = (this.width - this.imageWidth) / 2; + this.topPos = (this.height - this.imageHeight) / 2; + this.menu.refreshItems(); + } + + @Override + protected void init() { + super.init(); + + this.minecraft.player.inventoryMenu.removeSlotListener(this.listener); + this.listener = new CreativeInventoryListener(this.minecraft); + this.minecraft.player.inventoryMenu.addSlotListener(this.listener); + } + + private boolean hasClickedOutside; + @Override + protected void slotClicked(@Nullable Slot slot, int slotId, int mouseButton, ClickType type) { + boolean bl = type == ClickType.QUICK_MOVE; + type = slotId == -999 && type == ClickType.PICKUP ? ClickType.THROW : type; + if (slot != null && !slot.mayPickup(this.minecraft.player)) { + return; + } + int j; + ItemStack itemStack; + ItemStack itemStack2; + if (!this.menu.getCarried().isEmpty() && this.hasClickedOutside) { + if (mouseButton == 0) { + this.minecraft.player.drop(((CreativeModeInventoryScreen.ItemPickerMenu)this.menu).getCarried(), true); + this.minecraft.gameMode.handleCreativeModeItemDrop(((CreativeModeInventoryScreen.ItemPickerMenu)this.menu).getCarried()); + this.menu.setCarried(ItemStack.EMPTY); + } + + if (mouseButton == 1) { + itemStack = ((CreativeModeInventoryScreen.ItemPickerMenu)this.menu).getCarried().split(1); + this.minecraft.player.drop(itemStack, true); + this.minecraft.gameMode.handleCreativeModeItemDrop(itemStack); + } + } else if (slot != null && slot.container == CONTAINER) { + itemStack = ((CreativeModeInventoryScreen.ItemPickerMenu) this.menu).getCarried(); + itemStack2 = slot.getItem(); + if (type == ClickType.SWAP) { + if (!itemStack2.isEmpty()) { + this.minecraft.player.getInventory().setItem(mouseButton, itemStack2.copyWithCount(itemStack2.getMaxStackSize())); + this.minecraft.player.inventoryMenu.broadcastChanges(); + } + + return; + } + + ItemStack itemStack3; + if (type == ClickType.CLONE) { + if (this.menu.getCarried().isEmpty() && slot.hasItem()) { + itemStack3 = slot.getItem(); + this.menu.setCarried(itemStack3.copyWithCount(itemStack3.getMaxStackSize())); + } + + return; + } + + if (type == ClickType.THROW) { + if (!itemStack2.isEmpty()) { + itemStack3 = itemStack2.copyWithCount(mouseButton == 0 ? 1 : itemStack2.getMaxStackSize()); + this.minecraft.player.drop(itemStack3, true); + this.minecraft.gameMode.handleCreativeModeItemDrop(itemStack3); + } + + return; + } + + if (!itemStack.isEmpty() && !itemStack2.isEmpty() && ItemStack.isSameItemSameComponents(itemStack, itemStack2)) { + if (mouseButton == 0) { + if (bl) { + itemStack.setCount(itemStack.getMaxStackSize()); + } else if (itemStack.getCount() < itemStack.getMaxStackSize()) { + itemStack.grow(1); + } + } else { + itemStack.shrink(1); + } + } else if (!itemStack2.isEmpty() && itemStack.isEmpty()) { + j = bl ? itemStack2.getMaxStackSize() : itemStack2.getCount(); + this.menu.setCarried(itemStack2.copyWithCount(j)); + } else if (mouseButton == 0) { + this.menu.setCarried(ItemStack.EMPTY); + } else if (!this.menu.getCarried().isEmpty()) { + this.menu.getCarried().shrink(1); + } + } else if (this.menu != null) { + var ff = CONTAINER_SIZE; + var ts = CONTAINER_SIZE - 9; + itemStack = slot == null ? ItemStack.EMPTY : this.menu.getSlot(slot.index).getItem(); + this.menu.clicked(slot == null ? slotId : slot.index, mouseButton, type, this.minecraft.player); + if (AbstractContainerMenu.getQuickcraftHeader(mouseButton) == 2) { + for(int k = 0; k < 9; ++k) { + this.minecraft.gameMode.handleCreativeModeItemAdd(this.menu.getSlot(CONTAINER_SIZE + k).getItem(), ts + k); + } + } else if (slot != null) { + itemStack2 = this.menu.getSlot(slot.index).getItem(); + this.minecraft.gameMode.handleCreativeModeItemAdd(itemStack2, slot.index - this.menu.slots.size() + 9 + ts); + j = ff + mouseButton; + if (type == ClickType.SWAP) { + this.minecraft.gameMode.handleCreativeModeItemAdd(itemStack, j - this.menu.slots.size() + 9 + ts); + } else if (type == ClickType.THROW && !itemStack.isEmpty()) { + ItemStack itemStack4 = itemStack.copyWithCount(mouseButton == 0 ? 1 : itemStack.getMaxStackSize()); + this.minecraft.player.drop(itemStack4, true); + this.minecraft.gameMode.handleCreativeModeItemDrop(itemStack4); + } + + this.minecraft.player.inventoryMenu.broadcastChanges(); + } + } + } + + protected boolean hasClickedOutside(double mouseX, double mouseY, int guiLeft, int guiTop, int mouseButton) { + return mouseX < (double)guiLeft || mouseY < (double)guiTop || mouseX >= (double)(guiLeft + this.imageWidth) || mouseY >= (double)(guiTop + this.imageHeight); + } + + private boolean scrolling; + private float scrollOffs; + + private boolean canScroll() { + return this.menu.canScroll(); + } + + protected boolean insideScrollbar(double mouseX, double mouseY) { + int i = this.leftPos; + int j = this.topPos; + int k = i + 155; + int l = j + 17; + int m = k + 14; + int n = l + 160 + 2; + return mouseX >= (double)k && mouseY >= (double)l && mouseX < (double)m && mouseY < (double)n; + } + public boolean mouseScrolled(double mouseX, double mouseY, double scrollX, double scrollY) { + if (!this.canScroll()) { + return false; + } else { + this.scrollOffs = this.menu.subtractInputFromScroll(this.scrollOffs, scrollY); + this.menu.scrollTo(this.scrollOffs); + return true; + } + } + public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) { + if (this.scrolling) { + int i = this.topPos + 16; + int j = i + 160 + 2; + this.scrollOffs = ((float)mouseY - (float)i - 7.5F) / ((float)(j - i) - 15.0F); + this.scrollOffs = Mth.clamp(this.scrollOffs, 0.0F, 1.0F); + this.menu.scrollTo(this.scrollOffs); + return true; + } else { + return super.mouseDragged(mouseX, mouseY, button, dragX, dragY); + } + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + if (button == 0) { + if ( this.insideScrollbar(mouseX, mouseY)) { + this.scrolling = this.canScroll(); + return true; + } + } + this.hasClickedOutside = hasClickedOutside(mouseX, mouseY, this.leftPos, this.topPos, button); + return super.mouseClicked(mouseX, mouseY, button); + } + + @Override + public boolean mouseReleased(double mouseX, double mouseY, int button) { + if (button == 0) { + this.scrolling = false; + } + + return super.mouseReleased(mouseX, mouseY, button); + } + @Override + protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) { + guiGraphics.drawString(this.font, "Item selection", this.titleLabelX, this.titleLabelY, 4210752, false); + } + + @Override + protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { + + int left = this.leftPos; + int top = this.topPos; + + guiGraphics.blit(TextureLocation.ALL_ITEMS, left, top, 0, 0, this.imageWidth, this.imageHeight); + + int scrollLeft = left + 154; + int l = scrollLeft + 17; + int n = l + 160 + 2; + int scrollTop = top + 17 + (int)((float)(n - l - 17) * this.scrollOffs); + + guiGraphics.blit(TextureLocation.ALL_ITEMS, scrollLeft, scrollTop, 0, 208, 16, 16); + } + + @Override + public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTick) { + super.render(guiGraphics, mouseX, mouseY, partialTick); + + this.renderTooltip(guiGraphics, mouseX, mouseY); + } + + @Environment(EnvType.CLIENT) + private static class CustomCreativeSlot extends Slot { + public CustomCreativeSlot(Container container, int slot, int x, int y) { + super(container, slot, x, y); + } + + public boolean mayPickup(Player player) { + ItemStack itemStack = this.getItem(); + if (super.mayPickup(player) && !itemStack.isEmpty()) { + return itemStack.isItemEnabled(player.level().enabledFeatures()) && !itemStack.has(DataComponents.CREATIVE_SLOT_LOCK); + } else { + return itemStack.isEmpty(); + } + } + + } + + @Override + protected void containerTick() { + super.containerTick(); + + if (CandyTweak.OLD_CREATIVE_INVENTORY.get() != OldCreativeInventory.BETA) + this.minecraft.setScreen(new CreativeModeInventoryScreen( this.minecraft.player, minecraft.level.enabledFeatures(), false)); + } + + public static class OldItemPickerMenu extends CreativeModeInventoryScreen.ItemPickerMenu { + + Player localPlayer; + Minecraft minecraft; + public float currentScroll = 0.0f; + + protected int calculateItemRowCount() { + return Mth.positiveCeilDiv(this.items.size(), NUM_COLS) - NUM_ROWS; + } + + protected float subtractInputFromScroll(float scrollOffs, double input) { + return Mth.clamp(scrollOffs - (float)(input / (double)this.calculateItemRowCount()), 0.0F, 1.0F); + } + + public OldItemPickerMenu(Player player) { + super(player); + this.localPlayer = player; + this.slots.clear(); + refreshItems(); + Inventory inventory = player.getInventory(); + + int i; + for(i = 0; i < NUM_ROWS; ++i) { + for(int j = 0; j < NUM_COLS; ++j) { + this.addSlot(new OldCreativeModeInventoryScreen.CustomCreativeSlot(OldCreativeModeInventoryScreen.CONTAINER, i * 8 + j, 8 + j * 18, 18 + i * 18)); + } + } + + for(i = 0; i < 9; ++i) { + this.addSlot(new Slot(inventory, i, 8 + i * 18, 184)); + } + + this.scrollTo(0.0F); + } + public void refreshItems() { + this.items.clear(); + this.items.addAll(OldCreativeModeItemHelper.GetItems()); + } + + public boolean canTakeItemForPickAll(ItemStack stack, Slot slot) { + return slot.container != OldCreativeModeInventoryScreen.CONTAINER; + } + + public boolean canDragTo(Slot slot) { + return slot.container != OldCreativeModeInventoryScreen.CONTAINER; + } + + @Override + public void scrollTo(float pos) { + int i = this.getRowIndexForScroll(pos); + this.currentScroll = pos; + for(int j = 0; j < NUM_ROWS; ++j) { + for(int k = 0; k < NUM_COLS; ++k) { + int l = k + (j + i) * NUM_COLS; + if (l >= 0 && l < this.items.size()) { + OldCreativeModeInventoryScreen.CONTAINER.setItem(k + j * NUM_COLS, (ItemStack)this.items.get(l)); + } else { + OldCreativeModeInventoryScreen.CONTAINER.setItem(k + j * NUM_COLS, ItemStack.EMPTY); + } + } + } + } + } +} diff --git a/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/OldCreativeModeItemHelper.java b/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/OldCreativeModeItemHelper.java new file mode 100644 index 000000000..3b4d18968 --- /dev/null +++ b/common/src/main/java/mod/adrenix/nostalgic/helper/candy/screen/inventory/OldCreativeModeItemHelper.java @@ -0,0 +1,501 @@ +package mod.adrenix.nostalgic.helper.candy.screen.inventory; + +import mod.adrenix.nostalgic.tweak.config.CandyTweak; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.*; + +import java.util.ArrayList; +import java.util.Collection; + +public class OldCreativeModeItemHelper { + + + public static Collection GetItems() { + var ver = VersionInt(CandyTweak.OLD_CREATIVE_INVENTORY_VERSION.get()); + return GetItemsFromVersion(ver); + } + + + public static Collection GetClassicItems() { + var items = new ArrayList(); + int ver = 99999999; + + if (ver >= VersionInt("p0.0")) items.add(Items.STONE); + if (ver >= VersionInt("p0.0")) items.add(Items.COBBLESTONE); + if (ver >= VersionInt("p0.0")) items.add(Items.BRICKS); + if (ver >= VersionInt("p0.0")) items.add(Items.DIRT); + if (ver >= VersionInt("p0.0")) items.add(Items.OAK_PLANKS); + if (ver >= VersionInt("p0.0")) items.add(Items.OAK_LOG); + if (ver >= VersionInt("p0.0")) items.add(Items.OAK_LEAVES); + if (ver >= VersionInt("p0.0")) items.add(Items.GLASS); + if (ver >= VersionInt("p0.0")) items.add(Items.SMOOTH_STONE_SLAB); + if (ver >= VersionInt("p0.0")) items.add(Items.MOSSY_COBBLESTONE); + if (ver >= VersionInt("p0.0")) items.add(Items.OAK_SAPLING); + if (ver >= VersionInt("p0.0")) items.add(Items.DANDELION); + if (ver >= VersionInt("p0.0")) items.add(Items.POPPY); + if (ver >= VersionInt("p0.0")) items.add(Items.BROWN_MUSHROOM); + if (ver >= VersionInt("p0.0")) items.add(Items.RED_MUSHROOM); + if (ver >= VersionInt("p0.0")) items.add(Items.SAND); + if (ver >= VersionInt("p0.0")) items.add(Items.GRAVEL); + if (ver >= VersionInt("p0.0")) items.add(Items.SPONGE); + + if (ver >= VersionInt("p0.0")) items.add(Items.RED_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.ORANGE_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.YELLOW_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.LIME_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.GREEN_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.CYAN_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.LIGHT_BLUE_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.BLUE_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.BLUE_WOOL); // dunno what to use here since this wool colour doesn't exist anymore + if (ver >= VersionInt("p0.0")) items.add(Items.PURPLE_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.MAGENTA_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.PINK_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.PINK_WOOL); // dunno what to use here since this wool colour doesn't exist anymore + //if (ver >= VersionInt("p0.0")) items.add(Items.BLACK_WOOL); // Black wool didn't exist + if (ver >= VersionInt("p0.0")) items.add(Items.GRAY_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.LIGHT_GRAY_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.WHITE_WOOL); + if (ver >= VersionInt("p0.0")) items.add(Items.COAL_ORE); + if (ver >= VersionInt("p0.0")) items.add(Items.IRON_ORE); + if (ver >= VersionInt("p0.0")) items.add(Items.GOLD_ORE); + if (ver >= VersionInt("p0.0")) items.add(Items.IRON_BLOCK); + if (ver >= VersionInt("p0.0")) items.add(Items.GOLD_BLOCK); + if (ver >= VersionInt("p0.0")) items.add(Items.BOOKSHELF); + if (ver >= VersionInt("p0.0")) items.add(Items.TNT); + if (ver >= VersionInt("p0.0")) items.add(Items.OBSIDIAN); + + + var itemstacks = new ArrayList(); + + for (Item item : items) { + itemstacks.add(new ItemStack(item)); + } + + return itemstacks; + } + + + // ABCDEFG + // A = Release State: 0 (Pre-Classic), 1 (Classic/Indev), 2 (Alpha), 3 (Beta), 4 (Release). 4 by default (Release 1.2.5) + // BC DE FG = Version: 01 02 05 by default (Release 1.2.5) + public static int ShowAsVersion = 4010205; + + + // Cursed, I'm so sorry. + public static int VersionInt(String string) { + int b = 0; + int state = 1000000; + int major = 10000; + int minor = 100; + int patch = 1; + + if (string.startsWith("p")) {b += state * 0;} // starts with p, we're pre classic. + else if (string.startsWith("c")) {b += state * 1;} // starts with c, we're classic. + else if (string.startsWith("i")) {b += state * 1;} // starts with i, we're indev. + else if (string.startsWith("a")) {b += state * 2;} // starts with a, we're alpha. + else if (string.startsWith("b")) {b += state * 3;} // starts with b, we're beta. + else if (string.startsWith("r")) {b += state * 4;} // starts with r, we're release. + else {string = "r"+string; b += state * 4;} // Assume release + + String[] splits = string.substring(1).split("[.]"); + + if (splits.length >= 1) b += Integer.valueOf(splits[0]) * major; + if (splits.length >= 2) b += Integer.valueOf(splits[1]) * minor; + if (splits.length >= 3) b += Integer.valueOf(splits[2]) * patch; + + return b; + + } + public static Collection GetItemsFromVersion(int ver) { + var items = new ArrayList(); + + // This looks really horrific but the old minecraft versions manually did the order of blocks in the inventory + + //BLOCKS + if (ver >= VersionInt("p0.0.1")) items.add(Items.COBBLESTONE); // Pre-classic build 2 + if (ver >= VersionInt("p0.0.0")) items.add(Items.STONE); // Pre-classic build 1 + if (ver >= VersionInt("i0.31")) items.add(Items.DIAMOND_ORE); // Indev 0.31 + if (ver >= VersionInt("c0.0.14")) items.add(Items.GOLD_ORE); // c0.0.14a + if (ver >= VersionInt("c0.0.14")) items.add(Items.IRON_ORE); // c0.0.14a + if (ver >= VersionInt("c0.0.14")) items.add(Items.COAL_ORE); // c0.0.14a + if (ver >= VersionInt("1.3.1")) items.add(Items.EMERALD_ORE); + if (ver >= VersionInt("b1.2")) items.add(Items.LAPIS_ORE); // b1.2 + if (ver >= VersionInt("a1.0.1")) items.add(Items.REDSTONE_ORE); // a1.0.1 + if (ver >= VersionInt("b1.8")) items.add(Items.STONE_BRICKS); // b1.8 + if (ver >= VersionInt("b1.8")) items.add(Items.MOSSY_STONE_BRICKS); // b1.8 + if (ver >= VersionInt("b1.8")) items.add(Items.CRACKED_STONE_BRICKS); + if (ver >= VersionInt("1.2")) items.add(Items.CHISELED_STONE_BRICKS); + if (ver >= VersionInt("a1.0.11")) items.add(Items.CLAY); + if (ver >= VersionInt("i0.31.05")) items.add(Items.DIAMOND_BLOCK); + if (ver >= VersionInt("c0.0.20")) items.add(Items.GOLD_BLOCK); + if (ver >= VersionInt("c0.0.20")) items.add(Items.IRON_BLOCK); + if (ver >= VersionInt("1.6.1")) items.add(Items.COAL_BLOCK); + if (ver >= VersionInt("1.3.1")) items.add(Items.EMERALD_BLOCK); + if (ver >= VersionInt("c0.0.12")) items.add(Items.BEDROCK); + if (ver >= VersionInt("b1.2")) items.add(Items.LAPIS_BLOCK); + if (ver >= VersionInt("1.5")) items.add(Items.REDSTONE_BLOCK); + if (ver >= VersionInt("c0.26")) items.add(Items.BRICKS); + if (ver >= VersionInt("c0.26")) items.add(Items.MOSSY_COBBLESTONE); + if (ver >= VersionInt("c0.26")) items.add(Items.SMOOTH_STONE_SLAB); + if (ver >= VersionInt("b1.3")) items.add(Items.SANDSTONE_SLAB); + if (ver >= VersionInt("b1.3")) items.add(Items.OAK_SLAB); + if (ver >= VersionInt("b1.3")) items.add(Items.COBBLESTONE_SLAB); + if (ver >= VersionInt("b1.8")) items.add(Items.BRICK_SLAB); + if (ver >= VersionInt("b1.8")) items.add(Items.STONE_BRICK_SLAB); + if (ver >= VersionInt("c0.28")) items.add(Items.OBSIDIAN); + if (ver >= VersionInt("a1.2.0")) items.add(Items.NETHERRACK); + if (ver >= VersionInt("a1.2.0")) items.add(Items.SOUL_SAND); + if (ver >= VersionInt("a1.2.0")) items.add(Items.GLOWSTONE); + if (ver >= VersionInt("c0.0.14")) items.add(Items.OAK_LOG); + if (ver >= VersionInt("b1.2")) items.add(Items.SPRUCE_LOG); + if (ver >= VersionInt("b1.2")) items.add(Items.BIRCH_LOG); + if (ver >= VersionInt("1.2")) items.add(Items.JUNGLE_LOG); + if (ver >= VersionInt("1.16")) items.add(Items.WARPED_STEM); + if (ver >= VersionInt("1.16")) items.add(Items.CRIMSON_STEM); + if (ver >= VersionInt("c0.0.14")) items.add(Items.OAK_LEAVES); + if (ver >= VersionInt("b1.2")) items.add(Items.SPRUCE_LEAVES); + if (ver >= VersionInt("b1.2")) items.add(Items.BIRCH_LEAVES); + if (ver >= VersionInt("1.2")) items.add(Items.JUNGLE_LEAVES); + if (ver >= VersionInt("1.7.1")) items.add(Items.DARK_OAK_LEAVES); + if (ver >= VersionInt("1.7.1")) items.add(Items.ACACIA_LEAVES); + if (ver >= VersionInt("1.16")) items.add(Items.WARPED_WART_BLOCK); + if (ver >= VersionInt("1.16")) items.add(Items.NETHER_WART_BLOCK); + if (ver >= VersionInt("p0.0.1")) items.add(Items.DIRT); + if (ver >= VersionInt("p0.0.0")) items.add(Items.GRASS_BLOCK); + if (ver >= VersionInt("c0.0.14")) items.add(Items.SAND); + if (ver >= VersionInt("b1.2")) items.add(Items.SANDSTONE); + if (ver >= VersionInt("1.2.4")) items.add(Items.CHISELED_SANDSTONE); + if (ver >= VersionInt("1.2.4")) items.add(Items.CUT_SANDSTONE); + if (ver >= VersionInt("c0.0.14")) items.add(Items.GRAVEL); + if (ver >= VersionInt("b1.5")) items.add(Items.COBWEB); + if (ver >= VersionInt("p0.0.1")) items.add(Items.OAK_PLANKS); + if (ver >= VersionInt("1.2.4")) items.add(Items.SPRUCE_PLANKS); + if (ver >= VersionInt("1.2.4")) items.add(Items.BIRCH_PLANKS); + if (ver >= VersionInt("1.2.4")) items.add(Items.JUNGLE_PLANKS); + if (ver >= VersionInt("1.7.1")) items.add(Items.DARK_OAK_PLANKS); + if (ver >= VersionInt("1.7.1")) items.add(Items.ACACIA_PLANKS); + if (ver >= VersionInt("1.16")) items.add(Items.WARPED_PLANKS); + if (ver >= VersionInt("1.16")) items.add(Items.CRIMSON_PLANKS); + if (ver >= VersionInt("p0.0.2")) items.add(Items.OAK_SAPLING); + if (ver >= VersionInt("b1.5")) items.add(Items.SPRUCE_SAPLING); + if (ver >= VersionInt("b1.5")) items.add(Items.BIRCH_SAPLING); + if (ver >= VersionInt("1.2")) items.add(Items.JUNGLE_SAPLING); + if (ver >= VersionInt("1.7.1")) items.add(Items.DARK_OAK_SAPLING); + if (ver >= VersionInt("1.7.1")) items.add(Items.ACACIA_SAPLING); + if (ver >= VersionInt("1.16")) items.add(Items.WARPED_FUNGUS); + if (ver >= VersionInt("1.16")) items.add(Items.CRIMSON_FUNGUS); + if (ver >= VersionInt("b1.6")) items.add(Items.DEAD_BUSH); + if (ver >= VersionInt("c0.0.19")) items.add(Items.SPONGE); + if (ver >= VersionInt("a1.0.4")) items.add(Items.ICE); + if (ver >= VersionInt("a1.0.5")) items.add(Items.SNOW_BLOCK); + if (ver >= VersionInt("c0.0.20")) items.add(Items.DANDELION); + if (ver >= VersionInt("c0.0.20")) items.add(Items.POPPY); + if (ver >= VersionInt("c0.0.20")) items.add(Items.BROWN_MUSHROOM); + if (ver >= VersionInt("c0.0.20")) items.add(Items.RED_MUSHROOM); + if (ver >= VersionInt("a1.0.11") && ver < VersionInt("1.0.0")) items.add(Items.SUGAR_CANE); + if (ver >= VersionInt("a1.0.6")) items.add(Items.CACTUS); + if (ver >= VersionInt("b1.8")) items.add(Items.MELON); + if (ver >= VersionInt("a1.2.0")) items.add(Items.CARVED_PUMPKIN); + if (ver >= VersionInt("a1.2.0")) items.add(Items.JACK_O_LANTERN); + if (ver >= VersionInt("b1.8")) items.add(Items.VINE); + if (ver >= VersionInt("b1.8")) items.add(Items.IRON_BARS); + if (ver >= VersionInt("b1.8")) items.add(Items.GLASS_PANE); + if (ver >= VersionInt("b1.9")) items.add(Items.NETHER_BRICKS); + if (ver >= VersionInt("b1.9")) items.add(Items.NETHER_BRICK_FENCE); + if (ver >= VersionInt("b1.9")) items.add(Items.NETHER_BRICK_STAIRS); + if (ver >= VersionInt("b1.9.4")) items.add(Items.END_STONE); + if (ver >= VersionInt("b1.9")) items.add(Items.MYCELIUM); + if (ver >= VersionInt("b1.9")) items.add(Items.LILY_PAD); + if (ver >= VersionInt("b1.6")) items.add(Items.SHORT_GRASS); + if (ver >= VersionInt("b1.6")) items.add(Items.FERN); + if (ver >= VersionInt("i0.31.04")) items.add(Items.CHEST); + if (ver >= VersionInt("i0.31.06")) items.add(Items.CRAFTING_TABLE); + if (ver >= VersionInt("c0.0.19")) items.add(Items.GLASS); + if (ver >= VersionInt("c0.26")) items.add(Items.TNT); + if (ver >= VersionInt("c0.26")) items.add(Items.BOOKSHELF); + if (ver >= VersionInt("c0.0.20")) items.add(Items.WHITE_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.ORANGE_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.MAGENTA_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.LIGHT_BLUE_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.YELLOW_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.LIME_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.PINK_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.GRAY_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.LIGHT_GRAY_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.CYAN_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.PURPLE_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.BLUE_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.BROWN_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.GREEN_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.RED_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.BLACK_WOOL); + if (ver >= VersionInt("b1.2")) items.add(Items.DISPENSER); + if (ver >= VersionInt("i0.31.08")) items.add(Items.FURNACE); + if (ver >= VersionInt("b1.2")) items.add(Items.NOTE_BLOCK); + if (ver >= VersionInt("a1.0.14")) items.add(Items.JUKEBOX); + if (ver >= VersionInt("b1.7")) items.add(Items.STICKY_PISTON); + if (ver >= VersionInt("b1.7")) items.add(Items.PISTON); + if (ver >= VersionInt("a1.0.17")) items.add(Items.OAK_FENCE); + if (ver >= VersionInt("b1.8")) items.add(Items.OAK_FENCE_GATE); + if (ver >= VersionInt("i0.31.09")) items.add(Items.LADDER); + if (ver >= VersionInt("i0.31.10")) items.add(Items.RAIL); + if (ver >= VersionInt("b1.5")) items.add(Items.POWERED_RAIL); + if (ver >= VersionInt("b1.5")) items.add(Items.DETECTOR_RAIL); + if (ver >= VersionInt("i0.31")) items.add(Items.TORCH); + if (ver >= VersionInt("i0.31.12")) items.add(Items.OAK_STAIRS); + if (ver >= VersionInt("i0.31.12")) items.add(Items.COBBLESTONE_STAIRS); + if (ver >= VersionInt("b1.8")) items.add(Items.BRICK_STAIRS); + if (ver >= VersionInt("b1.8")) items.add(Items.STONE_BRICK_STAIRS); + if (ver >= VersionInt("a1.0.1")) items.add(Items.LEVER); + if (ver >= VersionInt("a1.0.1")) items.add(Items.STONE_PRESSURE_PLATE); + if (ver >= VersionInt("a1.0.1")) items.add(Items.OAK_PRESSURE_PLATE); + if (ver >= VersionInt("a1.0.1")) items.add(Items.REDSTONE_TORCH); + if (ver >= VersionInt("a1.0.1")) items.add(Items.STONE_BUTTON); + if (ver >= VersionInt("b1.6")) items.add(Items.OAK_TRAPDOOR); + if (ver >= VersionInt("b1.9.3")) items.add(Items.ENCHANTING_TABLE); + if (ver >= VersionInt("1.2")) items.add(Items.REDSTONE_LAMP); + + // ITEMS + if (ver >= VersionInt("i0.31.01")) items.add(Items.IRON_SHOVEL); + if (ver >= VersionInt("i0.31.02")) items.add(Items.IRON_PICKAXE); + if (ver >= VersionInt("i0.31.02")) items.add(Items.IRON_AXE); + if (ver >= VersionInt("i0.31.02")) items.add(Items.FLINT_AND_STEEL); + if (ver >= VersionInt("i0.31.01")) items.add(Items.APPLE); + if (ver >= VersionInt("i0.31.03")) items.add(Items.BOW); + if (ver >= VersionInt("i0.31.03")) items.add(Items.ARROW); + if (ver >= VersionInt("i0.31.05")) items.add(Items.COAL); + if (ver >= VersionInt("i0.31.05")) items.add(Items.DIAMOND); + if (ver >= VersionInt("i0.31.05")) items.add(Items.IRON_INGOT); + if (ver >= VersionInt("i0.31.05")) items.add(Items.GOLD_INGOT); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_INGOT); + if (ver >= VersionInt("i0.31.01")) items.add(Items.IRON_SWORD); + if (ver >= VersionInt("i0.31.05")) items.add(Items.WOODEN_SWORD); + if (ver >= VersionInt("i0.31.05")) items.add(Items.WOODEN_SHOVEL); + if (ver >= VersionInt("i0.31.05")) items.add(Items.WOODEN_PICKAXE); + if (ver >= VersionInt("i0.31.05")) items.add(Items.WOODEN_AXE); + if (ver >= VersionInt("i0.31.05")) items.add(Items.STONE_SWORD); + if (ver >= VersionInt("i0.31.05")) items.add(Items.STONE_SHOVEL); + if (ver >= VersionInt("i0.31.05")) items.add(Items.STONE_PICKAXE); + if (ver >= VersionInt("i0.31.05")) items.add(Items.STONE_AXE); + if (ver >= VersionInt("i0.31.05")) items.add(Items.DIAMOND_SWORD); + if (ver >= VersionInt("i0.31.05")) items.add(Items.DIAMOND_SHOVEL); + if (ver >= VersionInt("i0.31.05")) items.add(Items.DIAMOND_PICKAXE); + if (ver >= VersionInt("i0.31.05")) items.add(Items.DIAMOND_AXE); + if (ver >= VersionInt("i0.31.05")) items.add(Items.STICK); + if (ver >= VersionInt("i0.31.06")) items.add(Items.BOWL); + if (ver >= VersionInt("i0.31.06")) items.add(Items.MUSHROOM_STEW); + if (ver >= VersionInt("i0.31.06")) items.add(Items.GOLDEN_SWORD); + if (ver >= VersionInt("i0.31.06")) items.add(Items.GOLDEN_SHOVEL); + if (ver >= VersionInt("i0.31.06")) items.add(Items.GOLDEN_PICKAXE); + if (ver >= VersionInt("i0.31.06")) items.add(Items.GOLDEN_AXE); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_SWORD); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_SHOVEL); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_PICKAXE); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_AXE); + if (ver >= VersionInt("i0.31.06")) items.add(Items.STRING); + if (ver >= VersionInt("i0.31.06")) items.add(Items.FEATHER); + if (ver >= VersionInt("i0.31.06")) items.add(Items.GUNPOWDER); + if (ver >= VersionInt("i0.31.07")) items.add(Items.WOODEN_HOE); + if (ver >= VersionInt("i0.31.07")) items.add(Items.STONE_HOE); + if (ver >= VersionInt("i0.31.07")) items.add(Items.IRON_HOE); + if (ver >= VersionInt("i0.31.07")) items.add(Items.DIAMOND_HOE); + if (ver >= VersionInt("i0.31.07")) items.add(Items.GOLDEN_HOE); + if (ver >= VersionInt("i0.31.07")) items.add(Items.WHEAT_SEEDS); + if (ver >= VersionInt("i0.31.07")) items.add(Items.WHEAT); + if (ver >= VersionInt("i0.31.07")) items.add(Items.BREAD); + if (ver >= VersionInt("i0.31.01")) items.add(Items.LEATHER_HELMET); + if (ver >= VersionInt("i0.31.01")) items.add(Items.LEATHER_CHESTPLATE); + if (ver >= VersionInt("i0.31.08")) items.add(Items.LEATHER_LEGGINGS); + if (ver >= VersionInt("i0.31.08")) items.add(Items.LEATHER_BOOTS); + if (ver >= VersionInt("i0.31.01")) items.add(Items.CHAINMAIL_HELMET); + if (ver >= VersionInt("i0.31.01")) items.add(Items.CHAINMAIL_CHESTPLATE); + if (ver >= VersionInt("i0.31.08")) items.add(Items.CHAINMAIL_LEGGINGS); + if (ver >= VersionInt("i0.31.08")) items.add(Items.CHAINMAIL_BOOTS); + if (ver >= VersionInt("i0.31.01")) items.add(Items.IRON_HELMET); + if (ver >= VersionInt("i0.31.01")) items.add(Items.IRON_CHESTPLATE); + if (ver >= VersionInt("i0.31.08")) items.add(Items.IRON_LEGGINGS); + if (ver >= VersionInt("i0.31.08")) items.add(Items.IRON_BOOTS); + if (ver >= VersionInt("i0.31.07")) items.add(Items.DIAMOND_HELMET); + if (ver >= VersionInt("i0.31.07")) items.add(Items.DIAMOND_CHESTPLATE); + if (ver >= VersionInt("i0.31.08")) items.add(Items.DIAMOND_LEGGINGS); + if (ver >= VersionInt("i0.31.08")) items.add(Items.DIAMOND_BOOTS); + if (ver >= VersionInt("i0.31.07")) items.add(Items.GOLDEN_HELMET); + if (ver >= VersionInt("i0.31.07")) items.add(Items.GOLDEN_CHESTPLATE); + if (ver >= VersionInt("i0.31.08")) items.add(Items.GOLDEN_LEGGINGS); + if (ver >= VersionInt("i0.31.08")) items.add(Items.GOLDEN_BOOTS); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_HELMET); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_CHESTPLATE); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_LEGGINGS); + if (ver >= VersionInt("1.16")) items.add(Items.NETHERITE_BOOTS); + if (ver >= VersionInt("i0.31.08")) items.add(Items.FLINT); + if (ver >= VersionInt("i0.31.08")) items.add(Items.PORKCHOP); + if (ver >= VersionInt("i0.31.08")) items.add(Items.COOKED_PORKCHOP); + if (ver >= VersionInt("i0.31.09")) items.add(Items.PAINTING); + if (ver >= VersionInt("i0.31.09")) items.add(Items.ENCHANTED_GOLDEN_APPLE); + if (ver >= VersionInt("i0.31.09")) items.add(Items.OAK_SIGN); + if (ver >= VersionInt("i0.31.09")) items.add(Items.OAK_DOOR); + if (ver >= VersionInt("i0.31.10")) items.add(Items.BUCKET); + if (ver >= VersionInt("i0.31.10")) items.add(Items.WATER_BUCKET); + if (ver >= VersionInt("i0.31.10")) items.add(Items.LAVA_BUCKET); + if (ver >= VersionInt("i0.31.10")) items.add(Items.MINECART); + if (ver >= VersionInt("i0.31.11")) items.add(Items.SADDLE); + if (ver >= VersionInt("a1.0.1")) items.add(Items.IRON_DOOR); + if (ver >= VersionInt("a1.0.1")) items.add(Items.REDSTONE); + if (ver >= VersionInt("a1.0.5")) items.add(Items.SNOWBALL); + if (ver >= VersionInt("a1.0.6")) items.add(Items.OAK_BOAT); + if (ver >= VersionInt("a1.0.8")) items.add(Items.LEATHER); + if (ver >= VersionInt("a1.0.8")) items.add(Items.MILK_BUCKET); + if (ver >= VersionInt("a1.0.11")) items.add(Items.BRICK); + if (ver >= VersionInt("a1.0.11")) items.add(Items.CLAY_BALL); + if (ver >= VersionInt("a1.0.11")) items.add(Items.SUGAR_CANE); + if (ver >= VersionInt("a1.0.11")) items.add(Items.PAPER); + if (ver >= VersionInt("a1.0.11")) items.add(Items.BOOK); + if (ver >= VersionInt("a1.0.11")) items.add(Items.SLIME_BALL); + if (ver >= VersionInt("a1.0.14")) items.add(Items.CHEST_MINECART); + if (ver >= VersionInt("a1.0.14")) items.add(Items.FURNACE_MINECART); + if (ver >= VersionInt("a1.0.14")) items.add(Items.EGG); + if (ver >= VersionInt("a1.1.0")) items.add(Items.COMPASS); + if (ver >= VersionInt("a1.1.1")) items.add(Items.FISHING_ROD); + if (ver >= VersionInt("a1.2.0")) items.add(Items.CLOCK); + if (ver >= VersionInt("a1.2.0")) items.add(Items.GLOWSTONE_DUST); + if (ver >= VersionInt("a1.2.0")) items.add(Items.COD); + if (ver >= VersionInt("a1.2.0")) items.add(Items.COOKED_COD); + if (ver >= VersionInt("b1.2")) items.add(Items.INK_SAC); + if (ver >= VersionInt("b1.2")) items.add(Items.BONE); + if (ver >= VersionInt("b1.2")) items.add(Items.SUGAR); + if (ver >= VersionInt("b1.2")) items.add(Items.CAKE); + if (ver >= VersionInt("b1.3")) items.add(Items.RED_BED); + if (ver >= VersionInt("b1.3")) items.add(Items.REPEATER); + if (ver >= VersionInt("b1.4")) items.add(Items.COOKIE); + if (ver >= VersionInt("b1.6.3")) items.add(Items.MAP); + if (ver >= VersionInt("b1.7")) items.add(Items.SHEARS); + if (ver >= VersionInt("b1.8")) items.add(Items.MELON_SLICE); + if (ver >= VersionInt("b1.8")) items.add(Items.PUMPKIN_SEEDS); + if (ver >= VersionInt("b1.8")) items.add(Items.MELON_SEEDS); + if (ver >= VersionInt("b1.8")) items.add(Items.BEEF); + if (ver >= VersionInt("b1.8")) items.add(Items.COOKED_BEEF); + if (ver >= VersionInt("b1.8")) items.add(Items.CHICKEN); + if (ver >= VersionInt("b1.8")) items.add(Items.COOKED_CHICKEN); + if (ver >= VersionInt("b1.8")) items.add(Items.ROTTEN_FLESH); + if (ver >= VersionInt("b1.8")) items.add(Items.ENDER_PEARL); + if (ver >= VersionInt("b1.9")) items.add(Items.BLAZE_ROD); + if (ver >= VersionInt("b1.9")) items.add(Items.GHAST_TEAR); + if (ver >= VersionInt("b1.9")) items.add(Items.GOLD_NUGGET); + if (ver >= VersionInt("b1.9")) items.add(Items.NETHER_WART); + if (ver >= VersionInt("b1.9.2")) items.add(Items.GLASS_BOTTLE); + if (ver >= VersionInt("b1.9.2")) items.add(Items.SPIDER_EYE); + if (ver >= VersionInt("b1.9.2")) items.add(Items.FERMENTED_SPIDER_EYE); + if (ver >= VersionInt("b1.9.2")) items.add(Items.BLAZE_POWDER); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MAGMA_CREAM); + if (ver >= VersionInt("b1.9.3")) items.add(Items.BREWING_STAND); + if (ver >= VersionInt("b1.9.2")) items.add(Items.CAULDRON); + if (ver >= VersionInt("b1.9.3")) items.add(Items.ENDER_EYE); + if (ver >= VersionInt("b1.9.4")) items.add(Items.GLISTERING_MELON_SLICE); + if (ver >= VersionInt("1.2.1")) items.add(Items.EXPERIENCE_BOTTLE); + if (ver >= VersionInt("1.2.1")) items.add(Items.FIRE_CHARGE); + + //DISCS + + if (ver >= VersionInt("a1.0.14")) items.add(Items.MUSIC_DISC_13); + if (ver >= VersionInt("a1.0.14")) items.add(Items.MUSIC_DISC_CAT); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_BLOCKS); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_CHIRP); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_FAR); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_MALL); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_MELLOHI); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_STAL); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_STRAD); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_WARD); + if (ver >= VersionInt("b1.9.2")) items.add(Items.MUSIC_DISC_11); + if (ver >= VersionInt("1.4.3")) items.add(Items.MUSIC_DISC_WAIT); + + if (CandyTweak.OLD_CREATIVE_INVENTORY_ALWAYS_SHOW_MODERN_ITEMS.get()) { + for ( ItemStack itemstack : CreativeModeTabs.searchTab().getDisplayItems()) { + Item item = itemstack.getItem(); + if (!items.contains(item) && itemstack.is(ItemTags.CREEPER_DROP_MUSIC_DISCS)) + items.add(item); + } + } + + //DYE + + if (ver >= VersionInt("b1.2")) items.add(Items.RED_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.GREEN_DYE); + if (ver >= VersionInt("b1.2") && ver < VersionInt("1.14")) items.add(Items.COCOA_BEANS); + if (ver >= VersionInt("1.14")) items.add(Items.BROWN_DYE); + if (ver >= VersionInt("b1.2") && ver < VersionInt("1.14")) items.add(Items.LAPIS_LAZULI); + if (ver >= VersionInt("1.14")) items.add(Items.BLUE_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.PURPLE_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.CYAN_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.LIGHT_GRAY_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.GRAY_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.PINK_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.LIME_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.YELLOW_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.LIGHT_BLUE_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.MAGENTA_DYE); + if (ver >= VersionInt("b1.2")) items.add(Items.ORANGE_DYE); + if (ver >= VersionInt("1.14")) items.add(Items.WHITE_DYE); + if (ver >= VersionInt("1.14")) items.add(Items.BLACK_DYE); + + if (CandyTweak.OLD_CREATIVE_INVENTORY_ALWAYS_SHOW_MODERN_ITEMS.get()) { + for (ItemStack itemstack : CreativeModeTabs.searchTab().getDisplayItems()) { + Item item = itemstack.getItem(); + if (!items.contains(item) && (item instanceof DyeItem)) + items.add(item); + } + } + + //MISC + items.add(Items.BONE_MEAL); + + //EGGS + + if (ver >= VersionInt("1.1")) items.add(Items.MOOSHROOM_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.OCELOT_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.CREEPER_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.SKELETON_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.SPIDER_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.ZOMBIE_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.SLIME_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.GHAST_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.VILLAGER_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.ZOMBIFIED_PIGLIN_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.ENDERMAN_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.PIG_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.CAVE_SPIDER_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.SHEEP_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.SILVERFISH_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.COW_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.BLAZE_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.CHICKEN_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.MAGMA_CUBE_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.SQUID_SPAWN_EGG); + if (ver >= VersionInt("1.1")) items.add(Items.WOLF_SPAWN_EGG); + if (CandyTweak.OLD_CREATIVE_INVENTORY_ALWAYS_SHOW_MODERN_ITEMS.get()) { + for (SpawnEggItem egg : SpawnEggItem.eggs()) { + if (!items.contains(egg)) + items.add(egg); + } + } + + //Everything Else + + if (CandyTweak.OLD_CREATIVE_INVENTORY_ALWAYS_SHOW_MODERN_ITEMS.get()) { + for ( ItemStack itemstack : CreativeModeTabs.searchTab().getDisplayItems()) { + Item item = itemstack.getItem(); + if (!items.contains(item) && !(item instanceof SpawnEggItem) && !(item instanceof PotionItem)) + items.add(item); + } + } + + var itemstacks = new ArrayList(); + + for (Item item : items) { + itemstacks.add(new ItemStack(item)); + } + + return itemstacks; + } +} diff --git a/common/src/main/java/mod/adrenix/nostalgic/mixin/tweak/candy/inventory_screen/CreativeModeInventoryScreenMixin.java b/common/src/main/java/mod/adrenix/nostalgic/mixin/tweak/candy/inventory_screen/CreativeModeInventoryScreenMixin.java new file mode 100644 index 000000000..015d68e4d --- /dev/null +++ b/common/src/main/java/mod/adrenix/nostalgic/mixin/tweak/candy/inventory_screen/CreativeModeInventoryScreenMixin.java @@ -0,0 +1,50 @@ +package mod.adrenix.nostalgic.mixin.tweak.candy.inventory_screen; + +import mod.adrenix.nostalgic.helper.candy.screen.inventory.ClassicCreativeModeInventoryScreen; +import mod.adrenix.nostalgic.helper.candy.screen.inventory.OldCreativeModeInventoryScreen; +import mod.adrenix.nostalgic.tweak.config.CandyTweak; +import mod.adrenix.nostalgic.tweak.enums.OldCreativeInventory; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Inventory; +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; + +// Menu test, might need to have it be its own thing? +@Mixin(CreativeModeInventoryScreen.class) +public abstract class CreativeModeInventoryScreenMixin extends AbstractContainerScreen { + private CreativeModeInventoryScreenMixin(CreativeModeInventoryScreen.ItemPickerMenu menu, Inventory playerInventory, Component title) + { + super(menu, playerInventory, title); + } + + @Inject( + method = "init", + at = @At("HEAD") + ) + public void nt_creative_inventory$OverrideInit(CallbackInfo callback) { + + if (CandyTweak.OLD_CREATIVE_INVENTORY.get() == OldCreativeInventory.BETA) + this.minecraft.setScreen(new OldCreativeModeInventoryScreen( this.minecraft.player )); + + if (CandyTweak.OLD_CREATIVE_INVENTORY.get() == OldCreativeInventory.CLASSIC) + this.minecraft.setScreen(new ClassicCreativeModeInventoryScreen( this.minecraft.player )); + } + + @Inject( + method = "containerTick", + at = @At("HEAD") + ) + public void nt_creative_inventory$containerTick(CallbackInfo callback) { + if (CandyTweak.OLD_CREATIVE_INVENTORY.get() == OldCreativeInventory.BETA) + this.minecraft.setScreen(new OldCreativeModeInventoryScreen( this.minecraft.player )); + + if (CandyTweak.OLD_CREATIVE_INVENTORY.get() == OldCreativeInventory.CLASSIC) + this.minecraft.setScreen(new ClassicCreativeModeInventoryScreen( this.minecraft.player )); + } + + +} diff --git a/common/src/main/java/mod/adrenix/nostalgic/tweak/config/CandyTweak.java b/common/src/main/java/mod/adrenix/nostalgic/tweak/config/CandyTweak.java index e20ab7f04..f42f9682f 100644 --- a/common/src/main/java/mod/adrenix/nostalgic/tweak/config/CandyTweak.java +++ b/common/src/main/java/mod/adrenix/nostalgic/tweak/config/CandyTweak.java @@ -178,7 +178,13 @@ public interface CandyTweak TweakFlag DISABLE_EMPTY_ARMOR_TEXTURE = TweakFlag.client(false, CandyGroup.INTERFACE_INVENTORY).build(); TweakFlag DISABLE_EMPTY_SHIELD_TEXTURE = TweakFlag.client(false, CandyGroup.INTERFACE_INVENTORY).build(); TweakFlag INVERTED_PLAYER_LIGHTING = TweakFlag.client(true, CandyGroup.INTERFACE_INVENTORY).build(); - TweakEnum OLD_CREATIVE_HOTBAR = TweakEnum.server(Hotbar.CLASSIC, CandyGroup.INTERFACE_INVENTORY).ignoreNetworkCheck().whenDisabled(Hotbar.MODERN).build(); + + // Creative Inventory Screen + + TweakEnum OLD_CREATIVE_HOTBAR = TweakEnum.server(Hotbar.CLASSIC, CandyGroup.INTERFACE_INVENTORY_CREATIVE).ignoreNetworkCheck().whenDisabled(Hotbar.MODERN).build(); + TweakEnum OLD_CREATIVE_INVENTORY = TweakEnum.client(OldCreativeInventory.MODERN, CandyGroup.INTERFACE_INVENTORY_CREATIVE).build(); + TweakText OLD_CREATIVE_INVENTORY_VERSION = TweakText.client("r1.2.5", CandyGroup.INTERFACE_INVENTORY_CREATIVE).build(); + TweakFlag OLD_CREATIVE_INVENTORY_ALWAYS_SHOW_MODERN_ITEMS = TweakFlag.client(true, CandyGroup.INTERFACE_INVENTORY_CREATIVE).build(); // Generic Screen diff --git a/common/src/main/java/mod/adrenix/nostalgic/tweak/container/group/CandyGroup.java b/common/src/main/java/mod/adrenix/nostalgic/tweak/container/group/CandyGroup.java index 45068a959..d5657f0ec 100644 --- a/common/src/main/java/mod/adrenix/nostalgic/tweak/container/group/CandyGroup.java +++ b/common/src/main/java/mod/adrenix/nostalgic/tweak/container/group/CandyGroup.java @@ -40,6 +40,7 @@ public interface CandyGroup Container INTERFACE_ANVIL = Container.group(INTERFACE, "interface_anvil").color(0x969696).icon(Blocks.ANVIL).build(); Container INTERFACE_DEATH = Container.group(INTERFACE, "interface_death").color(0xC7C7C7).icon(Blocks.SKELETON_SKULL).build(); Container INTERFACE_INVENTORY = Container.group(INTERFACE, "interface_inventory").color(0xB6896C).icon(Blocks.PLAYER_HEAD).build(); + Container INTERFACE_INVENTORY_CREATIVE = Container.group(INTERFACE, "interface_inventory_creative").color(0x2ABEEB).icon(Blocks.DIAMOND_BLOCK).build(); Container INTERFACE_CRAFTING = Container.group(INTERFACE, "interface_crafting").color(0xF38A47).icon(Blocks.CRAFTING_TABLE).build(); Container INTERFACE_FURNACE = Container.group(INTERFACE, "interface_furnace").color(0x8F8F90).icon(Blocks.FURNACE).build(); Container INTERFACE_DEBUG = Container.group(INTERFACE, "interface_debug").color(0xFB4A4C).icon(Icons.BUG).build(); diff --git a/common/src/main/java/mod/adrenix/nostalgic/tweak/enums/OldCreativeInventory.java b/common/src/main/java/mod/adrenix/nostalgic/tweak/enums/OldCreativeInventory.java new file mode 100644 index 000000000..ff357e168 --- /dev/null +++ b/common/src/main/java/mod/adrenix/nostalgic/tweak/enums/OldCreativeInventory.java @@ -0,0 +1,24 @@ +package mod.adrenix.nostalgic.tweak.enums; + +import mod.adrenix.nostalgic.util.common.lang.Translation; +import mod.adrenix.nostalgic.util.common.lang.Lang; + +public enum OldCreativeInventory implements EnumTweak +{ + CLASSIC(Lang.Enum.CLASSIC), + BETA(Lang.literal("§6b1.8§r - §61.2.5")), + MODERN(Generic.MODERN.getTitle()); + + private final Translation title; + + OldCreativeInventory(Translation title) + { + this.title = title; + } + + @Override + public Translation getTitle() + { + return this.title; + } +} diff --git a/common/src/main/java/mod/adrenix/nostalgic/util/common/asset/TextureLocation.java b/common/src/main/java/mod/adrenix/nostalgic/util/common/asset/TextureLocation.java index 70aaca177..4b7cfe286 100644 --- a/common/src/main/java/mod/adrenix/nostalgic/util/common/asset/TextureLocation.java +++ b/common/src/main/java/mod/adrenix/nostalgic/util/common/asset/TextureLocation.java @@ -11,6 +11,7 @@ public class TextureLocation public static final ResourceLocation DEV_MODE = ModAsset.texture("gui/nt_dev.png"); public static final ResourceLocation BLOCK_SHADOW = ModAsset.texture("block_shadow.png"); public static final ResourceLocation INVENTORY = ModAsset.texture("gui/inventory.png"); + public static final ResourceLocation ALL_ITEMS = ModAsset.texture("gui/allitems.png"); public static final ResourceLocation MOJANG_ALPHA = ModAsset.texture("gui/mojang_alpha.png"); public static final ResourceLocation MOJANG_BETA = ModAsset.texture("gui/mojang_beta.png"); public static final ResourceLocation MOJANG_RELEASE_ORANGE = ModAsset.texture("gui/mojang_release_orange.png"); diff --git a/common/src/main/resources/assets/nostalgic_tweaks/lang/en_us.json b/common/src/main/resources/assets/nostalgic_tweaks/lang/en_us.json index 2df19e8e1..6089ef778 100644 --- a/common/src/main/resources/assets/nostalgic_tweaks/lang/en_us.json +++ b/common/src/main/resources/assets/nostalgic_tweaks/lang/en_us.json @@ -596,6 +596,7 @@ "gui.nostalgic_tweaks.container.eyeCandy.interface_debug_chart": "Chart Data", "gui.nostalgic_tweaks.container.eyeCandy.interface_furnace": "Furnace Screen", "gui.nostalgic_tweaks.container.eyeCandy.interface_inventory": "Inventory Screen", + "gui.nostalgic_tweaks.container.eyeCandy.interface_inventory_creative": "Creative Inventory Screen", "gui.nostalgic_tweaks.container.eyeCandy.interface_death": "Death Screen", "gui.nostalgic_tweaks.container.eyeCandy.interface_title": "Title Screen", "gui.nostalgic_tweaks.container.eyeCandy.interface_title_logo": "Logo", @@ -1217,6 +1218,13 @@ "gui.nostalgic_tweaks.config.eyeCandy.furnaceBook.enum.large": "The recipe book button will look similar to the modern button but will have an§a old school§r appearance. It will be located at the top right corner of the furnace screen.", "gui.nostalgic_tweaks.config.eyeCandy.furnaceBook.enum.small": "The recipe book button will be a small unobtrusive button with a question mark. It will be located at the top right corner of the furnace screen.", + "gui.nostalgic_tweaks.config.eyeCandy.oldCreativeInventory": "Old Creative Inventory Screen", + "gui.nostalgic_tweaks.config.eyeCandy.oldCreativeInventory.info": "The pre 1.3 inventory screen", + "gui.nostalgic_tweaks.config.eyeCandy.oldCreativeInventoryVersion": "Creative Inventory Version", + "gui.nostalgic_tweaks.config.eyeCandy.oldCreativeInventoryVersion.info": "The minimum version requirement for the set of the top inventory items.", + "gui.nostalgic_tweaks.config.eyeCandy.oldCreativeInventoryAlwaysShowModernItems": "Always show all items", + "gui.nostalgic_tweaks.config.eyeCandy.oldCreativeInventoryAlwaysShowModernItems.info": "Always show the rest of the items at the bottom of the creative inventory, even if they don't match the specified inventory version", + "gui.nostalgic_tweaks.config.eyeCandy.oldInventory": "Old Inventory Screen", "gui.nostalgic_tweaks.config.eyeCandy.oldInventory.info": "Bring back the old inventory screen texture. This will widen the player box background and change where the crafting grid is located. Other inventory tweaks can be used even if this tweak is§c disabled§r.", "gui.nostalgic_tweaks.config.eyeCandy.inventoryBook": "Recipe Book", diff --git a/common/src/main/resources/assets/nostalgic_tweaks/textures/gui/allitems.png b/common/src/main/resources/assets/nostalgic_tweaks/textures/gui/allitems.png new file mode 100644 index 000000000..e1e5d7797 Binary files /dev/null and b/common/src/main/resources/assets/nostalgic_tweaks/textures/gui/allitems.png differ diff --git a/common/src/main/resources/mixin.nostalgic_tweaks.json b/common/src/main/resources/mixin.nostalgic_tweaks.json index abdd749c8..62dea5010 100644 --- a/common/src/main/resources/mixin.nostalgic_tweaks.json +++ b/common/src/main/resources/mixin.nostalgic_tweaks.json @@ -80,6 +80,7 @@ "candy.missing_texture.MissingTextureAtlasSpriteMixin", "candy.name_tag.EntityRendererMixin", "candy.old_hud.GuiMixin", + "candy.inventory_screen.CreativeModeInventoryScreenMixin", "candy.particle_engine.ParticleEngineMixin", "candy.player_particles.ClientLevelMixin", "candy.player_particles.EntityMixin",