From 2dd3481c6a7bd0b34fa152a383d19375b283ba58 Mon Sep 17 00:00:00 2001 From: James Peters Date: Wed, 12 Jan 2022 19:57:07 +0000 Subject: [PATCH] Fixed OfflinePlayer Autocrafting --- .travis.yml | 9 +- BuildTools/{build-1.17+.sh => build-1.17.sh} | 0 BuildTools/build-1.18+.sh | 31 ++++++ .../minecraft/chests/CraftingProvider.java | 2 +- .../minecraft/chests/CraftingResult.java | 11 +- ChestsPlusPlus_1_16/pom.xml | 6 - .../minecraft/chests/v1_16_R1/Crafting.java | 90 +++++++++------ .../minecraft/chests/v1_16_R2/Crafting.java | 90 +++++++++------ .../minecraft/chests/v1_16_R3/Crafting.java | 89 ++++++++++----- ChestsPlusPlus_1_17_R1/pom.xml | 104 +++++++++++++++++ .../minecraft/chests/v1_17_R1/Crafting.java | 97 ++++++++++++++++ .../v1_17_R1}/EntityEventListener_1_17.java | 2 +- .../v1_17_R1}/MaterialChecker_1_17_R1.java | 2 +- .../chests/v1_17_R1}/NMSProviderImpl.java | 2 +- ChestsPlusPlus_1_18_R1/pom.xml | 105 ++++++++++++++++++ .../minecraft/chests/v1_18_R1/Crafting.java | 97 ++++++++++++++++ .../chests/v1_18_R1/NMSProviderImpl.java | 50 +++++++++ ChestsPlusPlus_LatestMC/pom.xml | 64 ----------- .../minecraft/chests/latest/Crafting.java | 28 ----- ChestsPlusPlus_Main/pom.xml | 38 +++---- .../chests/api/NMSProviderDefault.java | 8 +- .../minecraft/chests/crafting/Crafting.java | 2 +- .../interfaces/VirtualCraftingHolder.java | 2 +- .../src/main/resources/lang/en_GB.properties | 2 +- POEditorImport/pom.xml | 2 +- pom.xml | 5 +- 26 files changed, 706 insertions(+), 232 deletions(-) rename BuildTools/{build-1.17+.sh => build-1.17.sh} (100%) create mode 100644 BuildTools/build-1.18+.sh create mode 100644 ChestsPlusPlus_1_17_R1/pom.xml create mode 100644 ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/Crafting.java rename {ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest => ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1}/EntityEventListener_1_17.java (87%) rename {ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest => ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1}/MaterialChecker_1_17_R1.java (94%) rename {ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest => ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1}/NMSProviderImpl.java (96%) create mode 100644 ChestsPlusPlus_1_18_R1/pom.xml create mode 100644 ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/Crafting.java create mode 100644 ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/NMSProviderImpl.java delete mode 100644 ChestsPlusPlus_LatestMC/pom.xml delete mode 100644 ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/Crafting.java diff --git a/.travis.yml b/.travis.yml index 42ec3b6..8546f2d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,10 +6,17 @@ before_install: - bash build-pre1.17.sh - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh - chmod +x $TRAVIS_BUILD_DIR/BuildTools/install-jdk.sh +# Installs Java 16 and runs scripts needing Java 16. - export JAVA_HOME=$HOME/openjdk16 - $TRAVIS_BUILD_DIR/BuildTools/install-jdk.sh -F 16 --target $JAVA_HOME - export PATH=$JAVA_HOME/bin:$PATH -#- bash build-1.17+.sh +- bash build-1.17.sh +# Installs Java 17 and runs scripts needing Java 17. +- export JAVA_HOME=$HOME/openjdk17 +- $TRAVIS_BUILD_DIR/BuildTools/install-jdk.sh -F 17 --target $JAVA_HOME +- export PATH=$JAVA_HOME/bin:$PATH +- bash build-1.18+.sh +## - cd ../ install: diff --git a/BuildTools/build-1.17+.sh b/BuildTools/build-1.17.sh similarity index 100% rename from BuildTools/build-1.17+.sh rename to BuildTools/build-1.17.sh diff --git a/BuildTools/build-1.18+.sh b/BuildTools/build-1.18+.sh new file mode 100644 index 0000000..baf935d --- /dev/null +++ b/BuildTools/build-1.18+.sh @@ -0,0 +1,31 @@ +#!/bin/sh +echo "Checking BuildTools 1.18+ cache" + +#Local Maven Repo +MAVEN_DIR="$HOME/.m2" + +#CraftBukkit in local repo +SPIGOT="${MAVEN_DIR}/repository/org/spigotmc/spigot" + +#Versions +array=("1.18.1") + +#Download BuildTools jar +curl -s -o BuildTools.jar https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar + +for i in "${array[@]}" +do + VERSION_DIR="${SPIGOT}/${i}-R0.1-SNAPSHOT" + + if [ -d "$VERSION_DIR" ]; then + echo "Spigot version ${i} is cached in ${VERSION_DIR}!" + echo "Checking for latest commit! " + java -jar BuildTools.jar --rev ${i} --compile-if-changed --remapped > /dev/null 2>&1 + echo "Finished Check." + else + echo "Spigot version ${i} isn't cached!" + echo "Running BuildTools!" + java -jar BuildTools.jar --rev ${i} --remapped > /dev/null 2>&1 + echo "Compiled Spigot ${i} in ${VERSION_DIR}" + fi +done diff --git a/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingProvider.java b/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingProvider.java index 78d472f..78c3080 100644 --- a/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingProvider.java +++ b/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingProvider.java @@ -7,7 +7,7 @@ import org.bukkit.inventory.Recipe; public interface CraftingProvider { - CraftingResult craft(Player player, World world, ItemStack[] items); + CraftingResult craft(World world, ItemStack[] items); Recipe getRecipe(Player player, World world, ItemStack[] items); } diff --git a/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingResult.java b/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingResult.java index db018c0..dfca2d9 100644 --- a/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingResult.java +++ b/ChestsPlusPlusAPI/src/main/java/com/jamesdpeters/minecraft/chests/CraftingResult.java @@ -1,5 +1,14 @@ package com.jamesdpeters.minecraft.chests; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -public record CraftingResult(ItemStack result, ItemStack[] matrixResult) {} +import java.util.List; +import java.util.Objects; + +public record CraftingResult(ItemStack result, ItemStack[] matrixResult, List overflowItems) { + + public void setResultMatrix(int i, ItemStack asBukkitCopy) { + matrixResult[i] = Objects.requireNonNullElseGet(asBukkitCopy, () -> new ItemStack(Material.AIR)); + } +} diff --git a/ChestsPlusPlus_1_16/pom.xml b/ChestsPlusPlus_1_16/pom.xml index 49df60a..ad36ec4 100644 --- a/ChestsPlusPlus_1_16/pom.xml +++ b/ChestsPlusPlus_1_16/pom.xml @@ -35,12 +35,6 @@ 1.16.1-R0.1-SNAPSHOT provided - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_15 - 1.0-SNAPSHOT - compile - org.bukkit diff --git a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java index 80254b7..5918734 100644 --- a/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java +++ b/ChestsPlusPlus_1_16/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R1/Crafting.java @@ -3,63 +3,59 @@ package com.jamesdpeters.minecraft.chests.v1_16_R1; import com.jamesdpeters.minecraft.chests.CraftingProvider; import com.jamesdpeters.minecraft.chests.CraftingResult; import net.minecraft.server.v1_16_R1.Container; -import net.minecraft.server.v1_16_R1.ContainerWorkbench; import net.minecraft.server.v1_16_R1.EntityHuman; import net.minecraft.server.v1_16_R1.IRecipe; -import net.minecraft.server.v1_16_R1.InventoryCraftResult; import net.minecraft.server.v1_16_R1.InventoryCrafting; -import net.minecraft.server.v1_16_R1.Item; +import net.minecraft.server.v1_16_R1.NonNullList; import net.minecraft.server.v1_16_R1.RecipeCrafting; -import net.minecraft.server.v1_16_R1.RecipeRepair; import net.minecraft.server.v1_16_R1.Recipes; +import net.minecraft.server.v1_16_R1.WorldServer; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.craftbukkit.v1_16_R1.CraftServer; import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryCrafting; -import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftInventoryView; import org.bukkit.craftbukkit.v1_16_R1.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; +import java.util.ArrayList; import java.util.Optional; public class Crafting implements CraftingProvider { @Override - public CraftingResult craft(Player player, World world, ItemStack[] items) { + public CraftingResult craft(World world, ItemStack[] items) { CraftWorld craftWorld = (CraftWorld) world; - CraftPlayer craftPlayer = (CraftPlayer) player; - ContainerWorkbench workbench = new ContainerWorkbench(-1, craftPlayer.getHandle().inventory); - CraftInventoryView view = workbench.getBukkitView(); - CraftInventoryCrafting craftInventoryCrafting = (CraftInventoryCrafting) view.getTopInventory(); - InventoryCrafting inventoryCrafting = (InventoryCrafting) craftInventoryCrafting.getMatrixInventory(); - InventoryCraftResult resultInventory = (InventoryCraftResult) craftInventoryCrafting.getResultInventory(); + // Setup crafting inventories. + InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container(null, -1) { + @Override + public InventoryView getBukkitView() { + return null; + } - Optional recipe = getNMSRecipe(items, inventoryCrafting, craftWorld); + @Override + public boolean canUse(EntityHuman entityHuman) { + return false; + } + }, 3, 3); - net.minecraft.server.v1_16_R1.ItemStack itemstack = net.minecraft.server.v1_16_R1.ItemStack.b; + for (int i = 0; i < items.length; i++) { + inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); + } + + Optional recipe = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, craftWorld.getHandle()); + + // Generate the resulting ItemStack from the Crafting Matrix + net.minecraft.server.v1_16_R1.ItemStack itemStack = net.minecraft.server.v1_16_R1.ItemStack.b; if (recipe.isPresent()) { - RecipeCrafting recipeCrafting = recipe.get(); - if (resultInventory.a(craftWorld.getHandle(), craftPlayer.getHandle(), recipeCrafting)) { - itemstack = recipeCrafting.a(inventoryCrafting); - } + itemStack = recipe.get().a(inventoryCrafting); } - net.minecraft.server.v1_16_R1.ItemStack result = CraftEventFactory.callPreCraftEvent(inventoryCrafting, resultInventory, itemstack, view, recipe.orElse(null) instanceof RecipeRepair); - - for(int i = 0; i < items.length; ++i) { - Item remaining = inventoryCrafting.getContents().get(i).getItem().getCraftingRemainingItem(); - items[i] = remaining != null ? CraftItemStack.asBukkitCopy(remaining.r()) : null; - } - - return new CraftingResult(CraftItemStack.asBukkitCopy(result), items); + return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); } @Override @@ -90,12 +86,38 @@ public class Crafting implements CraftingProvider { return optional.map(IRecipe::toBukkitRecipe).orElse(null); } - private Optional getNMSRecipe(ItemStack[] craftingMatrix, InventoryCrafting inventoryCrafting, CraftWorld world) { - for(int i = 0; i < craftingMatrix.length; ++i) { - inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(craftingMatrix[i])); + private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) { + CraftServer server = (CraftServer) Bukkit.getServer(); + NonNullList remainingItems = server.getServer().getCraftingManager().c(Recipes.CRAFTING, inventoryCrafting, worldServer); + + CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); + + // Create resulting matrix and overflow items + for (int i = 0; i < remainingItems.size(); ++i) { + net.minecraft.server.v1_16_R1.ItemStack itemstack1 = inventoryCrafting.getItem(i); + net.minecraft.server.v1_16_R1.ItemStack itemstack2 = remainingItems.get(i); + + if (!itemstack1.isEmpty()) { + inventoryCrafting.splitStack(i, 1); + itemstack1 = inventoryCrafting.getItem(i); + } + + if (!itemstack2.isEmpty()) { + if (itemstack1.isEmpty()) { + inventoryCrafting.setItem(i, itemstack2); + } else if (net.minecraft.server.v1_16_R1.ItemStack.equals(itemstack1, itemstack2) && net.minecraft.server.v1_16_R1.ItemStack.matches(itemstack1, itemstack2)) { + itemstack2.add(itemstack1.getCount()); + inventoryCrafting.setItem(i, itemstack2); + } else { + craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); + } + } } - CraftServer server = (CraftServer) Bukkit.getServer(); - return server.getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, world.getHandle()); + for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { + craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); + } + + return craftItemResult; } } diff --git a/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java b/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java index 30fc9e2..86bdc54 100644 --- a/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java +++ b/ChestsPlusPlus_1_16_R2/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R2/Crafting.java @@ -3,63 +3,59 @@ package com.jamesdpeters.minecraft.chests.v1_16_R2; import com.jamesdpeters.minecraft.chests.CraftingProvider; import com.jamesdpeters.minecraft.chests.CraftingResult; import net.minecraft.server.v1_16_R2.Container; -import net.minecraft.server.v1_16_R2.ContainerWorkbench; import net.minecraft.server.v1_16_R2.EntityHuman; import net.minecraft.server.v1_16_R2.IRecipe; -import net.minecraft.server.v1_16_R2.InventoryCraftResult; import net.minecraft.server.v1_16_R2.InventoryCrafting; -import net.minecraft.server.v1_16_R2.Item; +import net.minecraft.server.v1_16_R2.NonNullList; import net.minecraft.server.v1_16_R2.RecipeCrafting; -import net.minecraft.server.v1_16_R2.RecipeRepair; import net.minecraft.server.v1_16_R2.Recipes; +import net.minecraft.server.v1_16_R2.WorldServer; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.craftbukkit.v1_16_R2.CraftServer; import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R2.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R2.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryCrafting; -import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftInventoryView; import org.bukkit.craftbukkit.v1_16_R2.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; +import java.util.ArrayList; import java.util.Optional; public class Crafting implements CraftingProvider { @Override - public CraftingResult craft(Player player, World world, ItemStack[] items) { + public CraftingResult craft(World world, ItemStack[] items) { CraftWorld craftWorld = (CraftWorld) world; - CraftPlayer craftPlayer = (CraftPlayer) player; - ContainerWorkbench workbench = new ContainerWorkbench(-1, craftPlayer.getHandle().inventory); - CraftInventoryView view = workbench.getBukkitView(); - CraftInventoryCrafting craftInventoryCrafting = (CraftInventoryCrafting) view.getTopInventory(); - InventoryCrafting inventoryCrafting = (InventoryCrafting) craftInventoryCrafting.getMatrixInventory(); - InventoryCraftResult resultInventory = (InventoryCraftResult) craftInventoryCrafting.getResultInventory(); + // Setup crafting inventories. + InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container(null, -1) { + @Override + public InventoryView getBukkitView() { + return null; + } - Optional recipe = getNMSRecipe(items, inventoryCrafting, craftWorld); + @Override + public boolean canUse(EntityHuman entityHuman) { + return false; + } + }, 3, 3); - net.minecraft.server.v1_16_R2.ItemStack itemstack = net.minecraft.server.v1_16_R2.ItemStack.b; + for (int i = 0; i < items.length; i++) { + inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); + } + + Optional recipe = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, craftWorld.getHandle()); + + // Generate the resulting ItemStack from the Crafting Matrix + net.minecraft.server.v1_16_R2.ItemStack itemStack = net.minecraft.server.v1_16_R2.ItemStack.b; if (recipe.isPresent()) { - RecipeCrafting recipeCrafting = recipe.get(); - if (resultInventory.a(craftWorld.getHandle(), craftPlayer.getHandle(), recipeCrafting)) { - itemstack = recipeCrafting.a(inventoryCrafting); - } + itemStack = recipe.get().a(inventoryCrafting); } - net.minecraft.server.v1_16_R2.ItemStack result = CraftEventFactory.callPreCraftEvent(inventoryCrafting, resultInventory, itemstack, view, recipe.orElse(null) instanceof RecipeRepair); - - for(int i = 0; i < items.length; ++i) { - Item remaining = inventoryCrafting.getContents().get(i).getItem().getCraftingRemainingItem(); - items[i] = remaining != null ? CraftItemStack.asBukkitCopy(remaining.createItemStack()) : null; - } - - return new CraftingResult(CraftItemStack.asBukkitCopy(result), items); + return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); } @Override @@ -90,12 +86,38 @@ public class Crafting implements CraftingProvider { return optional.map(IRecipe::toBukkitRecipe).orElse(null); } - private Optional getNMSRecipe(ItemStack[] craftingMatrix, InventoryCrafting inventoryCrafting, CraftWorld world) { - for(int i = 0; i < craftingMatrix.length; ++i) { - inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(craftingMatrix[i])); + private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) { + CraftServer server = (CraftServer) Bukkit.getServer(); + NonNullList remainingItems = server.getServer().getCraftingManager().c(Recipes.CRAFTING, inventoryCrafting, worldServer); + + CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); + + // Create resulting matrix and overflow items + for (int i = 0; i < remainingItems.size(); ++i) { + net.minecraft.server.v1_16_R2.ItemStack itemstack1 = inventoryCrafting.getItem(i); + net.minecraft.server.v1_16_R2.ItemStack itemstack2 = remainingItems.get(i); + + if (!itemstack1.isEmpty()) { + inventoryCrafting.splitStack(i, 1); + itemstack1 = inventoryCrafting.getItem(i); + } + + if (!itemstack2.isEmpty()) { + if (itemstack1.isEmpty()) { + inventoryCrafting.setItem(i, itemstack2); + } else if (net.minecraft.server.v1_16_R2.ItemStack.equals(itemstack1, itemstack2) && net.minecraft.server.v1_16_R2.ItemStack.matches(itemstack1, itemstack2)) { + itemstack2.add(itemstack1.getCount()); + inventoryCrafting.setItem(i, itemstack2); + } else { + craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); + } + } } - CraftServer server = (CraftServer) Bukkit.getServer(); - return server.getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, world.getHandle()); + for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { + craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); + } + + return craftItemResult; } } diff --git a/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java b/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java index a140d1a..14e5fd1 100644 --- a/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java +++ b/ChestsPlusPlus_1_16_R3/src/main/java/com/jamesdpeters/minecraft/chests/v1_16_R3/Crafting.java @@ -3,63 +3,59 @@ package com.jamesdpeters.minecraft.chests.v1_16_R3; import com.jamesdpeters.minecraft.chests.CraftingProvider; import com.jamesdpeters.minecraft.chests.CraftingResult; import net.minecraft.server.v1_16_R3.Container; -import net.minecraft.server.v1_16_R3.ContainerWorkbench; import net.minecraft.server.v1_16_R3.EntityHuman; import net.minecraft.server.v1_16_R3.IRecipe; -import net.minecraft.server.v1_16_R3.InventoryCraftResult; import net.minecraft.server.v1_16_R3.InventoryCrafting; -import net.minecraft.server.v1_16_R3.Item; +import net.minecraft.server.v1_16_R3.NonNullList; import net.minecraft.server.v1_16_R3.RecipeCrafting; -import net.minecraft.server.v1_16_R3.RecipeRepair; import net.minecraft.server.v1_16_R3.Recipes; +import net.minecraft.server.v1_16_R3.WorldServer; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.craftbukkit.v1_16_R3.CraftServer; import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; -import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_16_R3.event.CraftEventFactory; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryCrafting; -import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventoryView; import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.Recipe; +import java.util.ArrayList; import java.util.Optional; public class Crafting implements CraftingProvider { @Override - public CraftingResult craft(Player player, World world, ItemStack[] items) { + public CraftingResult craft(World world, ItemStack[] items) { CraftWorld craftWorld = (CraftWorld) world; - CraftPlayer craftPlayer = (CraftPlayer) player; - ContainerWorkbench workbench = new ContainerWorkbench(-1, craftPlayer.getHandle().inventory); - CraftInventoryView view = workbench.getBukkitView(); - CraftInventoryCrafting craftInventoryCrafting = (CraftInventoryCrafting) view.getTopInventory(); - InventoryCrafting inventoryCrafting = (InventoryCrafting) craftInventoryCrafting.getMatrixInventory(); - InventoryCraftResult resultInventory = (InventoryCraftResult) craftInventoryCrafting.getResultInventory(); + // Setup crafting inventories. + InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container(null, -1) { + @Override + public InventoryView getBukkitView() { + return null; + } - Optional recipe = getNMSRecipe(items, inventoryCrafting, craftWorld); + @Override + public boolean canUse(EntityHuman entityHuman) { + return false; + } + }, 3, 3); - net.minecraft.server.v1_16_R3.ItemStack itemstack = net.minecraft.server.v1_16_R3.ItemStack.b; + for (int i = 0; i < items.length; i++) { + inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); + } + + Optional recipe = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, craftWorld.getHandle()); + + // Generate the resulting ItemStack from the Crafting Matrix + net.minecraft.server.v1_16_R3.ItemStack itemStack = net.minecraft.server.v1_16_R3.ItemStack.b; if (recipe.isPresent()) { - RecipeCrafting recipeCrafting = recipe.get(); - if (resultInventory.a(craftWorld.getHandle(), craftPlayer.getHandle(), recipeCrafting)) { - itemstack = recipeCrafting.a(inventoryCrafting); - } + itemStack = recipe.get().a(inventoryCrafting); } - net.minecraft.server.v1_16_R3.ItemStack result = CraftEventFactory.callPreCraftEvent(inventoryCrafting, resultInventory, itemstack, view, recipe.orElse(null) instanceof RecipeRepair); - - for(int i = 0; i < items.length; ++i) { - Item remaining = inventoryCrafting.getContents().get(i).getItem().getCraftingRemainingItem(); - items[i] = remaining != null ? CraftItemStack.asBukkitCopy(remaining.createItemStack()) : null; - } - - return new CraftingResult(CraftItemStack.asBukkitCopy(result), items); + return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); } @Override @@ -98,4 +94,39 @@ public class Crafting implements CraftingProvider { CraftServer server = (CraftServer) Bukkit.getServer(); return server.getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, world.getHandle()); } + + private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) { + CraftServer server = (CraftServer) Bukkit.getServer(); + NonNullList remainingItems = server.getServer().getCraftingManager().c(Recipes.CRAFTING, inventoryCrafting, worldServer); + + CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); + + // Create resulting matrix and overflow items + for (int i = 0; i < remainingItems.size(); ++i) { + net.minecraft.server.v1_16_R3.ItemStack itemstack1 = inventoryCrafting.getItem(i); + net.minecraft.server.v1_16_R3.ItemStack itemstack2 = remainingItems.get(i); + + if (!itemstack1.isEmpty()) { + inventoryCrafting.splitStack(i, 1); + itemstack1 = inventoryCrafting.getItem(i); + } + + if (!itemstack2.isEmpty()) { + if (itemstack1.isEmpty()) { + inventoryCrafting.setItem(i, itemstack2); + } else if (net.minecraft.server.v1_16_R3.ItemStack.equals(itemstack1, itemstack2) && net.minecraft.server.v1_16_R3.ItemStack.matches(itemstack1, itemstack2)) { + itemstack2.add(itemstack1.getCount()); + inventoryCrafting.setItem(i, itemstack2); + } else { + craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); + } + } + } + + for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { + craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); + } + + return craftItemResult; + } } diff --git a/ChestsPlusPlus_1_17_R1/pom.xml b/ChestsPlusPlus_1_17_R1/pom.xml new file mode 100644 index 0000000..f72caad --- /dev/null +++ b/ChestsPlusPlus_1_17_R1/pom.xml @@ -0,0 +1,104 @@ + + + + + ChestsPlusPlus-Parent + com.jamesdpeters.minecraft.chests + 1.0-SNAPSHOT + ../pom.xml + + + + 1.17.1 + + + 4.0.0 + jar + ChestsPlusPlus_1_17_R1 + 1.0-SNAPSHOT + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + com.jamesdpeters.minecraft.chests + ChestsPlusPlus-API + 1.0-SNAPSHOT + + + + org.spigotmc + spigot-api + ${minecraft.version}-R0.1-SNAPSHOT + provided + + + com.jamesdpeters.minecraft.chests + ChestsPlusPlus_1_16 + 1.0-SNAPSHOT + compile + + + + org.spigotmc + spigot + ${minecraft.version}-R0.1-SNAPSHOT + provided + + + + + + + net.md-5 + specialsource-maven-plugin + 1.2.2 + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:${minecraft.version}-R0.1-SNAPSHOT:txt:maps-mojang + true + org.spigotmc:spigot:${minecraft.version}-R0.1-SNAPSHOT:jar:remapped-mojang + true + remapped-obf + + + + package + + remap + + remap-spigot + + ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + org.spigotmc:minecraft-server:${minecraft.version}-R0.1-SNAPSHOT:csrg:maps-spigot + org.spigotmc:spigot:${minecraft.version}-R0.1-SNAPSHOT:jar:remapped-obf + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + + + + \ No newline at end of file diff --git a/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/Crafting.java b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/Crafting.java new file mode 100644 index 0000000..b09c5c4 --- /dev/null +++ b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/Crafting.java @@ -0,0 +1,97 @@ +package com.jamesdpeters.minecraft.chests.v1_17_R1; + +import com.jamesdpeters.minecraft.chests.CraftingProvider; +import com.jamesdpeters.minecraft.chests.CraftingResult; +import net.minecraft.core.NonNullList; +import net.minecraft.server.level.WorldServer; +import net.minecraft.world.entity.player.EntityHuman; +import net.minecraft.world.inventory.Container; +import net.minecraft.world.inventory.InventoryCrafting; +import net.minecraft.world.item.crafting.Recipes; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_17_R1.CraftServer; +import org.bukkit.craftbukkit.v1_17_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; + +import java.util.ArrayList; + +public class Crafting implements CraftingProvider { + + @Override + public CraftingResult craft(World world, ItemStack[] items) { + CraftWorld craftWorld = (CraftWorld) world; + + // Setup crafting inventories. + InventoryCrafting inventoryCrafting = new InventoryCrafting(new Container(null, -1) { + @Override + public InventoryView getBukkitView() { + return null; + } + + @Override + public boolean canUse(EntityHuman entityHuman) { + return false; + } + }, 3, 3); + + for (int i = 0; i < items.length; i++) { + inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); + } + + var recipe = ((CraftServer) Bukkit.getServer()).getServer().getCraftingManager().craft(Recipes.a, inventoryCrafting, craftWorld.getHandle()); + + // Generate the resulting ItemStack from the Crafting Matrix + net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.b; + + if (recipe.isPresent()) { + itemStack = recipe.get().a(inventoryCrafting); + } + + return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); + } + + @Override + public Recipe getRecipe(Player player, World world, ItemStack[] items) { + return Bukkit.getCraftingRecipe(items, world); + } + + private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) { + CraftServer server = (CraftServer) Bukkit.getServer(); + NonNullList remainingItems = server.getServer().getCraftingManager().c(Recipes.a, inventoryCrafting, worldServer); + + CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); + + // Create resulting matrix and overflow items + for (int i = 0; i < remainingItems.size(); ++i) { + net.minecraft.world.item.ItemStack itemstack1 = inventoryCrafting.getItem(i); + net.minecraft.world.item.ItemStack itemstack2 = (net.minecraft.world.item.ItemStack) remainingItems.get(i); + + if (!itemstack1.isEmpty()) { + inventoryCrafting.splitStack(i, 1); + itemstack1 = inventoryCrafting.getItem(i); + } + + if (!itemstack2.isEmpty()) { + if (itemstack1.isEmpty()) { + inventoryCrafting.setItem(i, itemstack2); + } else if (net.minecraft.world.item.ItemStack.equals(itemstack1, itemstack2) && net.minecraft.world.item.ItemStack.matches(itemstack1, itemstack2)) { + itemstack2.add(itemstack1.getCount()); + inventoryCrafting.setItem(i, itemstack2); + } else { + craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); + } + } + } + + for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { + craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); + } + + return craftItemResult; + } +} diff --git a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/EntityEventListener_1_17.java b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/EntityEventListener_1_17.java similarity index 87% rename from ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/EntityEventListener_1_17.java rename to ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/EntityEventListener_1_17.java index eea0fd2..9bca68c 100644 --- a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/EntityEventListener_1_17.java +++ b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/EntityEventListener_1_17.java @@ -1,4 +1,4 @@ -package com.jamesdpeters.minecraft.chests.latest; +package com.jamesdpeters.minecraft.chests.v1_17_R1; import com.jamesdpeters.minecraft.chests.EntityEventListener; import org.bukkit.event.EventHandler; diff --git a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/MaterialChecker_1_17_R1.java b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/MaterialChecker_1_17_R1.java similarity index 94% rename from ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/MaterialChecker_1_17_R1.java rename to ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/MaterialChecker_1_17_R1.java index 9ddb96a..ab72966 100644 --- a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/MaterialChecker_1_17_R1.java +++ b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/MaterialChecker_1_17_R1.java @@ -1,4 +1,4 @@ -package com.jamesdpeters.minecraft.chests.latest; +package com.jamesdpeters.minecraft.chests.v1_17_R1; import com.jamesdpeters.minecraft.chests.BaseMaterialChecker; import com.jamesdpeters.minecraft.chests.MaterialChecker; diff --git a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/NMSProviderImpl.java b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/NMSProviderImpl.java similarity index 96% rename from ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/NMSProviderImpl.java rename to ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/NMSProviderImpl.java index efa974f..48c00ba 100644 --- a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/NMSProviderImpl.java +++ b/ChestsPlusPlus_1_17_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_17_R1/NMSProviderImpl.java @@ -1,4 +1,4 @@ -package com.jamesdpeters.minecraft.chests.latest; +package com.jamesdpeters.minecraft.chests.v1_17_R1; import com.jamesdpeters.minecraft.chests.ChestOpener; import com.jamesdpeters.minecraft.chests.CraftingProvider; diff --git a/ChestsPlusPlus_1_18_R1/pom.xml b/ChestsPlusPlus_1_18_R1/pom.xml new file mode 100644 index 0000000..17076a3 --- /dev/null +++ b/ChestsPlusPlus_1_18_R1/pom.xml @@ -0,0 +1,105 @@ + + + + + ChestsPlusPlus-Parent + com.jamesdpeters.minecraft.chests + 1.0-SNAPSHOT + ../pom.xml + + + + 1.18.1 + + + 4.0.0 + jar + ChestsPlusPlus_1_18_R1 + 1.0-SNAPSHOT + + + + spigotmc-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + com.jamesdpeters.minecraft.chests + ChestsPlusPlus-API + 1.0-SNAPSHOT + + + + org.spigotmc + spigot-api + ${minecraft.version}-R0.1-SNAPSHOT + provided + + + com.jamesdpeters.minecraft.chests + ChestsPlusPlus_1_17_R1 + 1.0-SNAPSHOT + compile + + + + org.spigotmc + spigot + ${minecraft.version}-R0.1-SNAPSHOT + remapped-mojang + provided + + + + + + + net.md-5 + specialsource-maven-plugin + 1.2.3 + + + package + + remap + + remap-obf + + org.spigotmc:minecraft-server:${minecraft.version}-R0.1-SNAPSHOT:txt:maps-mojang + true + org.spigotmc:spigot:${minecraft.version}-R0.1-SNAPSHOT:jar:remapped-mojang + true + remapped-obf + + + + package + + remap + + remap-spigot + + ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar + org.spigotmc:minecraft-server:${minecraft.version}-R0.1-SNAPSHOT:csrg:maps-spigot + org.spigotmc:spigot:${minecraft.version}-R0.1-SNAPSHOT:jar:remapped-obf + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + + + + \ No newline at end of file diff --git a/ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/Crafting.java b/ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/Crafting.java new file mode 100644 index 0000000..8c38c58 --- /dev/null +++ b/ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/Crafting.java @@ -0,0 +1,97 @@ +package com.jamesdpeters.minecraft.chests.v1_18_R1; + +import com.jamesdpeters.minecraft.chests.CraftingProvider; +import com.jamesdpeters.minecraft.chests.CraftingResult; +import net.minecraft.core.NonNullList; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.level.Level; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.craftbukkit.v1_18_R1.CraftServer; +import org.bukkit.craftbukkit.v1_18_R1.CraftWorld; +import org.bukkit.craftbukkit.v1_18_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryView; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.Recipe; + +import java.util.ArrayList; + +public class Crafting implements CraftingProvider { + + @Override + public CraftingResult craft(World world, ItemStack[] items) { + CraftWorld craftWorld = (CraftWorld) world; + + // Setup crafting inventories. + CraftingContainer inventoryCrafting = new CraftingContainer(new AbstractContainerMenu(null, -1) { + @Override + public InventoryView getBukkitView() { + return null; + } + + @Override + public boolean stillValid(net.minecraft.world.entity.player.Player player) { + return false; + } + + }, 3, 3); + + for (int i = 0; i < items.length; i++) { + inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(items[i])); + } + + var recipe = ((CraftServer) Bukkit.getServer()).getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, inventoryCrafting, craftWorld.getHandle()); + + // Generate the resulting ItemStack from the Crafting Matrix + net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.EMPTY; + + if (recipe.isPresent()) { + itemStack = recipe.get().assemble(inventoryCrafting); + } + + return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle()); + } + + @Override + public Recipe getRecipe(Player player, World world, ItemStack[] items) { + return Bukkit.getCraftingRecipe(items, world); + } + + private CraftingResult createItemCraftResult(ItemStack itemStack, CraftingContainer inventoryCrafting, Level worldServer) { + CraftServer server = (CraftServer) Bukkit.getServer(); + NonNullList remainingItems = server.getServer().getRecipeManager().getRemainingItemsFor(RecipeType.CRAFTING, inventoryCrafting, worldServer); + + CraftingResult craftItemResult = new CraftingResult(itemStack, new ItemStack[9], new ArrayList<>()); + + // Create resulting matrix and overflow items + for (int i = 0; i < remainingItems.size(); ++i) { + net.minecraft.world.item.ItemStack itemstack1 = inventoryCrafting.getItem(i); + net.minecraft.world.item.ItemStack itemstack2 = (net.minecraft.world.item.ItemStack) remainingItems.get(i); + + if (!itemstack1.isEmpty()) { + inventoryCrafting.removeItem(i, 1); + itemstack1 = inventoryCrafting.getItem(i); + } + + if (!itemstack2.isEmpty()) { + if (itemstack1.isEmpty()) { + inventoryCrafting.setItem(i, itemstack2); + } else if (net.minecraft.world.item.ItemStack.tagMatches(itemstack1, itemstack2) && net.minecraft.world.item.ItemStack.matches(itemstack1, itemstack2)) { + itemstack2.grow(itemstack1.getCount()); + inventoryCrafting.setItem(i, itemstack2); + } else { + craftItemResult.overflowItems().add(CraftItemStack.asBukkitCopy(itemstack2)); + } + } + } + + for (int i = 0; i < inventoryCrafting.getContents().size(); i++) { + craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i))); + } + + return craftItemResult; + } +} diff --git a/ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/NMSProviderImpl.java b/ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/NMSProviderImpl.java new file mode 100644 index 0000000..b8bfd49 --- /dev/null +++ b/ChestsPlusPlus_1_18_R1/src/main/java/com/jamesdpeters/minecraft/chests/v1_18_R1/NMSProviderImpl.java @@ -0,0 +1,50 @@ +package com.jamesdpeters.minecraft.chests.v1_18_R1; + +import com.jamesdpeters.minecraft.chests.ChestOpener; +import com.jamesdpeters.minecraft.chests.CraftingProvider; +import com.jamesdpeters.minecraft.chests.EntityEventListener; +import com.jamesdpeters.minecraft.chests.MaterialChecker; +import com.jamesdpeters.minecraft.chests.NMSProvider; +import com.jamesdpeters.minecraft.chests.v1_17_R1.EntityEventListener_1_17; +import com.jamesdpeters.minecraft.chests.v1_17_R1.MaterialChecker_1_17_R1; +import com.jamesdpeters.minecraft.chests.v1_18_R1.Crafting; +import org.bukkit.block.Lidded; +import org.bukkit.entity.ItemFrame; + +public class NMSProviderImpl implements NMSProvider { + + @Override + public ChestOpener getChestOpener() { + return (inventory, container, tileEntityOpener) -> { + if(container instanceof Lidded){ + if(inventory.getViewers().size() > 0){ + ((Lidded) container).open(); + } else { + ((Lidded) container).close(); + } + } + return null; + }; + } + + @Override + public MaterialChecker getMaterialChecker() { + return new MaterialChecker_1_17_R1(); + } + + @Override + public CraftingProvider getCraftingProvider() { + return new Crafting(); + } + + @Override + public EntityEventListener getEntityEventListener() { + return new EntityEventListener_1_17(); + } + + @Override + public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) { + itemFrame.setVisible(visible); + } + +} diff --git a/ChestsPlusPlus_LatestMC/pom.xml b/ChestsPlusPlus_LatestMC/pom.xml deleted file mode 100644 index 779271d..0000000 --- a/ChestsPlusPlus_LatestMC/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - ChestsPlusPlus-Parent - com.jamesdpeters.minecraft.chests - 1.0-SNAPSHOT - ../pom.xml - - - - 1.17.1 - - - 4.0.0 - jar - ChestsPlusPlus_LatestMC - 1.0-SNAPSHOT - - - - spigotmc-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus-API - 1.0-SNAPSHOT - - - - org.spigotmc - spigot-api - ${minecraft.version}-R0.1-SNAPSHOT - provided - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_16 - 1.0-SNAPSHOT - compile - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 16 - 16 - - - - - - - \ No newline at end of file diff --git a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/Crafting.java b/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/Crafting.java deleted file mode 100644 index 26da3db..0000000 --- a/ChestsPlusPlus_LatestMC/src/main/java/com/jamesdpeters/minecraft/chests/latest/Crafting.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.jamesdpeters.minecraft.chests.latest; - -import com.jamesdpeters.minecraft.chests.CraftingProvider; -import com.jamesdpeters.minecraft.chests.CraftingResult; -import org.bukkit.Bukkit; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.Recipe; - -import java.util.Arrays; - -public class Crafting implements CraftingProvider { - - @Override - public CraftingResult craft(Player player, World world, ItemStack[] items) { - // Create copy of array since Bukkit#craftItem modifies the input array. - ItemStack[] itemsCopy = Arrays.copyOf(items, items.length); - - var item = Bukkit.craftItem(itemsCopy, world, player); - return new CraftingResult(item, itemsCopy); - } - - @Override - public Recipe getRecipe(Player player, World world, ItemStack[] items) { - return Bukkit.getCraftingRecipe(items, world); - } -} diff --git a/ChestsPlusPlus_Main/pom.xml b/ChestsPlusPlus_Main/pom.xml index 9e61b27..502a957 100644 --- a/ChestsPlusPlus_Main/pom.xml +++ b/ChestsPlusPlus_Main/pom.xml @@ -22,13 +22,13 @@ - spigotmc-repo + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ dmulloy2-repo - http://repo.dmulloy2.net/nexus/repository/public/ + https://repo.dmulloy2.net/nexus/repository/public/ @@ -36,10 +36,10 @@ https://repo.codemc.org/repository/maven-public - - sytm-nexus - https://repo.sytm.de/repository/maven-hosted/ - + + + + jitpack.io @@ -101,7 +101,15 @@ com.jamesdpeters.minecraft.chests - ChestsPlusPlus_LatestMC + ChestsPlusPlus_1_18_R1 + 1.0-SNAPSHOT + jar + compile + + + + com.jamesdpeters.minecraft.chests + ChestsPlusPlus_1_17_R1 1.0-SNAPSHOT jar compile @@ -131,22 +139,6 @@ compile - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_15 - 1.0-SNAPSHOT - jar - compile - - - - com.jamesdpeters.minecraft.chests - ChestsPlusPlus_1_14 - 1.0-SNAPSHOT - jar - compile - - com.jamesdpeters.minecraft.chests ChestsPlusPlus-API diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java index 731e297..b807f2c 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/api/NMSProviderDefault.java @@ -1,7 +1,11 @@ package com.jamesdpeters.minecraft.chests.api; -import com.jamesdpeters.minecraft.chests.*; -import com.jamesdpeters.minecraft.chests.latest.NMSProviderImpl; +import com.jamesdpeters.minecraft.chests.ChestOpener; +import com.jamesdpeters.minecraft.chests.CraftingProvider; +import com.jamesdpeters.minecraft.chests.EntityEventListener; +import com.jamesdpeters.minecraft.chests.MaterialChecker; +import com.jamesdpeters.minecraft.chests.NMSProvider; +import com.jamesdpeters.minecraft.chests.v1_17_R1.NMSProviderImpl; import org.bukkit.entity.ItemFrame; public class NMSProviderDefault implements NMSProvider { diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/crafting/Crafting.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/crafting/Crafting.java index efea76d..93dc583 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/crafting/Crafting.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/crafting/Crafting.java @@ -37,7 +37,7 @@ public class Crafting { } public static CraftingResult craft(Player player, ItemStack[] recipe) { - return ApiSpecific.getNmsProvider().getCraftingProvider().craft(player, Bukkit.getWorlds().get(0), recipe); + return ApiSpecific.getNmsProvider().getCraftingProvider().craft(Bukkit.getWorlds().get(0), recipe); } public static Recipe getRecipeByKey(NamespacedKey key) { diff --git a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/VirtualCraftingHolder.java b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/VirtualCraftingHolder.java index 2c71572..3a6ff72 100644 --- a/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/VirtualCraftingHolder.java +++ b/ChestsPlusPlus_Main/src/main/java/com/jamesdpeters/minecraft/chests/interfaces/VirtualCraftingHolder.java @@ -106,7 +106,7 @@ public class VirtualCraftingHolder implements InventoryHolder { else if (recipe instanceof ShapelessRecipe) setCrafting((ShapelessRecipe) recipe); else { // For ComplexRecipes or other implementations just use the result and original matrix for choices. - result = ApiSpecific.getNmsProvider().getCraftingProvider().craft(storage.getOwner().getPlayer(), Bukkit.getWorlds().get(0), matrix).result(); + result = ApiSpecific.getNmsProvider().getCraftingProvider().craft(Bukkit.getWorlds().get(0), matrix).result(); for (int i = 0; i < matrix.length; i++) { ItemStack item = matrix[i]; if (item != null) { diff --git a/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties b/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties index e862fb2..dc5fbbb 100644 --- a/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties +++ b/ChestsPlusPlus_Main/src/main/resources/lang/en_GB.properties @@ -1,4 +1,4 @@ -# Chests++ Language File (Version 2.5.2-BETA-2) +# Chests++ Language File (Version 2.5.2-BETA-3) # NOTE: This file gets replaced when the plugin launches! If you want to make modifications create a copy first! # To create a new language file simply create a copy of this file and rename it to your desired choice for example 'en_US.properties' # It should be located in the 'lang' folder diff --git a/POEditorImport/pom.xml b/POEditorImport/pom.xml index 5b418b7..dd5dbfd 100644 --- a/POEditorImport/pom.xml +++ b/POEditorImport/pom.xml @@ -41,7 +41,7 @@ com.jamesdpeters.minecraft.chests ChestsPlusPlus-Master - 2.3.1-Release + 2.5.2-BETA-3 compile diff --git a/pom.xml b/pom.xml index 8e488d2..3bb825c 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,8 @@ ChestsPlusPlusAPI - ChestsPlusPlus_LatestMC + ChestsPlusPlus_1_18_R1 + ChestsPlusPlus_1_17_R1 ChestsPlusPlus_1_16_R3 ChestsPlusPlus_1_16_R2 ChestsPlusPlus_1_16 @@ -25,7 +26,7 @@ - spigotmc-repo + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/