Drop 1.14 & 1.15 Support

Fix NPE issue in EntityEventListener
This commit is contained in:
James Peters 2021-12-20 19:27:21 +00:00
parent 2569357d8b
commit 51035b60f4
28 changed files with 185 additions and 1137 deletions

View File

@ -24,7 +24,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.14.2-R0.1-SNAPSHOT</version>
<version>1.16.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>

View File

@ -4,16 +4,21 @@ import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import java.lang.reflect.InvocationTargetException;
import java.util.function.Supplier;
public class Api {
private static Plugin plugin;
private static NMSProvider nmsProvider;
public static void init(Plugin plugin) {
public static NMSProvider init(Plugin plugin, Supplier<NMSProvider> defaultProvider) {
Api.plugin = plugin;
Values.init(plugin);
nmsProvider = setupNMSProvider();
if (nmsProvider == null)
nmsProvider = defaultProvider.get();
return nmsProvider;
}
public static Plugin getPlugin() {
@ -33,8 +38,4 @@ public class Api {
return null;
}
}
public static NMSProvider getNmsProvider() {
return nmsProvider;
}
}

View File

@ -0,0 +1,137 @@
package com.jamesdpeters.minecraft.chests;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
public class BaseMaterialChecker extends MaterialChecker {
static List<Material> version_Items;
static List<Material> version_Ignored_Items;
public BaseMaterialChecker(){
version_Items = new ArrayList<>();
version_Items.addAll(Tag.SIGNS.getValues());
version_Items.addAll(Tag.WALL_SIGNS.getValues());
version_Items.addAll(Tag.DOORS.getValues());
version_Items.addAll(Tag.SAPLINGS.getValues());
version_Items.addAll(Tag.SMALL_FLOWERS.getValues());
version_Items.addAll(Tag.RAILS.getValues());
version_Items.addAll(Tag.CORAL_PLANTS.getValues());
version_Items.addAll(getGlassPanes());
version_Items.add(Material.BROWN_MUSHROOM);
version_Items.add(Material.RED_MUSHROOM);
version_Items.add(Material.END_ROD);
version_Items.add(Material.COBWEB);
version_Items.add(Material.GRASS);
version_Items.add(Material.FERN);
version_Items.add(Material.DEAD_BUSH);
version_Items.add(Material.SEAGRASS);
version_Items.add(Material.SEA_PICKLE);
version_Items.add(Material.LADDER);
version_Items.add(Material.IRON_BARS);
version_Items.add(Material.VINE);
version_Items.add(Material.LILY_PAD);
version_Items.add(Material.SUNFLOWER);
version_Items.add(Material.LILAC);
version_Items.add(Material.ROSE_BUSH);
version_Items.add(Material.PEONY);
version_Items.add(Material.TALL_GRASS);
version_Items.add(Material.LARGE_FERN);
version_Items.add(Material.BELL);
version_Items.add(Material.CAMPFIRE);
version_Items.add(Material.LANTERN);
version_Items.add(Material.TURTLE_EGG);
version_Items.add(Material.SUGAR_CANE);
version_Items.add(Material.KELP);
version_Items.add(Material.BAMBOO);
version_Items.add(Material.LEVER);
version_Items.add(Material.TRIPWIRE_HOOK);
version_Items.add(Material.REPEATER);
version_Items.add(Material.COMPARATOR);
version_Items.add(Material.CAULDRON);
version_Items.add(Material.BREWING_STAND);
version_Items.add(Material.HOPPER);
version_Items.add(Material.TORCH);
version_Items.add(Material.WHEAT);
version_Items.addAll(Tag.CROPS.getValues());
version_Items.addAll(Tag.TALL_FLOWERS.getValues());
version_Items.addAll(Tag.FLOWERS.getValues());
version_Items.add(Material.WARPED_FUNGUS);
version_Items.add(Material.WARPED_ROOTS);
version_Items.add(Material.TWISTING_VINES);
version_Items.add(Material.NETHER_SPROUTS);
version_Items.add(Material.WEEPING_VINES);
version_Items.add(Material.CRIMSON_ROOTS);
version_Items.add(Material.CRIMSON_FUNGUS);
version_Items.add(Material.SOUL_CAMPFIRE);
version_Items.add(Material.SOUL_LANTERN);
version_Items.add(Material.SOUL_TORCH);
version_Items.add(Material.CHAIN);
version_Ignored_Items = new ArrayList<>();
version_Ignored_Items.addAll(Tag.BEDS.getValues());
version_Ignored_Items.addAll(Tag.BANNERS.getValues());
version_Ignored_Items.add(Material.DRAGON_HEAD);
version_Ignored_Items.add(Material.PLAYER_HEAD);
version_Ignored_Items.add(Material.ZOMBIE_HEAD);
version_Ignored_Items.add(Material.SKELETON_SKULL);
version_Ignored_Items.add(Material.CREEPER_HEAD);
version_Ignored_Items.add(Material.SHIELD);
version_Ignored_Items.add(Material.CROSSBOW);
version_Ignored_Items.add(Material.TRIDENT);
version_Ignored_Items.add(Material.BOW);
}
private static List<Material> getGlassPanes(){
List<Material> materials = new ArrayList<>();
materials.add(Material.GLASS_PANE);
materials.add(Material.BLACK_STAINED_GLASS_PANE);
materials.add(Material.BLUE_STAINED_GLASS_PANE);
materials.add(Material.BROWN_STAINED_GLASS_PANE);
materials.add(Material.CYAN_STAINED_GLASS_PANE);
materials.add(Material.GRAY_STAINED_GLASS_PANE);
materials.add(Material.GREEN_STAINED_GLASS_PANE);
materials.add(Material.LIME_STAINED_GLASS_PANE);
materials.add(Material.MAGENTA_STAINED_GLASS_PANE);
materials.add(Material.ORANGE_STAINED_GLASS_PANE);
materials.add(Material.PINK_STAINED_GLASS_PANE);
materials.add(Material.PURPLE_STAINED_GLASS_PANE);
materials.add(Material.RED_STAINED_GLASS_PANE);
materials.add(Material.WHITE_STAINED_GLASS_PANE);
materials.add(Material.YELLOW_STAINED_GLASS_PANE);
materials.add(Material.LIGHT_BLUE_STAINED_GLASS_PANE);
materials.add(Material.LIGHT_GRAY_STAINED_GLASS_PANE);
return materials;
}
@Override
public boolean isTool(ItemStack itemStack){
String matType = itemStack.getType().toString();
if(matType.contains("AXE")) return true;
if(matType.contains("SWORD")) return true;
if(matType.contains("PICKAXE")) return true;
if(matType.contains("HOE")) return true;
if(matType.contains("SHOVEL")) return true;
if(itemStack.getType() == Material.FISHING_ROD) return true;
if(itemStack.getType() == Material.CARROT_ON_A_STICK) return true;
if(itemStack.getType() == Material.STICK) return true;
if(itemStack.getType() == Material.BLAZE_ROD) return true;
if(itemStack.getType() == Material.BONE) return true;
if(itemStack.getType() == Material.WARPED_FUNGUS_ON_A_STICK) return true;
return false;
}
@Override
public List<Material> graphically2DList() {
return version_Items;
}
@Override
public List<Material> ignoredMaterials() {
return version_Ignored_Items;
}
}

View File

@ -48,9 +48,10 @@ public abstract class EntityEventListener implements Listener {
}
private void setItemFrames(Stream<Entity> entityStream) {
entityStream.filter(entity ->
(entity instanceof ItemFrame
&& entity.getLocation().getBlock().getRelative(((ItemFrame) entity).getAttachedFace()).getState() instanceof Hopper))
.forEach(entity -> Api.getNmsProvider().setItemFrameVisible((ItemFrame) entity, !PluginConfig.INVISIBLE_FILTER_ITEM_FRAMES.get()));
entityStream
// Filter Item frames that are connected to Hoppers.
.filter(entity -> (entity instanceof ItemFrame
&& entity.getLocation().getBlock().getRelative(((ItemFrame) entity).getAttachedFace()).getState() instanceof Hopper))
.forEach(entity -> ((ItemFrame) entity).setVisible(!PluginConfig.INVISIBLE_FILTER_ITEM_FRAMES.get()));
}
}

View File

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ChestsPlusPlus-Parent</artifactId>
<groupId>com.jamesdpeters.minecraft.chests</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>ChestsPlusPlus_1_14</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>spigotmc-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.14.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.jamesdpeters.minecraft.chests</groupId>
<artifactId>ChestsPlusPlus-API</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
<version>1.14.4-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,62 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_14_R1;
import com.jamesdpeters.minecraft.chests.ChestOpener;
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
import com.jamesdpeters.minecraft.chests.v1_14_R1.tileentities.CustomTileEntityBarrel;
import com.jamesdpeters.minecraft.chests.v1_14_R1.tileentities.CustomTileEntityChest;
import net.minecraft.server.v1_14_R1.BlockPosition;
import net.minecraft.server.v1_14_R1.TileEntity;
import net.minecraft.server.v1_14_R1.TileEntityBarrel;
import net.minecraft.server.v1_14_R1.TileEntityChest;
import net.minecraft.server.v1_14_R1.TileEntityChestTrapped;
import net.minecraft.server.v1_14_R1.TileEntityTypes;
import net.minecraft.server.v1_14_R1.World;
import org.bukkit.block.Container;
import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_14_R1.block.CraftContainer;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.Inventory;
import java.util.List;
public class ChestOpener_1_14 implements ChestOpener {
@Override
public TileEntityOpener updateState(Inventory inventory, Container chest, TileEntityOpener tileEntityOpener) {
if(tileEntityOpener != null) {
tileEntityOpener.setViewers(inventory.getViewers());
return tileEntityOpener;
} else {
CraftContainer craftContainer = (CraftContainer) chest;
CraftWorld craftWorld = (CraftWorld) craftContainer.getWorld();
World world = craftWorld.getHandle();
BlockPosition position = craftContainer.getPosition();
TileEntity tileEntity = world.getTileEntity(position);
//Checks if Tile Entity has already got custom Opener.
if (tileEntity instanceof TileEntityOpener) {
tileEntityOpener = (TileEntityOpener) tileEntity;
tileEntityOpener.setViewers(inventory.getViewers());
return tileEntityOpener;
} else {
//If not set the new tile entity and set the viewers.
if (tileEntity instanceof TileEntityChest) {
CustomTileEntityChest tileEntityChest = new CustomTileEntityChest(tileEntity instanceof TileEntityChestTrapped ? TileEntityTypes.TRAPPED_CHEST : TileEntityTypes.CHEST);
setTileEnt(world, position, tileEntityChest, inventory.getViewers());
return tileEntityChest;
} else if (tileEntity instanceof TileEntityBarrel) {
CustomTileEntityBarrel barrel = new CustomTileEntityBarrel();
setTileEnt(world, position, barrel, inventory.getViewers());
return barrel;
}
}
return null;
}
}
private <T extends TileEntity & TileEntityOpener> void setTileEnt(World world, BlockPosition position, T tileEntOpener, List<HumanEntity> viewers){
world.removeTileEntity(position);
world.setTileEntity(position, tileEntOpener);
tileEntOpener.setViewers(viewers);
}
}

View File

@ -1,101 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_14_R1;
import com.jamesdpeters.minecraft.chests.CraftingProvider;
import com.jamesdpeters.minecraft.chests.CraftingResult;
import net.minecraft.server.v1_14_R1.Container;
import net.minecraft.server.v1_14_R1.ContainerWorkbench;
import net.minecraft.server.v1_14_R1.EntityHuman;
import net.minecraft.server.v1_14_R1.IRecipe;
import net.minecraft.server.v1_14_R1.InventoryCraftResult;
import net.minecraft.server.v1_14_R1.InventoryCrafting;
import net.minecraft.server.v1_14_R1.Item;
import net.minecraft.server.v1_14_R1.RecipeCrafting;
import net.minecraft.server.v1_14_R1.RecipeRepair;
import net.minecraft.server.v1_14_R1.Recipes;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_14_R1.CraftServer;
import org.bukkit.craftbukkit.v1_14_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_14_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_14_R1.event.CraftEventFactory;
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryCrafting;
import org.bukkit.craftbukkit.v1_14_R1.inventory.CraftInventoryView;
import org.bukkit.craftbukkit.v1_14_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.Optional;
public class Crafting implements CraftingProvider {
@Override
public CraftingResult craft(Player player, 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();
Optional<RecipeCrafting> recipe = getNMSRecipe(items, inventoryCrafting, craftWorld);
net.minecraft.server.v1_14_R1.ItemStack itemstack = net.minecraft.server.v1_14_R1.ItemStack.a;
if (recipe.isPresent()) {
RecipeCrafting recipeCrafting = recipe.get();
if (resultInventory.a(craftWorld.getHandle(), craftPlayer.getHandle(), recipeCrafting)) {
itemstack = recipeCrafting.a(inventoryCrafting);
}
}
net.minecraft.server.v1_14_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().n();
items[i] = remaining != null ? CraftItemStack.asBukkitCopy(new net.minecraft.server.v1_14_R1.ItemStack(remaining)) : null;
}
return new CraftingResult(CraftItemStack.asBukkitCopy(result), items);
}
@Override
public Recipe getRecipe(Player player, World world, ItemStack[] items) {
Container container = new Container(null, -1) {
@Override
public InventoryView getBukkitView() {
return null;
}
@Override
public boolean canUse(EntityHuman entityHuman) {
return false;
}
};
InventoryCrafting crafting = new InventoryCrafting(container, 3, 3);
for (int i = 0; i < items.length; i++) {
if(i >= 9) break; // ItemList cant contain more than 9 items.
crafting.setItem(i, CraftItemStack.asNMSCopy(items[i]));
}
CraftServer server = (CraftServer) Bukkit.getServer();
CraftWorld craftWorld = (CraftWorld) world;
Optional<RecipeCrafting> optional = server.getServer().getCraftingManager().craft(Recipes.CRAFTING, crafting, craftWorld.getHandle());
return optional.map(IRecipe::toBukkitRecipe).orElse(null);
}
private Optional<RecipeCrafting> getNMSRecipe(ItemStack[] craftingMatrix, InventoryCrafting inventoryCrafting, CraftWorld world) {
for(int i = 0; i < craftingMatrix.length; ++i) {
inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(craftingMatrix[i]));
}
CraftServer server = (CraftServer) Bukkit.getServer();
return server.getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, world.getHandle());
}
}

View File

@ -1,124 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_14_R1;
import com.jamesdpeters.minecraft.chests.MaterialChecker;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
public class MaterialChecker_1_14 extends MaterialChecker {
static List<Material> version_1_14_Items;
static List<Material> version_1_14_Ignored_Items;
public MaterialChecker_1_14(){
version_1_14_Items = new ArrayList<>();
version_1_14_Items.addAll(Tag.SIGNS.getValues());
version_1_14_Items.addAll(Tag.WALL_SIGNS.getValues());
version_1_14_Items.addAll(Tag.DOORS.getValues());
version_1_14_Items.addAll(Tag.SAPLINGS.getValues());
version_1_14_Items.addAll(Tag.SMALL_FLOWERS.getValues());
version_1_14_Items.addAll(Tag.RAILS.getValues());
version_1_14_Items.addAll(Tag.CORAL_PLANTS.getValues());
version_1_14_Items.addAll(getGlassPanes());
version_1_14_Items.add(Material.BROWN_MUSHROOM);
version_1_14_Items.add(Material.RED_MUSHROOM);
version_1_14_Items.add(Material.END_ROD);
version_1_14_Items.add(Material.COBWEB);
version_1_14_Items.add(Material.GRASS);
version_1_14_Items.add(Material.FERN);
version_1_14_Items.add(Material.DEAD_BUSH);
version_1_14_Items.add(Material.SEAGRASS);
version_1_14_Items.add(Material.SEA_PICKLE);
version_1_14_Items.add(Material.LADDER);
version_1_14_Items.add(Material.IRON_BARS);
version_1_14_Items.add(Material.VINE);
version_1_14_Items.add(Material.LILY_PAD);
version_1_14_Items.add(Material.SUNFLOWER);
version_1_14_Items.add(Material.LILAC);
version_1_14_Items.add(Material.ROSE_BUSH);
version_1_14_Items.add(Material.PEONY);
version_1_14_Items.add(Material.TALL_GRASS);
version_1_14_Items.add(Material.LARGE_FERN);
version_1_14_Items.add(Material.BELL);
version_1_14_Items.add(Material.CAMPFIRE);
version_1_14_Items.add(Material.LANTERN);
version_1_14_Items.add(Material.TURTLE_EGG);
version_1_14_Items.add(Material.SUGAR_CANE);
version_1_14_Items.add(Material.KELP);
version_1_14_Items.add(Material.BAMBOO);
version_1_14_Items.add(Material.LEVER);
version_1_14_Items.add(Material.TRIPWIRE_HOOK);
version_1_14_Items.add(Material.REPEATER);
version_1_14_Items.add(Material.COMPARATOR);
version_1_14_Items.add(Material.CAULDRON);
version_1_14_Items.add(Material.BREWING_STAND);
version_1_14_Items.add(Material.HOPPER);
version_1_14_Items.add(Material.TORCH);
version_1_14_Items.add(Material.WHEAT);
version_1_14_Ignored_Items = new ArrayList<>();
version_1_14_Ignored_Items.addAll(Tag.BEDS.getValues());
version_1_14_Ignored_Items.addAll(Tag.BANNERS.getValues());
version_1_14_Ignored_Items.add(Material.DRAGON_HEAD);
version_1_14_Ignored_Items.add(Material.PLAYER_HEAD);
version_1_14_Ignored_Items.add(Material.ZOMBIE_HEAD);
version_1_14_Ignored_Items.add(Material.SKELETON_SKULL);
version_1_14_Ignored_Items.add(Material.CREEPER_HEAD);
version_1_14_Ignored_Items.add(Material.SHIELD);
version_1_14_Ignored_Items.add(Material.CROSSBOW);
version_1_14_Ignored_Items.add(Material.TRIDENT);
version_1_14_Ignored_Items.add(Material.BOW);
}
private static List<Material> getGlassPanes(){
List<Material> materials = new ArrayList<>();
materials.add(Material.GLASS_PANE);
materials.add(Material.BLACK_STAINED_GLASS_PANE);
materials.add(Material.BLUE_STAINED_GLASS_PANE);
materials.add(Material.BROWN_STAINED_GLASS_PANE);
materials.add(Material.CYAN_STAINED_GLASS_PANE);
materials.add(Material.GRAY_STAINED_GLASS_PANE);
materials.add(Material.GREEN_STAINED_GLASS_PANE);
materials.add(Material.LIME_STAINED_GLASS_PANE);
materials.add(Material.MAGENTA_STAINED_GLASS_PANE);
materials.add(Material.ORANGE_STAINED_GLASS_PANE);
materials.add(Material.PINK_STAINED_GLASS_PANE);
materials.add(Material.PURPLE_STAINED_GLASS_PANE);
materials.add(Material.RED_STAINED_GLASS_PANE);
materials.add(Material.WHITE_STAINED_GLASS_PANE);
materials.add(Material.YELLOW_STAINED_GLASS_PANE);
materials.add(Material.LIGHT_BLUE_STAINED_GLASS_PANE);
materials.add(Material.LIGHT_GRAY_STAINED_GLASS_PANE);
return materials;
}
@Override
public boolean isTool(ItemStack itemStack){
String matType = itemStack.getType().toString();
if(matType.contains("AXE")) return true;
if(matType.contains("SWORD")) return true;
if(matType.contains("PICKAXE")) return true;
if(matType.contains("HOE")) return true;
if(matType.contains("SHOVEL")) return true;
if(itemStack.getType() == Material.FISHING_ROD) return true;
if(itemStack.getType() == Material.CARROT_ON_A_STICK) return true;
if(itemStack.getType() == Material.STICK) return true;
if(itemStack.getType() == Material.BLAZE_ROD) return true;
if(itemStack.getType() == Material.BONE) return true;
return false;
}
@Override
public List<Material> graphically2DList() {
return version_1_14_Items;
}
@Override
public List<Material> ignoredMaterials() {
return version_1_14_Ignored_Items;
}
}

View File

@ -1,31 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_14_R1;
import com.jamesdpeters.minecraft.chests.*;
import org.bukkit.entity.ItemFrame;
public class NMSProviderImpl implements NMSProvider {
@Override
public ChestOpener getChestOpener() {
return new ChestOpener_1_14();
}
@Override
public MaterialChecker getMaterialChecker() {
return new MaterialChecker_1_14();
}
@Override
public CraftingProvider getCraftingProvider() {
return new Crafting();
}
@Override
public EntityEventListener getEntityEventListener() {
return new EntityEventListener_1_14();
}
@Override
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
//Not support in 1.14
}
}

View File

@ -1,75 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_14_R1.tileentities;
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
import net.minecraft.server.v1_14_R1.BaseBlockPosition;
import net.minecraft.server.v1_14_R1.BlockBarrel;
import net.minecraft.server.v1_14_R1.EntityHuman;
import net.minecraft.server.v1_14_R1.EnumDirection;
import net.minecraft.server.v1_14_R1.IBlockData;
import net.minecraft.server.v1_14_R1.SoundCategory;
import net.minecraft.server.v1_14_R1.SoundEffect;
import net.minecraft.server.v1_14_R1.SoundEffects;
import net.minecraft.server.v1_14_R1.TileEntityBarrel;
import org.bukkit.entity.HumanEntity;
import java.util.List;
public class CustomTileEntityBarrel extends TileEntityBarrel implements TileEntityOpener {
private int phantomViewers = 0;
private List<HumanEntity> viewers;
@Override
public List<HumanEntity> getViewers() {
return viewers;
}
@Override
public void h() {
//super.h();
}
@Override
public void startOpen(EntityHuman entityhuman) {
//super.startOpen(entityhuman);
}
@Override
public void closeContainer(EntityHuman entityhuman) {
//do nothing.
}
@Override
public void setViewers(List<HumanEntity> viewers){
int previousViewers = phantomViewers;
phantomViewers = viewers.size();
this.viewers = viewers;
if(phantomViewers > 1 && previousViewers == 0) open();
if(phantomViewers == 0) close();
}
public void open(){
IBlockData iblockdata = this.getBlock();
a(iblockdata, SoundEffects.BLOCK_BARREL_OPEN);
a(iblockdata, true);
}
public void close(){
IBlockData iblockdata = this.getBlock();
a(iblockdata, SoundEffects.BLOCK_BARREL_CLOSE);
a(iblockdata, false);
}
private void a(IBlockData iblockdata, boolean flag) {
this.world.setTypeAndData(this.getPosition(), (IBlockData)iblockdata.set(BlockBarrel.b, flag), 3);
}
private void a(IBlockData iblockdata, SoundEffect soundeffect) {
BaseBlockPosition baseblockposition = ((EnumDirection)iblockdata.get(BlockBarrel.a)).n();
double d0 = (double)this.position.getX() + 0.5D + (double)baseblockposition.getX() / 2.0D;
double d1 = (double)this.position.getY() + 0.5D + (double)baseblockposition.getY() / 2.0D;
double d2 = (double)this.position.getZ() + 0.5D + (double)baseblockposition.getZ() / 2.0D;
this.world.playSound((EntityHuman)null, d0, d1, d2, soundeffect, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
}
}

View File

@ -1,83 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_14_R1.tileentities;
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
import net.minecraft.server.v1_14_R1.Block;
import net.minecraft.server.v1_14_R1.BlockChest;
import net.minecraft.server.v1_14_R1.BlockPropertyChestType;
import net.minecraft.server.v1_14_R1.EntityHuman;
import net.minecraft.server.v1_14_R1.EnumDirection;
import net.minecraft.server.v1_14_R1.SoundCategory;
import net.minecraft.server.v1_14_R1.SoundEffect;
import net.minecraft.server.v1_14_R1.SoundEffects;
import net.minecraft.server.v1_14_R1.TileEntityChest;
import net.minecraft.server.v1_14_R1.TileEntityTypes;
import org.bukkit.entity.HumanEntity;
import java.util.List;
public class CustomTileEntityChest extends TileEntityChest implements TileEntityOpener {
private int phantomViewers = 0;
private List<HumanEntity> viewers;
public CustomTileEntityChest(TileEntityTypes<?> tileEntityTypes){
super(tileEntityTypes);
}
@Override
public List<HumanEntity> getViewers() {
return viewers;
}
@Override
public void tick() {
//Do nothing.
}
@Override
protected void onOpen() {
Block block = this.getBlock().getBlock();
if (block instanceof BlockChest) {
this.world.playBlockAction(this.position, block, 1, viewers.size());
this.world.applyPhysics(this.position, block);
}
}
@Override
public void setViewers(List<HumanEntity> viewers){
int previousViewers = phantomViewers;
phantomViewers = viewers.size();
this.viewers = viewers;
if(phantomViewers > 1 && previousViewers == 0) this.a(SoundEffects.BLOCK_CHEST_OPEN);
if(phantomViewers == 0 && previousViewers != 0) this.a(SoundEffects.BLOCK_CHEST_CLOSE);
if(phantomViewers == 0 && previousViewers == 0) return;
onOpen();
}
private void a(SoundEffect soundeffect) {
BlockPropertyChestType blockpropertychesttype = this.getBlock().get(BlockChest.b);
if (blockpropertychesttype != BlockPropertyChestType.LEFT) {
double d0 = (double)this.position.getX() + 0.5D;
double d1 = (double)this.position.getY() + 0.5D;
double d2 = (double)this.position.getZ() + 0.5D;
if (blockpropertychesttype == BlockPropertyChestType.RIGHT) {
EnumDirection enumdirection = BlockChest.j(this.getBlock());
d0 += (double)enumdirection.getAdjacentX() * 0.5D;
d2 += (double)enumdirection.getAdjacentZ() * 0.5D;
}
this.world.playSound(null, d0, d1, d2, soundeffect, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
}
}
public void startOpen(EntityHuman entityhuman) {
}
public void closeContainer(EntityHuman entityhuman) {
}
}

View File

@ -1,53 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ChestsPlusPlus-Parent</artifactId>
<groupId>com.jamesdpeters.minecraft.chests</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>ChestsPlusPlus_1_15</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>spigotmc-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.jamesdpeters.minecraft.chests</groupId>
<artifactId>ChestsPlusPlus-API</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.15.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
<version>1.15.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.jamesdpeters.minecraft.chests</groupId>
<artifactId>ChestsPlusPlus_1_14</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,62 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_15_R1;
import com.jamesdpeters.minecraft.chests.ChestOpener;
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
import com.jamesdpeters.minecraft.chests.v1_15_R1.tileentities.CustomTileEntityBarrel;
import com.jamesdpeters.minecraft.chests.v1_15_R1.tileentities.CustomTileEntityChest;
import net.minecraft.server.v1_15_R1.BlockPosition;
import net.minecraft.server.v1_15_R1.TileEntity;
import net.minecraft.server.v1_15_R1.TileEntityBarrel;
import net.minecraft.server.v1_15_R1.TileEntityChest;
import net.minecraft.server.v1_15_R1.TileEntityChestTrapped;
import net.minecraft.server.v1_15_R1.TileEntityTypes;
import net.minecraft.server.v1_15_R1.World;
import org.bukkit.block.Container;
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_15_R1.block.CraftContainer;
import org.bukkit.entity.HumanEntity;
import org.bukkit.inventory.Inventory;
import java.util.List;
public class ChestOpener_1_15 implements ChestOpener {
@Override
public TileEntityOpener updateState(Inventory inventory, Container chest, TileEntityOpener tileEntityOpener) {
if(tileEntityOpener != null) {
tileEntityOpener.setViewers(inventory.getViewers());
return tileEntityOpener;
} else {
CraftContainer craftContainer = (CraftContainer) chest;
CraftWorld craftWorld = (CraftWorld) craftContainer.getWorld();
World world = craftWorld.getHandle();
BlockPosition position = craftContainer.getPosition();
TileEntity tileEntity = world.getTileEntity(position);
//Checks if Tile Entity has already got custom Opener.
if (tileEntity instanceof TileEntityOpener) {
tileEntityOpener = (TileEntityOpener) tileEntity;
tileEntityOpener.setViewers(inventory.getViewers());
return tileEntityOpener;
} else {
//If not set the new tile entity and set the viewers.
if (tileEntity instanceof TileEntityChest) {
CustomTileEntityChest tileEntityChest = new CustomTileEntityChest(tileEntity instanceof TileEntityChestTrapped ? TileEntityTypes.TRAPPED_CHEST : TileEntityTypes.CHEST);
setTileEnt(world, position, tileEntityChest, inventory.getViewers());
return tileEntityChest;
} else if (tileEntity instanceof TileEntityBarrel) {
CustomTileEntityBarrel barrel = new CustomTileEntityBarrel();
setTileEnt(world, position, barrel, inventory.getViewers());
return barrel;
}
}
return null;
}
}
private <T extends TileEntity & TileEntityOpener> void setTileEnt(World world, BlockPosition position, T tileEntOpener, List<HumanEntity> viewers){
world.removeTileEntity(position);
world.setTileEntity(position, tileEntOpener);
tileEntOpener.setViewers(viewers);
}
}

View File

@ -1,101 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_15_R1;
import com.jamesdpeters.minecraft.chests.CraftingProvider;
import com.jamesdpeters.minecraft.chests.CraftingResult;
import net.minecraft.server.v1_15_R1.Container;
import net.minecraft.server.v1_15_R1.ContainerWorkbench;
import net.minecraft.server.v1_15_R1.EntityHuman;
import net.minecraft.server.v1_15_R1.IRecipe;
import net.minecraft.server.v1_15_R1.InventoryCraftResult;
import net.minecraft.server.v1_15_R1.InventoryCrafting;
import net.minecraft.server.v1_15_R1.Item;
import net.minecraft.server.v1_15_R1.RecipeCrafting;
import net.minecraft.server.v1_15_R1.RecipeRepair;
import net.minecraft.server.v1_15_R1.Recipes;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_15_R1.CraftServer;
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_15_R1.event.CraftEventFactory;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryCrafting;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftInventoryView;
import org.bukkit.craftbukkit.v1_15_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.Optional;
public class Crafting implements CraftingProvider {
@Override
public CraftingResult craft(Player player, 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();
Optional<RecipeCrafting> recipe = getNMSRecipe(items, inventoryCrafting, craftWorld);
net.minecraft.server.v1_15_R1.ItemStack itemstack = net.minecraft.server.v1_15_R1.ItemStack.a;
if (recipe.isPresent()) {
RecipeCrafting recipeCrafting = recipe.get();
if (resultInventory.a(craftWorld.getHandle(), craftPlayer.getHandle(), recipeCrafting)) {
itemstack = recipeCrafting.a(inventoryCrafting);
}
}
net.minecraft.server.v1_15_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().p();
items[i] = remaining != null ? CraftItemStack.asBukkitCopy(new net.minecraft.server.v1_15_R1.ItemStack(remaining)) : null;
}
return new CraftingResult(CraftItemStack.asBukkitCopy(result), items);
}
@Override
public Recipe getRecipe(Player player, World world, ItemStack[] items) {
Container container = new Container(null, -1) {
@Override
public InventoryView getBukkitView() {
return null;
}
@Override
public boolean canUse(EntityHuman entityHuman) {
return false;
}
};
InventoryCrafting crafting = new InventoryCrafting(container, 3, 3);
for (int i = 0; i < items.length; i++) {
if(i >= 9) break; // ItemList cant contain more than 9 items.
crafting.setItem(i, CraftItemStack.asNMSCopy(items[i]));
}
CraftServer server = (CraftServer) Bukkit.getServer();
CraftWorld craftWorld = (CraftWorld) world;
Optional<RecipeCrafting> optional = server.getServer().getCraftingManager().craft(Recipes.CRAFTING, crafting, craftWorld.getHandle());
return optional.map(IRecipe::toBukkitRecipe).orElse(null);
}
private Optional<RecipeCrafting> getNMSRecipe(ItemStack[] craftingMatrix, InventoryCrafting inventoryCrafting, CraftWorld world) {
for(int i = 0; i < craftingMatrix.length; ++i) {
inventoryCrafting.setItem(i, CraftItemStack.asNMSCopy(craftingMatrix[i]));
}
CraftServer server = (CraftServer) Bukkit.getServer();
return server.getServer().getCraftingManager().craft(Recipes.CRAFTING, inventoryCrafting, world.getHandle());
}
}

View File

@ -1,45 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_15_R1;
import com.jamesdpeters.minecraft.chests.MaterialChecker;
import com.jamesdpeters.minecraft.chests.v1_14_R1.MaterialChecker_1_14;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
public class MaterialChecker_1_15 extends MaterialChecker {
private List<Material> materials;
private List<Material> ignoredMaterials;
private MaterialChecker materialChecker1_14;
public MaterialChecker_1_15(){
//Must add previous version values first!
materialChecker1_14 = new MaterialChecker_1_14();
materials = new ArrayList<>();
materials.addAll(materialChecker1_14.graphically2DList());
ignoredMaterials = new ArrayList<>();
ignoredMaterials.addAll(materialChecker1_14.ignoredMaterials());
}
@Override
public List<Material> graphically2DList() {
return materials;
}
@Override
public List<Material> ignoredMaterials() {
return ignoredMaterials;
}
@Override
public boolean isTool(ItemStack itemStack) {
//Check previous version first.
if(materialChecker1_14.isTool(itemStack)) return true;
return false;
}
}

View File

@ -1,32 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_15_R1;
import com.jamesdpeters.minecraft.chests.*;
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
import org.bukkit.entity.ItemFrame;
public class NMSProviderImpl implements NMSProvider {
@Override
public ChestOpener getChestOpener() {
return new ChestOpener_1_15();
}
@Override
public MaterialChecker getMaterialChecker() {
return new MaterialChecker_1_15();
}
@Override
public CraftingProvider getCraftingProvider() {
return new Crafting();
}
@Override
public EntityEventListener getEntityEventListener() {
return new EntityEventListener_1_14();
}
@Override
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
//Not supported in 1.15
}
}

View File

@ -1,75 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_15_R1.tileentities;
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
import net.minecraft.server.v1_15_R1.BaseBlockPosition;
import net.minecraft.server.v1_15_R1.BlockBarrel;
import net.minecraft.server.v1_15_R1.EntityHuman;
import net.minecraft.server.v1_15_R1.EnumDirection;
import net.minecraft.server.v1_15_R1.IBlockData;
import net.minecraft.server.v1_15_R1.SoundCategory;
import net.minecraft.server.v1_15_R1.SoundEffect;
import net.minecraft.server.v1_15_R1.SoundEffects;
import net.minecraft.server.v1_15_R1.TileEntityBarrel;
import org.bukkit.entity.HumanEntity;
import java.util.List;
public class CustomTileEntityBarrel extends TileEntityBarrel implements TileEntityOpener {
private int phantomViewers = 0;
private List<HumanEntity> viewers;
@Override
public List<HumanEntity> getViewers() {
return viewers;
}
@Override
public void h() {
//super.h();
}
@Override
public void startOpen(EntityHuman entityhuman) {
//Do nothing
}
@Override
public void closeContainer(EntityHuman entityhuman) {
//do nothing.
}
@Override
public void setViewers(List<HumanEntity> viewers){
int previousViewers = phantomViewers;
phantomViewers = viewers.size();
this.viewers = viewers;
if(phantomViewers > 1 && previousViewers == 0) open();
if(phantomViewers == 0) close();
}
public void open(){
IBlockData iblockdata = this.getBlock();
a(iblockdata, SoundEffects.BLOCK_BARREL_OPEN);
a(iblockdata, true);
}
public void close(){
IBlockData iblockdata = this.getBlock();
a(iblockdata, SoundEffects.BLOCK_BARREL_CLOSE);
a(iblockdata, false);
}
private void a(IBlockData iblockdata, boolean flag) {
this.world.setTypeAndData(this.getPosition(), (IBlockData)iblockdata.set(BlockBarrel.b, flag), 3);
}
private void a(IBlockData iblockdata, SoundEffect soundeffect) {
BaseBlockPosition baseblockposition = ((EnumDirection)iblockdata.get(BlockBarrel.a)).p();
double d0 = (double)this.position.getX() + 0.5D + (double)baseblockposition.getX() / 2.0D;
double d1 = (double)this.position.getY() + 0.5D + (double)baseblockposition.getY() / 2.0D;
double d2 = (double)this.position.getZ() + 0.5D + (double)baseblockposition.getZ() / 2.0D;
this.world.playSound((EntityHuman)null, d0, d1, d2, soundeffect, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
}
}

View File

@ -1,83 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_15_R1.tileentities;
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
import net.minecraft.server.v1_15_R1.Block;
import net.minecraft.server.v1_15_R1.BlockChest;
import net.minecraft.server.v1_15_R1.BlockPropertyChestType;
import net.minecraft.server.v1_15_R1.EntityHuman;
import net.minecraft.server.v1_15_R1.EnumDirection;
import net.minecraft.server.v1_15_R1.SoundCategory;
import net.minecraft.server.v1_15_R1.SoundEffect;
import net.minecraft.server.v1_15_R1.SoundEffects;
import net.minecraft.server.v1_15_R1.TileEntityChest;
import net.minecraft.server.v1_15_R1.TileEntityTypes;
import org.bukkit.entity.HumanEntity;
import java.util.List;
public class CustomTileEntityChest extends TileEntityChest implements TileEntityOpener {
private int phantomViewers = 0;
private List<HumanEntity> viewers;
public CustomTileEntityChest(TileEntityTypes<?> tileEntityTypes){
super(tileEntityTypes);
}
@Override
public List<HumanEntity> getViewers() {
return viewers;
}
@Override
public void tick() {
//Do nothing.
}
@Override
public void onOpen() {
Block block = this.getBlock().getBlock();
if (block instanceof BlockChest) {
this.world.playBlockAction(this.position, block, 1, viewers.size());
this.world.applyPhysics(this.position, block);
}
}
public void setViewers(List<HumanEntity> viewers){
int previousViewers = phantomViewers;
phantomViewers = viewers.size();
this.viewers = viewers;
if(phantomViewers > 1 && previousViewers == 0) this.a(SoundEffects.BLOCK_CHEST_OPEN);
if(phantomViewers == 0 && previousViewers != 0) this.a(SoundEffects.BLOCK_CHEST_CLOSE);
if(phantomViewers == 0 && previousViewers == 0) return;
onOpen();
}
private void a(SoundEffect soundeffect) {
BlockPropertyChestType blockpropertychesttype = (BlockPropertyChestType)this.getBlock().get(BlockChest.c);
if (blockpropertychesttype != BlockPropertyChestType.LEFT) {
double d0 = (double)this.position.getX() + 0.5D;
double d1 = (double)this.position.getY() + 0.5D;
double d2 = (double)this.position.getZ() + 0.5D;
if (blockpropertychesttype == BlockPropertyChestType.RIGHT) {
EnumDirection enumdirection = BlockChest.i(this.getBlock());
d0 += (double)enumdirection.getAdjacentX() * 0.5D;
d2 += (double)enumdirection.getAdjacentZ() * 0.5D;
}
this.world.playSound((EntityHuman)null, d0, d1, d2, soundeffect, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
}
}
public void startOpen(EntityHuman entityhuman) {
}
public void closeContainer(EntityHuman entityhuman) {
}
}

View File

@ -1,10 +1,10 @@
package com.jamesdpeters.minecraft.chests.v1_14_R1;
package com.jamesdpeters.minecraft.chests.v1_16_R1;
import com.jamesdpeters.minecraft.chests.EntityEventListener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.world.ChunkLoadEvent;
public class EntityEventListener_1_14 extends EntityEventListener {
public class EntityEventListener_1_16 extends EntityEventListener {
@EventHandler
public void onChunkLoad(ChunkLoadEvent event) {

View File

@ -1,57 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_16_R1;
import com.jamesdpeters.minecraft.chests.MaterialChecker;
import com.jamesdpeters.minecraft.chests.v1_15_R1.MaterialChecker_1_15;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
public class MaterialChecker_1_16 extends MaterialChecker {
private List<Material> materials;
private List<Material> ignoredMaterials;
private MaterialChecker_1_15 version1_15;
public MaterialChecker_1_16(){
version1_15 = new MaterialChecker_1_15();
materials = new ArrayList<>();
materials.addAll(version1_15.graphically2DList());
materials.addAll(Tag.CROPS.getValues());
materials.addAll(Tag.TALL_FLOWERS.getValues());
materials.addAll(Tag.FLOWERS.getValues());
materials.add(Material.WARPED_FUNGUS);
materials.add(Material.WARPED_ROOTS);
materials.add(Material.TWISTING_VINES);
materials.add(Material.NETHER_SPROUTS);
materials.add(Material.WEEPING_VINES);
materials.add(Material.CRIMSON_ROOTS);
materials.add(Material.CRIMSON_FUNGUS);
materials.add(Material.SOUL_CAMPFIRE);
materials.add(Material.SOUL_LANTERN);
materials.add(Material.SOUL_TORCH);
materials.add(Material.CHAIN);
ignoredMaterials = new ArrayList<>();
ignoredMaterials.addAll(version1_15.ignoredMaterials());
}
@Override
public List<Material> graphically2DList() {
return materials;
}
@Override
public List<Material> ignoredMaterials() {
return ignoredMaterials;
}
@Override
public boolean isTool(ItemStack itemStack) {
if(itemStack.getType() == Material.WARPED_FUNGUS_ON_A_STICK) return true;
return version1_15.isTool(itemStack);
}
}

View File

@ -1,7 +1,11 @@
package com.jamesdpeters.minecraft.chests.v1_16_R1;
import com.jamesdpeters.minecraft.chests.*;
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
import com.jamesdpeters.minecraft.chests.BaseMaterialChecker;
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 org.bukkit.block.Lidded;
import org.bukkit.entity.ItemFrame;
@ -25,7 +29,7 @@ public class NMSProviderImpl implements NMSProvider {
@Override
public MaterialChecker getMaterialChecker() {
return new MaterialChecker_1_16();
return new BaseMaterialChecker();
}
@Override
@ -35,7 +39,7 @@ public class NMSProviderImpl implements NMSProvider {
@Override
public EntityEventListener getEntityEventListener() {
return new EntityEventListener_1_14();
return new EntityEventListener_1_16();
}
@Override

View File

@ -1,35 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_16_R2;
import com.jamesdpeters.minecraft.chests.MaterialChecker;
import com.jamesdpeters.minecraft.chests.v1_16_R1.MaterialChecker_1_16;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.List;
/**
* Only a protocol change from 1.16.2 to 1.16.3 so no new materials were added.
*/
public class MaterialChecker_1_16_R2 extends MaterialChecker {
private MaterialChecker_1_16 version1_16;
public MaterialChecker_1_16_R2(){
version1_16 = new MaterialChecker_1_16();
}
@Override
public List<Material> graphically2DList() {
return version1_16.graphically2DList();
}
@Override
public List<Material> ignoredMaterials() {
return version1_16.ignoredMaterials();
}
@Override
public boolean isTool(ItemStack itemStack) {
return version1_16.isTool(itemStack);
}
}

View File

@ -1,7 +1,12 @@
package com.jamesdpeters.minecraft.chests.v1_16_R2;
import com.jamesdpeters.minecraft.chests.*;
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
import com.jamesdpeters.minecraft.chests.BaseMaterialChecker;
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_16_R1.EntityEventListener_1_16;
import org.bukkit.block.Lidded;
import org.bukkit.entity.ItemFrame;
@ -25,7 +30,7 @@ public class NMSProviderImpl implements NMSProvider {
@Override
public MaterialChecker getMaterialChecker() {
return new MaterialChecker_1_16_R2();
return new BaseMaterialChecker();
}
@Override
@ -35,7 +40,7 @@ public class NMSProviderImpl implements NMSProvider {
@Override
public EntityEventListener getEntityEventListener() {
return new EntityEventListener_1_14();
return new EntityEventListener_1_16();
}
@Override

View File

@ -1,35 +0,0 @@
package com.jamesdpeters.minecraft.chests.v1_16_R3;
import com.jamesdpeters.minecraft.chests.MaterialChecker;
import com.jamesdpeters.minecraft.chests.v1_16_R1.MaterialChecker_1_16;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.List;
/**
* Only a protocol change from 1.16.2 to 1.16.3 so no new materials were added.
*/
public class MaterialChecker_1_16_R3 extends MaterialChecker {
private MaterialChecker_1_16 version1_16;
public MaterialChecker_1_16_R3(){
version1_16 = new MaterialChecker_1_16();
}
@Override
public List<Material> graphically2DList() {
return version1_16.graphically2DList();
}
@Override
public List<Material> ignoredMaterials() {
return version1_16.ignoredMaterials();
}
@Override
public boolean isTool(ItemStack itemStack) {
return version1_16.isTool(itemStack);
}
}

View File

@ -1,7 +1,12 @@
package com.jamesdpeters.minecraft.chests.v1_16_R3;
import com.jamesdpeters.minecraft.chests.*;
import com.jamesdpeters.minecraft.chests.v1_14_R1.EntityEventListener_1_14;
import com.jamesdpeters.minecraft.chests.BaseMaterialChecker;
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_16_R1.EntityEventListener_1_16;
import org.bukkit.block.Lidded;
import org.bukkit.entity.ItemFrame;
@ -25,7 +30,7 @@ public class NMSProviderImpl implements NMSProvider {
@Override
public MaterialChecker getMaterialChecker() {
return new MaterialChecker_1_16_R3();
return new BaseMaterialChecker();
}
@Override
@ -35,7 +40,7 @@ public class NMSProviderImpl implements NMSProvider {
@Override
public EntityEventListener getEntityEventListener() {
return new EntityEventListener_1_14();
return new EntityEventListener_1_16();
}
@Override

View File

@ -1,35 +1,35 @@
package com.jamesdpeters.minecraft.chests.latest;
import com.jamesdpeters.minecraft.chests.BaseMaterialChecker;
import com.jamesdpeters.minecraft.chests.MaterialChecker;
import com.jamesdpeters.minecraft.chests.v1_16_R1.MaterialChecker_1_16;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.List;
/**
* Only a protocol change from 1.16.2 to 1.16.3 so no new materials were added.
* Material Checker for items available in 1.17+
*/
public class MaterialChecker_1_17_R1 extends MaterialChecker {
private final MaterialChecker_1_16 version1_16;
private final BaseMaterialChecker baseMaterialChecker;
public MaterialChecker_1_17_R1(){
version1_16 = new MaterialChecker_1_16();
baseMaterialChecker = new BaseMaterialChecker();
}
@Override
public List<Material> graphically2DList() {
return version1_16.graphically2DList();
return baseMaterialChecker.graphically2DList();
}
@Override
public List<Material> ignoredMaterials() {
return version1_16.ignoredMaterials();
return baseMaterialChecker.ignoredMaterials();
}
@Override
public boolean isTool(ItemStack itemStack) {
return version1_16.isTool(itemStack);
return baseMaterialChecker.isTool(itemStack);
}
}

View File

@ -15,9 +15,7 @@ public class ApiSpecific {
private static NMSProvider nmsProvider;
public static void init(Plugin plugin) {
Api.init(plugin);
nmsProvider = Api.getNmsProvider();
if (nmsProvider == null) nmsProvider = new NMSProviderDefault();
nmsProvider = Api.init(plugin, NMSProviderDefault::new);
materialChecker = nmsProvider.getMaterialChecker();
chestOpener = nmsProvider.getChestOpener();
}

View File

@ -20,8 +20,6 @@
<module>ChestsPlusPlus_1_16_R3</module>
<module>ChestsPlusPlus_1_16_R2</module>
<module>ChestsPlusPlus_1_16</module>
<module>ChestsPlusPlus_1_15</module>
<module>ChestsPlusPlus_1_14</module>
<module>ChestsPlusPlus_Main</module>
</modules>