mirror of
https://github.com/JamesPeters98/ChestsPlusPlus.git
synced 2025-01-24 17:21:41 +01:00
AutoCrafting now respects PrepareItemCraftEvent
This commit is contained in:
parent
e5ce682ae9
commit
f6c07e8db1
@ -15,7 +15,7 @@ public class Api {
|
|||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static NMSProvider getNMSProvider() {
|
public static NMSProvider setupNMSProvider() {
|
||||||
String packageName = NMSProvider.class.getPackage().getName();
|
String packageName = NMSProvider.class.getPackage().getName();
|
||||||
String nmsVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
String nmsVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
|
||||||
String nmsProvider = packageName + "." + nmsVersion + ".NMSProviderImpl";
|
String nmsProvider = packageName + "." + nmsVersion + ".NMSProviderImpl";
|
||||||
|
@ -6,6 +6,7 @@ public interface NMSProvider {
|
|||||||
ChestOpener getChestOpener();
|
ChestOpener getChestOpener();
|
||||||
MaterialChecker getMaterialChecker();
|
MaterialChecker getMaterialChecker();
|
||||||
CraftingProvider getCraftingProvider();
|
CraftingProvider getCraftingProvider();
|
||||||
|
NPCProvider getNPCProvider();
|
||||||
|
|
||||||
void setItemFrameVisible(ItemFrame itemFrame, boolean visible);
|
void setItemFrameVisible(ItemFrame itemFrame, boolean visible);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests;
|
||||||
|
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
|
||||||
|
public interface NPCProvider {
|
||||||
|
HumanEntity createHumanEntity();
|
||||||
|
}
|
@ -1,9 +1,6 @@
|
|||||||
package com.jamesdpeters.minecraft.chests.v1_14_R1;
|
package com.jamesdpeters.minecraft.chests.v1_14_R1;
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
import com.jamesdpeters.minecraft.chests.*;
|
||||||
import com.jamesdpeters.minecraft.chests.CraftingProvider;
|
|
||||||
import com.jamesdpeters.minecraft.chests.MaterialChecker;
|
|
||||||
import com.jamesdpeters.minecraft.chests.NMSProvider;
|
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
|
|
||||||
public class NMSProviderImpl implements NMSProvider {
|
public class NMSProviderImpl implements NMSProvider {
|
||||||
@ -22,6 +19,11 @@ public class NMSProviderImpl implements NMSProvider {
|
|||||||
return new Crafting();
|
return new Crafting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NPCProvider getNPCProvider() {
|
||||||
|
return new NPC();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||||
//Not support in 1.14
|
//Not support in 1.14
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests.v1_14_R1;
|
||||||
|
|
||||||
|
import com.jamesdpeters.minecraft.chests.NPCProvider;
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import net.minecraft.server.v1_14_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_14_R1.MinecraftServer;
|
||||||
|
import net.minecraft.server.v1_14_R1.PlayerInteractManager;
|
||||||
|
import net.minecraft.server.v1_14_R1.WorldServer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.craftbukkit.v1_14_R1.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class NPC implements NPCProvider {
|
||||||
|
public HumanEntity createHumanEntity() {
|
||||||
|
MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
|
WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
|
||||||
|
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), "Chests++NPC");
|
||||||
|
EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld));
|
||||||
|
return npc.getBukkitEntity();
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,6 @@
|
|||||||
package com.jamesdpeters.minecraft.chests.v1_15_R1;
|
package com.jamesdpeters.minecraft.chests.v1_15_R1;
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
import com.jamesdpeters.minecraft.chests.*;
|
||||||
import com.jamesdpeters.minecraft.chests.CraftingProvider;
|
|
||||||
import com.jamesdpeters.minecraft.chests.MaterialChecker;
|
|
||||||
import com.jamesdpeters.minecraft.chests.NMSProvider;
|
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
|
|
||||||
public class NMSProviderImpl implements NMSProvider {
|
public class NMSProviderImpl implements NMSProvider {
|
||||||
@ -22,6 +19,11 @@ public class NMSProviderImpl implements NMSProvider {
|
|||||||
return new Crafting();
|
return new Crafting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NPCProvider getNPCProvider() {
|
||||||
|
return new NPC();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||||
//Not supported in 1.15
|
//Not supported in 1.15
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests.v1_15_R1;
|
||||||
|
|
||||||
|
import com.jamesdpeters.minecraft.chests.NPCProvider;
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import net.minecraft.server.v1_15_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_15_R1.MinecraftServer;
|
||||||
|
import net.minecraft.server.v1_15_R1.PlayerInteractManager;
|
||||||
|
import net.minecraft.server.v1_15_R1.WorldServer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.craftbukkit.v1_15_R1.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class NPC implements NPCProvider {
|
||||||
|
public HumanEntity createHumanEntity() {
|
||||||
|
MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
|
WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
|
||||||
|
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), "Chests++NPC");
|
||||||
|
EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld));
|
||||||
|
return npc.getBukkitEntity();
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,7 @@
|
|||||||
package com.jamesdpeters.minecraft.chests.v1_16_R1;
|
package com.jamesdpeters.minecraft.chests.v1_16_R1;
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
import com.jamesdpeters.minecraft.chests.*;
|
||||||
import com.jamesdpeters.minecraft.chests.CraftingProvider;
|
import com.jamesdpeters.minecraft.chests.v1_14_R1.NPC;
|
||||||
import com.jamesdpeters.minecraft.chests.MaterialChecker;
|
|
||||||
import com.jamesdpeters.minecraft.chests.NMSProvider;
|
|
||||||
import org.bukkit.block.Lidded;
|
import org.bukkit.block.Lidded;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
|
|
||||||
@ -35,6 +33,11 @@ public class NMSProviderImpl implements NMSProvider {
|
|||||||
return new Crafting();
|
return new Crafting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NPCProvider getNPCProvider() {
|
||||||
|
return new NPC();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||||
itemFrame.setVisible(visible);
|
itemFrame.setVisible(visible);
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests.v1_16_R1;
|
||||||
|
|
||||||
|
import com.jamesdpeters.minecraft.chests.NPCProvider;
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import net.minecraft.server.v1_16_R1.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_16_R1.MinecraftServer;
|
||||||
|
import net.minecraft.server.v1_16_R1.PlayerInteractManager;
|
||||||
|
import net.minecraft.server.v1_16_R1.WorldServer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R1.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class NPC implements NPCProvider {
|
||||||
|
public HumanEntity createHumanEntity() {
|
||||||
|
MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
|
WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
|
||||||
|
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), "Chests++NPC");
|
||||||
|
EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld));
|
||||||
|
return npc.getBukkitEntity();
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,7 @@
|
|||||||
package com.jamesdpeters.minecraft.chests.v1_16_R2;
|
package com.jamesdpeters.minecraft.chests.v1_16_R2;
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
import com.jamesdpeters.minecraft.chests.*;
|
||||||
import com.jamesdpeters.minecraft.chests.CraftingProvider;
|
import com.jamesdpeters.minecraft.chests.v1_15_R1.NPC;
|
||||||
import com.jamesdpeters.minecraft.chests.MaterialChecker;
|
|
||||||
import com.jamesdpeters.minecraft.chests.NMSProvider;
|
|
||||||
import org.bukkit.block.Lidded;
|
import org.bukkit.block.Lidded;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
|
|
||||||
@ -35,6 +33,11 @@ public class NMSProviderImpl implements NMSProvider {
|
|||||||
return new Crafting();
|
return new Crafting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NPCProvider getNPCProvider() {
|
||||||
|
return new NPC();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||||
itemFrame.setVisible(visible);
|
itemFrame.setVisible(visible);
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests.v1_16_R2;
|
||||||
|
|
||||||
|
import com.jamesdpeters.minecraft.chests.NPCProvider;
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import net.minecraft.server.v1_16_R2.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_16_R2.MinecraftServer;
|
||||||
|
import net.minecraft.server.v1_16_R2.PlayerInteractManager;
|
||||||
|
import net.minecraft.server.v1_16_R2.WorldServer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R2.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R2.CraftWorld;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class NPC implements NPCProvider {
|
||||||
|
public HumanEntity createHumanEntity() {
|
||||||
|
MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
|
WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
|
||||||
|
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), "Chests++NPC");
|
||||||
|
EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld));
|
||||||
|
return npc.getBukkitEntity();
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,6 @@
|
|||||||
package com.jamesdpeters.minecraft.chests.v1_16_R3;
|
package com.jamesdpeters.minecraft.chests.v1_16_R3;
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
import com.jamesdpeters.minecraft.chests.*;
|
||||||
import com.jamesdpeters.minecraft.chests.CraftingProvider;
|
|
||||||
import com.jamesdpeters.minecraft.chests.MaterialChecker;
|
|
||||||
import com.jamesdpeters.minecraft.chests.NMSProvider;
|
|
||||||
import org.bukkit.block.Lidded;
|
import org.bukkit.block.Lidded;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
|
|
||||||
@ -35,6 +32,11 @@ public class NMSProviderImpl implements NMSProvider {
|
|||||||
return new Crafting();
|
return new Crafting();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NPCProvider getNPCProvider() {
|
||||||
|
return new NPC();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||||
itemFrame.setVisible(visible);
|
itemFrame.setVisible(visible);
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests.v1_16_R3;
|
||||||
|
|
||||||
|
import com.jamesdpeters.minecraft.chests.NPCProvider;
|
||||||
|
import com.mojang.authlib.GameProfile;
|
||||||
|
import net.minecraft.server.v1_16_R3.EntityPlayer;
|
||||||
|
import net.minecraft.server.v1_16_R3.MinecraftServer;
|
||||||
|
import net.minecraft.server.v1_16_R3.PlayerInteractManager;
|
||||||
|
import net.minecraft.server.v1_16_R3.WorldServer;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R3.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class NPC implements NPCProvider {
|
||||||
|
public HumanEntity createHumanEntity() {
|
||||||
|
MinecraftServer nmsServer = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
|
WorldServer nmsWorld = ((CraftWorld) Bukkit.getWorlds().get(0)).getHandle();
|
||||||
|
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), "Chests++NPC");
|
||||||
|
EntityPlayer npc = new EntityPlayer(nmsServer, nmsWorld, gameProfile, new PlayerInteractManager(nmsWorld));
|
||||||
|
return npc.getBukkitEntity();
|
||||||
|
}
|
||||||
|
}
|
@ -14,7 +14,7 @@ public class ApiSpecific {
|
|||||||
private static NMSProvider nmsProvider;
|
private static NMSProvider nmsProvider;
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
nmsProvider = Api.getNMSProvider();
|
nmsProvider = Api.setupNMSProvider();
|
||||||
if (nmsProvider == null) nmsProvider = new NMSProviderDefault();
|
if (nmsProvider == null) nmsProvider = new NMSProviderDefault();
|
||||||
materialChecker = nmsProvider.getMaterialChecker();
|
materialChecker = nmsProvider.getMaterialChecker();
|
||||||
chestOpener = nmsProvider.getChestOpener();
|
chestOpener = nmsProvider.getChestOpener();
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package com.jamesdpeters.minecraft.chests.api;
|
package com.jamesdpeters.minecraft.chests.api;
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
import com.jamesdpeters.minecraft.chests.*;
|
||||||
import com.jamesdpeters.minecraft.chests.CraftingProvider;
|
|
||||||
import com.jamesdpeters.minecraft.chests.MaterialChecker;
|
|
||||||
import com.jamesdpeters.minecraft.chests.NMSProvider;
|
|
||||||
import com.jamesdpeters.minecraft.chests.v1_16_R1.NMSProviderImpl;
|
import com.jamesdpeters.minecraft.chests.v1_16_R1.NMSProviderImpl;
|
||||||
import org.bukkit.entity.ItemFrame;
|
import org.bukkit.entity.ItemFrame;
|
||||||
|
|
||||||
@ -34,6 +31,11 @@ public class NMSProviderDefault implements NMSProvider {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NPCProvider getNPCProvider() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
||||||
//Not supported in Bukkit api 1.14.
|
//Not supported in Bukkit api 1.14.
|
||||||
|
@ -0,0 +1,230 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests.interfaces;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
|
import org.bukkit.inventory.*;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ListIterator;
|
||||||
|
|
||||||
|
public class CraftingInventoryImpl implements CraftingInventory {
|
||||||
|
|
||||||
|
Inventory inventory;
|
||||||
|
ItemStack result;
|
||||||
|
ItemStack[] matrix;
|
||||||
|
Recipe recipe;
|
||||||
|
|
||||||
|
public CraftingInventoryImpl(Inventory inventory, ItemStack result, List<ItemStack> matrix, Recipe recipe) {
|
||||||
|
this.inventory = inventory;
|
||||||
|
this.result = result;
|
||||||
|
this.matrix = matrix.toArray(new ItemStack[0]);
|
||||||
|
this.recipe = recipe;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public ItemStack getResult() {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ItemStack[] getMatrix() {
|
||||||
|
return matrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setResult(@Nullable ItemStack newResult) {
|
||||||
|
result = newResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMatrix(@NotNull ItemStack[] contents) {
|
||||||
|
matrix = contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public Recipe getRecipe() {
|
||||||
|
return recipe;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// INVENTORY METHODS
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSize() {
|
||||||
|
return inventory.getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxStackSize() {
|
||||||
|
return inventory.getMaxStackSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMaxStackSize(int size) {
|
||||||
|
inventory.setMaxStackSize(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public ItemStack getItem(int index) {
|
||||||
|
return inventory.getItem(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setItem(int index, @Nullable ItemStack item) {
|
||||||
|
inventory.setItem(index, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HashMap<Integer, ItemStack> addItem(@NotNull ItemStack... items)
|
||||||
|
throws IllegalArgumentException {
|
||||||
|
return inventory.addItem(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HashMap<Integer, ItemStack> removeItem(@NotNull ItemStack... items)
|
||||||
|
throws IllegalArgumentException {
|
||||||
|
return inventory.removeItem(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ItemStack[] getContents() {
|
||||||
|
return inventory.getContents();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setContents(@NotNull ItemStack[] items) throws IllegalArgumentException {
|
||||||
|
inventory.setContents(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ItemStack[] getStorageContents() {
|
||||||
|
return inventory.getStorageContents();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStorageContents(@NotNull ItemStack[] items) throws IllegalArgumentException {
|
||||||
|
inventory.setStorageContents(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(@NotNull Material material) throws IllegalArgumentException {
|
||||||
|
return inventory.contains(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(@Nullable ItemStack item) {
|
||||||
|
return inventory.contains(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(@NotNull Material material, int amount) throws IllegalArgumentException {
|
||||||
|
return inventory.contains(material, amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(@Nullable ItemStack item, int amount) {
|
||||||
|
return inventory.contains(item, amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsAtLeast(@Nullable ItemStack item, int amount) {
|
||||||
|
return inventory.containsAtLeast(item, amount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HashMap<Integer, ? extends ItemStack> all(@NotNull Material material)
|
||||||
|
throws IllegalArgumentException {
|
||||||
|
return inventory.all(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HashMap<Integer, ? extends ItemStack> all(@Nullable ItemStack item) {
|
||||||
|
return inventory.all(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int first(@NotNull Material material) throws IllegalArgumentException {
|
||||||
|
return inventory.first(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int first(@NotNull ItemStack item) {
|
||||||
|
return inventory.first(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int firstEmpty() {
|
||||||
|
return inventory.firstEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(@NotNull Material material) throws IllegalArgumentException {
|
||||||
|
inventory.remove(material);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(@NotNull ItemStack item) {
|
||||||
|
inventory.remove(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear(int index) {
|
||||||
|
inventory.clear(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear() {
|
||||||
|
inventory.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public List<HumanEntity> getViewers() {
|
||||||
|
return inventory.getViewers();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public InventoryType getType() {
|
||||||
|
return inventory.getType();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public InventoryHolder getHolder() {
|
||||||
|
return inventory.getHolder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ListIterator<ItemStack> iterator() {
|
||||||
|
return inventory.iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public ListIterator<ItemStack> iterator(int index) {
|
||||||
|
return inventory.iterator(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public Location getLocation() {
|
||||||
|
return inventory.getLocation();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.jamesdpeters.minecraft.chests.interfaces;
|
||||||
|
|
||||||
|
import org.bukkit.entity.HumanEntity;
|
||||||
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryView;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class InventoryViewImpl extends InventoryView {
|
||||||
|
|
||||||
|
Inventory top, bottom;
|
||||||
|
HumanEntity humanEntity;
|
||||||
|
|
||||||
|
public InventoryViewImpl(Inventory top, Inventory bottom, HumanEntity humanEntity){
|
||||||
|
this.top = top;
|
||||||
|
this.bottom = bottom;
|
||||||
|
this.humanEntity = humanEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Inventory getTopInventory() {
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Inventory getBottomInventory() {
|
||||||
|
return bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public HumanEntity getPlayer() {
|
||||||
|
return humanEntity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public InventoryType getType() {
|
||||||
|
return InventoryType.WORKBENCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public String getTitle() {
|
||||||
|
return "ChestsPlusPlusInventoryView";
|
||||||
|
}
|
||||||
|
}
|
@ -8,11 +8,6 @@ import com.jamesdpeters.minecraft.chests.serialize.Config;
|
|||||||
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorage;
|
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorage;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
@ -22,16 +17,17 @@ import org.bukkit.block.Container;
|
|||||||
import org.bukkit.block.Hopper;
|
import org.bukkit.block.Hopper;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.event.inventory.PrepareItemCraftEvent;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.*;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.Recipe;
|
|
||||||
import org.bukkit.inventory.RecipeChoice;
|
|
||||||
import org.bukkit.inventory.ShapedRecipe;
|
|
||||||
import org.bukkit.inventory.ShapelessRecipe;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class VirtualCraftingHolder implements InventoryHolder {
|
public class VirtualCraftingHolder implements InventoryHolder {
|
||||||
|
|
||||||
private final Inventory inventory;
|
private final Inventory inventory;
|
||||||
@ -261,7 +257,7 @@ public class VirtualCraftingHolder implements InventoryHolder {
|
|||||||
Utils.addIfNotNull(inventories, getInventory(block.getRelative(BlockFace.SOUTH)));
|
Utils.addIfNotNull(inventories, getInventory(block.getRelative(BlockFace.SOUTH)));
|
||||||
Utils.addIfNotNull(inventories, getInventory(block.getRelative(BlockFace.WEST)));
|
Utils.addIfNotNull(inventories, getInventory(block.getRelative(BlockFace.WEST)));
|
||||||
|
|
||||||
boolean didCraft = craftItem(inventories, output);
|
boolean didCraft = craftItem(inventories, output, getInventory());
|
||||||
|
|
||||||
//Play sound if crafting occured.
|
//Play sound if crafting occured.
|
||||||
if (didCraft) {
|
if (didCraft) {
|
||||||
@ -387,7 +383,7 @@ public class VirtualCraftingHolder implements InventoryHolder {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean craftItem(List<Inventory> inputs, Inventory output) {
|
private boolean craftItem(List<Inventory> inputs, Inventory output, Inventory craftingInventory) {
|
||||||
boolean sameInv = false;
|
boolean sameInv = false;
|
||||||
Inventory sameInventory = null;
|
Inventory sameInventory = null;
|
||||||
|
|
||||||
@ -413,10 +409,18 @@ public class VirtualCraftingHolder implements InventoryHolder {
|
|||||||
// Use NMS to get the real result considering meta data etc.
|
// Use NMS to get the real result considering meta data etc.
|
||||||
ItemStack realResult = Crafting.craft(recipe);
|
ItemStack realResult = Crafting.craft(recipe);
|
||||||
|
|
||||||
|
Recipe recipeActual = Crafting.getRecipe(recipe);
|
||||||
|
CraftingInventoryImpl craftingInventoryImpl = new CraftingInventoryImpl(craftingInventory, realResult, recipe, recipeActual);
|
||||||
|
InventoryViewImpl inventoryView = new InventoryViewImpl(craftingInventory, output, ApiSpecific.getNmsProvider().getNPCProvider().createHumanEntity());
|
||||||
|
PrepareItemCraftEvent itemCraftEvent = new PrepareItemCraftEvent(craftingInventoryImpl, inventoryView, false);
|
||||||
|
Bukkit.getPluginManager().callEvent(itemCraftEvent);
|
||||||
|
|
||||||
|
if (craftingInventoryImpl.result == null) return false;
|
||||||
|
|
||||||
//If we reach here there are enough materials so check for space in the Hopper and update inventory.
|
//If we reach here there are enough materials so check for space in the Hopper and update inventory.
|
||||||
//Check if output and input are the same inventory to avoid duplication.
|
//Check if output and input are the same inventory to avoid duplication.
|
||||||
Inventory tempOutput = sameInv ? sameInventory : Utils.copyInventory(output);
|
Inventory tempOutput = sameInv ? sameInventory : Utils.copyInventory(output);
|
||||||
HashMap<Integer, ItemStack> map = tempOutput.addItem(realResult);
|
HashMap<Integer, ItemStack> map = tempOutput.addItem(craftingInventoryImpl.result);
|
||||||
|
|
||||||
//If result fits into output copy over the temporary inventories.
|
//If result fits into output copy over the temporary inventories.
|
||||||
if (map.isEmpty()) {
|
if (map.isEmpty()) {
|
||||||
|
@ -6,15 +6,12 @@ import com.jamesdpeters.minecraft.chests.interfaces.VirtualInventoryHolder;
|
|||||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||||
import com.jamesdpeters.minecraft.chests.sort.InventorySorter;
|
import com.jamesdpeters.minecraft.chests.sort.InventorySorter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.inventory.InventoryAction;
|
import org.bukkit.event.inventory.*;
|
||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
|
||||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
|
||||||
import org.bukkit.event.inventory.InventoryInteractEvent;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
@ -122,5 +119,13 @@ public class InventoryListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void craftEvent(PrepareItemCraftEvent event){
|
||||||
|
if (event.getRecipe() == null) return;
|
||||||
|
if (event.getRecipe().getResult().getType() == Material.DIAMOND_BLOCK){
|
||||||
|
event.getInventory().setResult(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user