Ability to disable/enable AutoCrafters, ChestLinks and HopperFilters (#82)
This commit is contained in:
parent
f88baf2c1c
commit
f0c902513e
|
@ -29,10 +29,12 @@ public class PluginConfig {
|
||||||
* ***************/
|
* ***************/
|
||||||
public final static Value<Boolean> IS_UPDATE_CHECKER_ENABLED = new Value<>("update-checker", Boolean.class, true);
|
public final static Value<Boolean> IS_UPDATE_CHECKER_ENABLED = new Value<>("update-checker", Boolean.class, true);
|
||||||
public final static Value<Integer> UPDATE_CHECKER_PERIOD = new Value<>("update-checker-period", Integer.class, 60 * 60);
|
public final static Value<Integer> UPDATE_CHECKER_PERIOD = new Value<>("update-checker-period", Integer.class, 60 * 60);
|
||||||
|
public final static Value<Boolean> CHESTLINKS_ENABLED = new Value<>("chestlinks-enabled", Boolean.class, true);
|
||||||
|
public final static Value<Boolean> AUTOCRAFTERS_ENABLED = new Value<>("autocrafters-enabled", Boolean.class, true);
|
||||||
|
public final static Value<Boolean> HOPPER_FILTERS_ENABLED = new Value<>("hopper-filters-enabled", Boolean.class, true);
|
||||||
public final static Value<Boolean> SHOULD_LIMIT_CHESTS = new Value<>("limit-chests", Boolean.class, false);
|
public final static Value<Boolean> SHOULD_LIMIT_CHESTS = new Value<>("limit-chests", Boolean.class, false);
|
||||||
public final static Value<Integer> LIMIT_CHESTS_AMOUNT = new Value<>("limit-chestlinks-amount", Integer.class, 0);
|
public final static Value<Integer> LIMIT_CHESTS_AMOUNT = new Value<>("limit-chestlinks-amount", Integer.class, 0);
|
||||||
public final static Value<Boolean> SHOULD_ANIMATE_ALL_CHESTS = new Value<>("should-animate-all-chests", Boolean.class, true);
|
public final static Value<Boolean> SHOULD_ANIMATE_ALL_CHESTS = new Value<>("should-animate-all-chests", Boolean.class, true);
|
||||||
public final static Value<Boolean> SHOULD_RUN_HOPPERS_UNLOADED_CHUNKS = new Value<>("run-hoppers-unloaded-chunks", Boolean.class, false);
|
|
||||||
public final static Value<Boolean> DISPLAY_CHESTLINK_ARMOUR_STAND = new Value<>("display_chestlink_armour_stand", Boolean.class, true);
|
public final static Value<Boolean> DISPLAY_CHESTLINK_ARMOUR_STAND = new Value<>("display_chestlink_armour_stand", Boolean.class, true);
|
||||||
public final static Value<Boolean> DISPLAY_AUTOCRAFT_ARMOUR_STAND = new Value<>("display_autocraft_armour_stands", Boolean.class, true);
|
public final static Value<Boolean> DISPLAY_AUTOCRAFT_ARMOUR_STAND = new Value<>("display_autocraft_armour_stands", Boolean.class, true);
|
||||||
public final static Value<Boolean> INVISIBLE_FILTER_ITEM_FRAMES = new Value<>("set-filter-itemframe-invisible", Boolean.class, false);
|
public final static Value<Boolean> INVISIBLE_FILTER_ITEM_FRAMES = new Value<>("set-filter-itemframe-invisible", Boolean.class, false);
|
||||||
|
|
|
@ -1,48 +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_16</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.16.1-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.16.1-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,89 +0,0 @@
|
||||||
package com.jamesdpeters.minecraft.chests.v1_16_R1;
|
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.Api;
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestOpener;
|
|
||||||
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
|
|
||||||
import com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities.CustomTileEntityBarrel;
|
|
||||||
import com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities.CustomTileEntityChest;
|
|
||||||
import net.minecraft.server.v1_16_R1.BlockPosition;
|
|
||||||
import net.minecraft.server.v1_16_R1.TileEntity;
|
|
||||||
import net.minecraft.server.v1_16_R1.TileEntityBarrel;
|
|
||||||
import net.minecraft.server.v1_16_R1.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_16_R1.TileEntityChestTrapped;
|
|
||||||
import net.minecraft.server.v1_16_R1.TileEntityTypes;
|
|
||||||
import net.minecraft.server.v1_16_R1.World;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.block.Container;
|
|
||||||
import org.bukkit.block.Lidded;
|
|
||||||
import org.bukkit.craftbukkit.v1_16_R1.CraftWorld;
|
|
||||||
import org.bukkit.craftbukkit.v1_16_R1.block.CraftContainer;
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
|
||||||
public class ChestOpener_1_16 implements ChestOpener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TileEntityOpener updateState(Inventory inventory, Container container, TileEntityOpener tileEntityOpener) {
|
|
||||||
if(hasLiddedAPI()){
|
|
||||||
if(container instanceof Lidded){
|
|
||||||
if(inventory.getViewers().size() > 0){
|
|
||||||
((Lidded) container).open();
|
|
||||||
} else {
|
|
||||||
((Lidded) container).close();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(tileEntityOpener != null) {
|
|
||||||
TileEntityOpener opener = tileEntityOpener;
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Api.getPlugin(), ()-> opener.setViewers(inventory.getViewers()),1);
|
|
||||||
return tileEntityOpener;
|
|
||||||
} else {
|
|
||||||
CraftContainer craftContainer = (CraftContainer) container;
|
|
||||||
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 opener = tileEntityOpener;
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Api.getPlugin(), ()-> opener.setViewers(inventory.getViewers()),1);
|
|
||||||
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);
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(Api.getPlugin(), ()-> tileEntOpener.setViewers(viewers),1);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hasLiddedAPI(){
|
|
||||||
try {
|
|
||||||
Class.forName("org.bukkit.block.Lidded");
|
|
||||||
return true;
|
|
||||||
} catch (ClassNotFoundException e){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,123 +0,0 @@
|
||||||
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.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_16_R1.IRecipe;
|
|
||||||
import net.minecraft.server.v1_16_R1.InventoryCrafting;
|
|
||||||
import net.minecraft.server.v1_16_R1.NonNullList;
|
|
||||||
import net.minecraft.server.v1_16_R1.RecipeCrafting;
|
|
||||||
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.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(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]));
|
|
||||||
}
|
|
||||||
|
|
||||||
Optional<RecipeCrafting> 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()) {
|
|
||||||
itemStack = recipe.get().a(inventoryCrafting);
|
|
||||||
}
|
|
||||||
|
|
||||||
return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle());
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) {
|
|
||||||
CraftServer server = (CraftServer) Bukkit.getServer();
|
|
||||||
NonNullList<net.minecraft.server.v1_16_R1.ItemStack> 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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < inventoryCrafting.getContents().size(); i++) {
|
|
||||||
craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return craftItemResult;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
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_16 extends EntityEventListener {
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onChunkLoad(ChunkLoadEvent event) {
|
|
||||||
fixEntities(event.getChunk());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,58 +0,0 @@
|
||||||
package com.jamesdpeters.minecraft.chests.v1_16_R1;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
public class NMSProviderImpl implements NMSProvider {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ChestOpener getChestOpener() {
|
|
||||||
return (inventory, container, tileEntityOpener) -> {
|
|
||||||
if(hasLiddedAPI()){
|
|
||||||
if(container instanceof Lidded){
|
|
||||||
if(inventory.getViewers().size() > 0){
|
|
||||||
((Lidded) container).open();
|
|
||||||
} else {
|
|
||||||
((Lidded) container).close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MaterialChecker getMaterialChecker() {
|
|
||||||
return new BaseMaterialChecker();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftingProvider getCraftingProvider() {
|
|
||||||
return new Crafting();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EntityEventListener getEntityEventListener() {
|
|
||||||
return new EntityEventListener_1_16();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
|
||||||
itemFrame.setVisible(visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hasLiddedAPI(){
|
|
||||||
try {
|
|
||||||
Class.forName("org.bukkit.block.Lidded");
|
|
||||||
return true;
|
|
||||||
} catch (ClassNotFoundException e){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,75 +0,0 @@
|
||||||
package com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities;
|
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
|
|
||||||
import net.minecraft.server.v1_16_R1.BaseBlockPosition;
|
|
||||||
import net.minecraft.server.v1_16_R1.BlockBarrel;
|
|
||||||
import net.minecraft.server.v1_16_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_16_R1.EnumDirection;
|
|
||||||
import net.minecraft.server.v1_16_R1.IBlockData;
|
|
||||||
import net.minecraft.server.v1_16_R1.SoundCategory;
|
|
||||||
import net.minecraft.server.v1_16_R1.SoundEffect;
|
|
||||||
import net.minecraft.server.v1_16_R1.SoundEffects;
|
|
||||||
import net.minecraft.server.v1_16_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);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void a(IBlockData iblockdata, boolean flag) {
|
|
||||||
this.world.setTypeAndData(this.getPosition(), (IBlockData)iblockdata.set(BlockBarrel.b, flag), 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
public 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);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,84 +0,0 @@
|
||||||
package com.jamesdpeters.minecraft.chests.v1_16_R1.tileentities;
|
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.TileEntityOpener;
|
|
||||||
import net.minecraft.server.v1_16_R1.Block;
|
|
||||||
import net.minecraft.server.v1_16_R1.BlockChest;
|
|
||||||
import net.minecraft.server.v1_16_R1.BlockPropertyChestType;
|
|
||||||
import net.minecraft.server.v1_16_R1.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_16_R1.EnumDirection;
|
|
||||||
import net.minecraft.server.v1_16_R1.SoundCategory;
|
|
||||||
import net.minecraft.server.v1_16_R1.SoundEffect;
|
|
||||||
import net.minecraft.server.v1_16_R1.SoundEffects;
|
|
||||||
import net.minecraft.server.v1_16_R1.TileEntityChest;
|
|
||||||
import net.minecraft.server.v1_16_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();
|
|
||||||
}
|
|
||||||
|
|
||||||
public 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.h(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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,54 +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_16_R2</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.16.3-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
|
||||||
<artifactId>ChestsPlusPlus_1_16</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.16.3-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,123 +0,0 @@
|
||||||
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.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_16_R2.IRecipe;
|
|
||||||
import net.minecraft.server.v1_16_R2.InventoryCrafting;
|
|
||||||
import net.minecraft.server.v1_16_R2.NonNullList;
|
|
||||||
import net.minecraft.server.v1_16_R2.RecipeCrafting;
|
|
||||||
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.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(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]));
|
|
||||||
}
|
|
||||||
|
|
||||||
Optional<RecipeCrafting> 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()) {
|
|
||||||
itemStack = recipe.get().a(inventoryCrafting);
|
|
||||||
}
|
|
||||||
|
|
||||||
return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle());
|
|
||||||
}
|
|
||||||
|
|
||||||
@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 CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) {
|
|
||||||
CraftServer server = (CraftServer) Bukkit.getServer();
|
|
||||||
NonNullList<net.minecraft.server.v1_16_R2.ItemStack> 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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < inventoryCrafting.getContents().size(); i++) {
|
|
||||||
craftItemResult.setResultMatrix(i, CraftItemStack.asBukkitCopy(inventoryCrafting.getItem(i)));
|
|
||||||
}
|
|
||||||
|
|
||||||
return craftItemResult;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,59 +0,0 @@
|
||||||
package com.jamesdpeters.minecraft.chests.v1_16_R2;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
public class NMSProviderImpl implements NMSProvider {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ChestOpener getChestOpener() {
|
|
||||||
return (inventory, container, tileEntityOpener) -> {
|
|
||||||
if(hasLiddedAPI()){
|
|
||||||
if(container instanceof Lidded){
|
|
||||||
if(inventory.getViewers().size() > 0){
|
|
||||||
((Lidded) container).open();
|
|
||||||
} else {
|
|
||||||
((Lidded) container).close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MaterialChecker getMaterialChecker() {
|
|
||||||
return new BaseMaterialChecker();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftingProvider getCraftingProvider() {
|
|
||||||
return new Crafting();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EntityEventListener getEntityEventListener() {
|
|
||||||
return new EntityEventListener_1_16();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
|
||||||
itemFrame.setVisible(visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hasLiddedAPI(){
|
|
||||||
try {
|
|
||||||
Class.forName("org.bukkit.block.Lidded");
|
|
||||||
return true;
|
|
||||||
} catch (ClassNotFoundException e){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,54 +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_16_R3</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.16.4-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
|
||||||
<artifactId>ChestsPlusPlus_1_16</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.bukkit</groupId>
|
|
||||||
<artifactId>craftbukkit</artifactId>
|
|
||||||
<version>1.16.4-R0.1-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
|
|
||||||
</project>
|
|
|
@ -1,132 +0,0 @@
|
||||||
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.EntityHuman;
|
|
||||||
import net.minecraft.server.v1_16_R3.IRecipe;
|
|
||||||
import net.minecraft.server.v1_16_R3.InventoryCrafting;
|
|
||||||
import net.minecraft.server.v1_16_R3.NonNullList;
|
|
||||||
import net.minecraft.server.v1_16_R3.RecipeCrafting;
|
|
||||||
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.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(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]));
|
|
||||||
}
|
|
||||||
|
|
||||||
Optional<RecipeCrafting> 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()) {
|
|
||||||
itemStack = recipe.get().a(inventoryCrafting);
|
|
||||||
}
|
|
||||||
|
|
||||||
return createItemCraftResult(CraftItemStack.asBukkitCopy(itemStack), inventoryCrafting, craftWorld.getHandle());
|
|
||||||
}
|
|
||||||
|
|
||||||
@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());
|
|
||||||
}
|
|
||||||
|
|
||||||
private CraftingResult createItemCraftResult(ItemStack itemStack, InventoryCrafting inventoryCrafting, WorldServer worldServer) {
|
|
||||||
CraftServer server = (CraftServer) Bukkit.getServer();
|
|
||||||
NonNullList<net.minecraft.server.v1_16_R3.ItemStack> 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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,59 +0,0 @@
|
||||||
package com.jamesdpeters.minecraft.chests.v1_16_R3;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
public class NMSProviderImpl implements NMSProvider {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ChestOpener getChestOpener() {
|
|
||||||
return (inventory, container, tileEntityOpener) -> {
|
|
||||||
if(hasLiddedAPI()){
|
|
||||||
if(container instanceof Lidded){
|
|
||||||
if(inventory.getViewers().size() > 0){
|
|
||||||
((Lidded) container).open();
|
|
||||||
} else {
|
|
||||||
((Lidded) container).close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MaterialChecker getMaterialChecker() {
|
|
||||||
return new BaseMaterialChecker();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftingProvider getCraftingProvider() {
|
|
||||||
return new Crafting();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EntityEventListener getEntityEventListener() {
|
|
||||||
return new EntityEventListener_1_16();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setItemFrameVisible(ItemFrame itemFrame, boolean visible) {
|
|
||||||
itemFrame.setVisible(visible);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hasLiddedAPI(){
|
|
||||||
try {
|
|
||||||
Class.forName("org.bukkit.block.Lidded");
|
|
||||||
return true;
|
|
||||||
} catch (ClassNotFoundException e){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -39,12 +39,6 @@
|
||||||
<version>${minecraft.version}-R0.1-SNAPSHOT</version>
|
<version>${minecraft.version}-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
|
||||||
<artifactId>ChestsPlusPlus_1_16</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
||||||
<artifactId>ChestsPlusPlus-Master</artifactId>
|
<artifactId>ChestsPlusPlus-Master</artifactId>
|
||||||
<version>2.6.2-Release</version>
|
<version>2.6.3-Beta</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.target>16</maven.compiler.target>
|
<maven.compiler.target>16</maven.compiler.target>
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.14.4-R0.1-SNAPSHOT</version>
|
<version>1.17.1-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
@ -122,30 +122,6 @@
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
|
||||||
<artifactId>ChestsPlusPlus_1_16_R3</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
<type>jar</type>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
|
||||||
<artifactId>ChestsPlusPlus_1_16_R2</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
<type>jar</type>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
|
||||||
<artifactId>ChestsPlusPlus_1_16</artifactId>
|
|
||||||
<version>1.0-SNAPSHOT</version>
|
|
||||||
<type>jar</type>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
<groupId>com.jamesdpeters.minecraft.chests</groupId>
|
||||||
<artifactId>ChestsPlusPlus-API</artifactId>
|
<artifactId>ChestsPlusPlus-API</artifactId>
|
||||||
|
|
|
@ -6,8 +6,10 @@ import com.jamesdpeters.minecraft.chests.commands.ChestLinkCommand;
|
||||||
import com.jamesdpeters.minecraft.chests.commands.ChestsPlusPlusCommand;
|
import com.jamesdpeters.minecraft.chests.commands.ChestsPlusPlusCommand;
|
||||||
import com.jamesdpeters.minecraft.chests.crafting.Crafting;
|
import com.jamesdpeters.minecraft.chests.crafting.Crafting;
|
||||||
import com.jamesdpeters.minecraft.chests.lang.LangFileProperties;
|
import com.jamesdpeters.minecraft.chests.lang.LangFileProperties;
|
||||||
import com.jamesdpeters.minecraft.chests.listeners.HopperListener;
|
import com.jamesdpeters.minecraft.chests.listeners.AutoCrafterListener;
|
||||||
|
import com.jamesdpeters.minecraft.chests.listeners.HopperFilterListener;
|
||||||
import com.jamesdpeters.minecraft.chests.listeners.InventoryListener;
|
import com.jamesdpeters.minecraft.chests.listeners.InventoryListener;
|
||||||
|
import com.jamesdpeters.minecraft.chests.listeners.LinkedChestHopperListener;
|
||||||
import com.jamesdpeters.minecraft.chests.listeners.StorageListener;
|
import com.jamesdpeters.minecraft.chests.listeners.StorageListener;
|
||||||
import com.jamesdpeters.minecraft.chests.listeners.WorldListener;
|
import com.jamesdpeters.minecraft.chests.listeners.WorldListener;
|
||||||
import com.jamesdpeters.minecraft.chests.maventemplates.BuildConstants;
|
import com.jamesdpeters.minecraft.chests.maventemplates.BuildConstants;
|
||||||
|
@ -24,13 +26,16 @@ import com.jamesdpeters.minecraft.chests.serialize.MaterialSerializer;
|
||||||
import com.jamesdpeters.minecraft.chests.serialize.RecipeSerializable;
|
import com.jamesdpeters.minecraft.chests.serialize.RecipeSerializable;
|
||||||
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorage;
|
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorage;
|
||||||
|
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorageType;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||||
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorageType;
|
||||||
import com.jamesdpeters.minecraft.chests.versionchecker.UpdateChecker;
|
import com.jamesdpeters.minecraft.chests.versionchecker.UpdateChecker;
|
||||||
import fr.minuskube.inv.InventoryManager;
|
import fr.minuskube.inv.InventoryManager;
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.configuration.serialization.ConfigurationSerialization;
|
import org.bukkit.configuration.serialization.ConfigurationSerialization;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.permissions.PermissionDefault;
|
import org.bukkit.permissions.PermissionDefault;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.plugin.java.annotation.command.Command;
|
import org.bukkit.plugin.java.annotation.command.Command;
|
||||||
|
@ -42,7 +47,7 @@ import org.bukkit.plugin.java.annotation.plugin.Plugin;
|
||||||
import org.bukkit.plugin.java.annotation.plugin.author.Author;
|
import org.bukkit.plugin.java.annotation.plugin.author.Author;
|
||||||
|
|
||||||
@Plugin(name = "ChestsPlusPlus", version = BuildConstants.VERSION)
|
@Plugin(name = "ChestsPlusPlus", version = BuildConstants.VERSION)
|
||||||
@ApiVersion(ApiVersion.Target.v1_14)
|
@ApiVersion(ApiVersion.Target.v1_17)
|
||||||
@Description(value = "Minecraft Spigot mod that enhances chests and hoppers, with ChestLinks and Hopper filters!")
|
@Description(value = "Minecraft Spigot mod that enhances chests and hoppers, with ChestLinks and Hopper filters!")
|
||||||
@Author(value = "jameslfc19")
|
@Author(value = "jameslfc19")
|
||||||
@Commands({
|
@Commands({
|
||||||
|
@ -96,10 +101,7 @@ public class ChestsPlusPlus extends JavaPlugin {
|
||||||
//API initialisation
|
//API initialisation
|
||||||
ApiSpecific.init(this);
|
ApiSpecific.init(this);
|
||||||
|
|
||||||
//Register commands
|
|
||||||
new ChestLinkCommand().register(this);
|
|
||||||
new AutoCraftCommand().register(this);
|
|
||||||
new ChestsPlusPlusCommand().register(this);
|
|
||||||
|
|
||||||
//Load storage
|
//Load storage
|
||||||
ServerType.init();
|
ServerType.init();
|
||||||
|
@ -125,23 +127,50 @@ public class ChestsPlusPlus extends JavaPlugin {
|
||||||
}), 0, PluginConfig.UPDATE_CHECKER_PERIOD.get() * 20);
|
}), 0, PluginConfig.UPDATE_CHECKER_PERIOD.get() * 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
getServer().getPluginManager().registerEvents(ApiSpecific.getNmsProvider().getEntityEventListener(), this);
|
|
||||||
Bukkit.getWorlds().forEach(world -> {
|
|
||||||
ApiSpecific.getNmsProvider().getEntityEventListener().fixEntities(world);
|
|
||||||
});
|
|
||||||
|
|
||||||
//Load storages after load.
|
//Load storages after load.
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
|
Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
|
||||||
Crafting.load();
|
Crafting.load();
|
||||||
new Config();
|
new Config();
|
||||||
getLogger().info("Chests++ Successfully Loaded Config and Recipes");
|
getLogger().info("Chests++ Successfully Loaded Config and Recipes");
|
||||||
|
|
||||||
//Register event listeners
|
//LinkedChest
|
||||||
getServer().getPluginManager().registerEvents(new StorageListener(), this);
|
if (PluginConfig.CHESTLINKS_ENABLED.get()) {
|
||||||
getServer().getPluginManager().registerEvents(new InventoryListener(), this);
|
new ChestLinkCommand().register(this);
|
||||||
getServer().getPluginManager().registerEvents(new HopperListener(), this);
|
getServer().getPluginManager().registerEvents(new LinkedChestHopperListener(), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//AutoCrafter
|
||||||
|
if (PluginConfig.AUTOCRAFTERS_ENABLED.get()) {
|
||||||
|
new AutoCraftCommand().register(this);
|
||||||
|
getServer().getPluginManager().registerEvents(new AutoCrafterListener(), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//HopperFilter
|
||||||
|
if (PluginConfig.HOPPER_FILTERS_ENABLED.get()) {
|
||||||
|
getServer().getPluginManager().registerEvents(new HopperFilterListener(), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Shared
|
||||||
|
if (PluginConfig.CHESTLINKS_ENABLED.get() || PluginConfig.AUTOCRAFTERS_ENABLED.get()) {
|
||||||
|
getServer().getPluginManager().registerEvents(new StorageListener(), this);
|
||||||
|
getServer().getPluginManager().registerEvents(new InventoryListener(), this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Other
|
||||||
getServer().getPluginManager().registerEvents(new WorldListener(), this);
|
getServer().getPluginManager().registerEvents(new WorldListener(), this);
|
||||||
Config.getStorageTypes().forEach(storageType -> getServer().getPluginManager().registerEvents(storageType, this));
|
new ChestsPlusPlusCommand().register(this);
|
||||||
|
|
||||||
|
Config.getStorageTypes().forEach(storageType -> {
|
||||||
|
if (storageType instanceof AutoCraftingStorageType && PluginConfig.AUTOCRAFTERS_ENABLED.get()) {
|
||||||
|
getServer().getPluginManager().registerEvents(storageType, this);
|
||||||
|
}
|
||||||
|
if (storageType instanceof ChestLinkStorageType && PluginConfig.CHESTLINKS_ENABLED.get()) {
|
||||||
|
getServer().getPluginManager().registerEvents(storageType, this);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
getServer().getPluginManager().registerEvents(ApiSpecific.getNmsProvider().getEntityEventListener(), this);
|
||||||
|
Bukkit.getWorlds().forEach(world -> ApiSpecific.getNmsProvider().getEntityEventListener().fixEntities(world));
|
||||||
getLogger().info("Chests++ enabled!");
|
getLogger().info("Chests++ enabled!");
|
||||||
}, 1);
|
}, 1);
|
||||||
}
|
}
|
||||||
|
@ -150,6 +179,7 @@ public class ChestsPlusPlus extends JavaPlugin {
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
super.onDisable();
|
super.onDisable();
|
||||||
Config.save();
|
Config.save();
|
||||||
|
HandlerList.unregisterAll(this);
|
||||||
// //Remove entities that could have been left behind from bad save files/crashes etc.
|
// //Remove entities that could have been left behind from bad save files/crashes etc.
|
||||||
// Utils.fixEntities();
|
// Utils.fixEntities();
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,16 +6,13 @@ import org.bukkit.entity.ItemFrame;
|
||||||
|
|
||||||
public class NMSProviderDefault implements NMSProvider {
|
public class NMSProviderDefault implements NMSProvider {
|
||||||
|
|
||||||
//Latest version at time of build is 1.17
|
//Latest version at time of build is 1.18.2
|
||||||
//All new versions should be able to run with the default provided after 1.17 <- Not seem to be working by: ceze88
|
|
||||||
NMSProvider defaultProvider;
|
NMSProvider defaultProvider;
|
||||||
|
|
||||||
public NMSProviderDefault() {
|
public NMSProviderDefault() {
|
||||||
String NAME = Bukkit.getServer().getClass().getPackage().getName();
|
String NAME = Bukkit.getServer().getClass().getPackage().getName();
|
||||||
String VERSION = NAME.substring(NAME.lastIndexOf('.') + 1);
|
String VERSION = NAME.substring(NAME.lastIndexOf('.') + 1);
|
||||||
switch (VERSION) {
|
switch (VERSION) {
|
||||||
case "v1_16_R2" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_16_R2.NMSProviderImpl();
|
|
||||||
case "v1_16_R3" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_16_R3.NMSProviderImpl();
|
|
||||||
case "v1_17_R1" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_17_R1.NMSProviderImpl();
|
case "v1_17_R1" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_17_R1.NMSProviderImpl();
|
||||||
case "v1_18_R1" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_18_R1.NMSProviderImpl();
|
case "v1_18_R1" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_18_R1.NMSProviderImpl();
|
||||||
case "v1_18_R2" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_18_R2.NMSProviderImpl();
|
case "v1_18_R2" -> defaultProvider = new com.jamesdpeters.minecraft.chests.v1_18_R2.NMSProviderImpl();
|
||||||
|
@ -23,7 +20,7 @@ public class NMSProviderDefault implements NMSProvider {
|
||||||
ChestsPlusPlus.PLUGIN.getLogger().severe("§c=======================================================");
|
ChestsPlusPlus.PLUGIN.getLogger().severe("§c=======================================================");
|
||||||
ChestsPlusPlus.PLUGIN.getLogger().severe("§cThis version is not supported. Please update your server!");
|
ChestsPlusPlus.PLUGIN.getLogger().severe("§cThis version is not supported. Please update your server!");
|
||||||
ChestsPlusPlus.PLUGIN.getLogger().severe("§c=======================================================");
|
ChestsPlusPlus.PLUGIN.getLogger().severe("§c=======================================================");
|
||||||
defaultProvider = new com.jamesdpeters.minecraft.chests.v1_16_R1.NMSProviderImpl();
|
defaultProvider = new com.jamesdpeters.minecraft.chests.v1_17_R1.NMSProviderImpl();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.jamesdpeters.minecraft.chests.filters;
|
||||||
|
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||||
|
import org.bukkit.Keyed;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
|
import org.bukkit.Tag;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
public class ChestsPlusPlusTag {
|
||||||
|
|
||||||
|
public static Tag SEEDS;
|
||||||
|
|
||||||
|
static {
|
||||||
|
SEEDS = new Tag() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTagged(@NotNull Keyed item) {
|
||||||
|
return item.equals(Material.WHEAT_SEEDS) || item.equals(Material.PUMPKIN_SEEDS) || item.equals(Material.MELON_SEEDS) || item.equals(Material.BEETROOT_SEEDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public Set<Material> getValues() {
|
||||||
|
return Sets.newHashSet(Material.WHEAT_SEEDS, Material.PUMPKIN_SEEDS, Material.MELON_SEEDS, Material.BEETROOT_SEEDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public NamespacedKey getKey() {
|
||||||
|
return new NamespacedKey(ChestsPlusPlus.PLUGIN, "seeds");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,13 +7,15 @@ import org.bukkit.inventory.ItemStack;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
public class ItemTypeUtil {
|
public class ItemTypeUtil {
|
||||||
|
|
||||||
private static List<Tag<Material>> tags;
|
private static final List<Tag<Material>> tags;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
tags = new ArrayList<>();
|
tags = new ArrayList<>();
|
||||||
|
|
||||||
|
tags.add(ChestsPlusPlusTag.SEEDS);
|
||||||
tags.add(Tag.WOOL);
|
tags.add(Tag.WOOL);
|
||||||
tags.add(Tag.PLANKS);
|
tags.add(Tag.PLANKS);
|
||||||
tags.add(Tag.STONE_BRICKS);
|
tags.add(Tag.STONE_BRICKS);
|
||||||
|
|
|
@ -172,6 +172,11 @@ public class CraftingInventoryImpl implements CraftingInventory {
|
||||||
return inventory.firstEmpty();
|
return inventory.firstEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return inventory.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(@NotNull Material material) throws IllegalArgumentException {
|
public void remove(@NotNull Material material) throws IllegalArgumentException {
|
||||||
inventory.remove(material);
|
inventory.remove(material);
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
package com.jamesdpeters.minecraft.chests.listeners;
|
||||||
|
|
||||||
|
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||||
|
import com.jamesdpeters.minecraft.chests.interfaces.VirtualCraftingHolder;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryAction;
|
||||||
|
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.InventoryHolder;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class AutoCrafterListener implements Listener {
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onInventoryClose(InventoryCloseEvent event) {
|
||||||
|
InventoryHolder holder = event.getInventory().getHolder();
|
||||||
|
if (holder instanceof VirtualCraftingHolder) {
|
||||||
|
((VirtualCraftingHolder) holder).stopAnimation();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
|
public void onInventoryPlayerUpdate(InventoryDragEvent event) {
|
||||||
|
craftingUpdate(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
//CRAFTING
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void inventoryDragEvent(InventoryDragEvent event) {
|
||||||
|
Inventory inventory = event.getInventory();
|
||||||
|
if (inventory.getHolder() instanceof VirtualCraftingHolder) {
|
||||||
|
Player p = (Player) event.getWhoClicked();
|
||||||
|
for (int slot : event.getRawSlots()) {
|
||||||
|
if (slot >= p.getOpenInventory().getTopInventory().getSize())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
setCraftingItem(event.getInventory(), slot, event.getOldCursor());
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void onCraftingPlayerUpdate(InventoryClickEvent event) {
|
||||||
|
Player player = (Player) event.getWhoClicked();
|
||||||
|
if (event.getView().getTopInventory().getHolder() instanceof VirtualCraftingHolder) {
|
||||||
|
if (event.getAction() == InventoryAction.COLLECT_TO_CURSOR ||
|
||||||
|
event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY ||
|
||||||
|
event.getAction() == InventoryAction.NOTHING) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
player.updateInventory();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.getClickedInventory() == player.getOpenInventory().getTopInventory()) {
|
||||||
|
if (event.getSlot() == 0) event.setCancelled(true);
|
||||||
|
if (event.getSlot() >= 1 && event.getSlot() <= 9) {
|
||||||
|
setCraftingItem(event.getInventory(), event.getSlot(), event.getCursor());
|
||||||
|
event.setCancelled(true);
|
||||||
|
craftingUpdate(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setCraftingItem(Inventory inventory, int slot, ItemStack cursor) {
|
||||||
|
ItemStack clone = null;
|
||||||
|
if (cursor != null) {
|
||||||
|
clone = cursor.clone();
|
||||||
|
clone.setAmount(1);
|
||||||
|
}
|
||||||
|
inventory.setItem(slot, clone);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void craftingUpdate(InventoryInteractEvent event) {
|
||||||
|
InventoryHolder holder = event.getInventory().getHolder();
|
||||||
|
if (holder instanceof VirtualCraftingHolder) {
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder).setUpdatingRecipe(true))::updateCrafting, 1);
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder))::forceUpdateInventory, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||||
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||||
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorageType;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
@ -29,7 +30,7 @@ import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class HopperListener implements Listener {
|
public class HopperFilterListener implements Listener {
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
public void onHopperMoveEvent(InventoryMoveItemEvent event) {
|
public void onHopperMoveEvent(InventoryMoveItemEvent event) {
|
||||||
|
@ -77,7 +78,9 @@ public class HopperListener implements Listener {
|
||||||
//FROM HOPPER
|
//FROM HOPPER
|
||||||
if (event.getInitiator().getHolder() instanceof Hopper) {
|
if (event.getInitiator().getHolder() instanceof Hopper) {
|
||||||
Location location = event.getDestination().getLocation();
|
Location location = event.getDestination().getLocation();
|
||||||
ChestLinkStorage storage = Config.getChestLink().getStorage(location);
|
ChestLinkStorageType storageType = Config.getChestLink();
|
||||||
|
if (storageType == null) return;
|
||||||
|
ChestLinkStorage storage = storageType.getStorage(location);
|
||||||
if (storage != null) {
|
if (storage != null) {
|
||||||
if(!event.isCancelled()) {
|
if(!event.isCancelled()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
|
@ -1,7 +1,6 @@
|
||||||
package com.jamesdpeters.minecraft.chests.listeners;
|
package com.jamesdpeters.minecraft.chests.listeners;
|
||||||
|
|
||||||
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||||
import com.jamesdpeters.minecraft.chests.interfaces.VirtualCraftingHolder;
|
|
||||||
import com.jamesdpeters.minecraft.chests.interfaces.VirtualInventoryHolder;
|
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;
|
||||||
|
@ -10,14 +9,11 @@ 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.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||||
import org.bukkit.event.inventory.InventoryInteractEvent;
|
import org.bukkit.event.inventory.InventoryInteractEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public class InventoryListener implements Listener {
|
public class InventoryListener implements Listener {
|
||||||
|
|
||||||
|
@ -39,9 +35,6 @@ public class InventoryListener implements Listener {
|
||||||
Utils.closeStorageInventory(vHolder.getStorage());
|
Utils.closeStorageInventory(vHolder.getStorage());
|
||||||
vHolder.getStorage().onItemDisplayUpdate(InventorySorter.getMostCommonItem(event.getInventory()));
|
vHolder.getStorage().onItemDisplayUpdate(InventorySorter.getMostCommonItem(event.getInventory()));
|
||||||
}
|
}
|
||||||
if (holder instanceof VirtualCraftingHolder) {
|
|
||||||
((VirtualCraftingHolder) holder).stopAnimation();
|
|
||||||
}
|
|
||||||
} catch (NullPointerException ignore) {
|
} catch (NullPointerException ignore) {
|
||||||
} //Essentials does something weird with enderchests - shit fix but works :)
|
} //Essentials does something weird with enderchests - shit fix but works :)
|
||||||
}
|
}
|
||||||
|
@ -60,64 +53,5 @@ public class InventoryListener implements Listener {
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
@EventHandler(priority = EventPriority.LOWEST)
|
||||||
public void onInventoryPlayerUpdate(InventoryDragEvent event) {
|
public void onInventoryPlayerUpdate(InventoryDragEvent event) {
|
||||||
inventoryUpdate(event);
|
inventoryUpdate(event);
|
||||||
craftingUpdate(event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//CRAFTING
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void inventoryDragEvent(InventoryDragEvent event) {
|
|
||||||
Inventory inventory = event.getInventory();
|
|
||||||
if (inventory.getHolder() instanceof VirtualCraftingHolder) {
|
|
||||||
Player p = (Player) event.getWhoClicked();
|
|
||||||
for (int slot : event.getRawSlots()) {
|
|
||||||
if (slot >= p.getOpenInventory().getTopInventory().getSize())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
setCraftingItem(event.getInventory(), slot, event.getOldCursor());
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onCraftingPlayerUpdate(InventoryClickEvent event) {
|
|
||||||
Player player = (Player) event.getWhoClicked();
|
|
||||||
|
|
||||||
if (event.getView().getTopInventory().getHolder() instanceof VirtualCraftingHolder) {
|
|
||||||
if (event.getAction() == InventoryAction.COLLECT_TO_CURSOR ||
|
|
||||||
event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY ||
|
|
||||||
event.getAction() == InventoryAction.NOTHING) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
player.updateInventory();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getClickedInventory() == player.getOpenInventory().getTopInventory()) {
|
|
||||||
if (event.getSlot() == 0) event.setCancelled(true);
|
|
||||||
if (event.getSlot() >= 1 && event.getSlot() <= 9) {
|
|
||||||
setCraftingItem(event.getInventory(), event.getSlot(), event.getCursor());
|
|
||||||
event.setCancelled(true);
|
|
||||||
craftingUpdate(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setCraftingItem(Inventory inventory, int slot, ItemStack cursor) {
|
|
||||||
ItemStack clone = null;
|
|
||||||
if (cursor != null) {
|
|
||||||
clone = cursor.clone();
|
|
||||||
clone.setAmount(1);
|
|
||||||
}
|
|
||||||
inventory.setItem(slot, clone);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void craftingUpdate(InventoryInteractEvent event) {
|
|
||||||
InventoryHolder holder = event.getInventory().getHolder();
|
|
||||||
if (holder instanceof VirtualCraftingHolder) {
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder).setUpdatingRecipe(true))::updateCrafting, 1);
|
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(ChestsPlusPlus.PLUGIN, (((VirtualCraftingHolder) holder))::forceUpdateInventory, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
package com.jamesdpeters.minecraft.chests.listeners;
|
||||||
|
|
||||||
|
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||||
|
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||||
|
import com.jamesdpeters.minecraft.chests.serialize.Config;
|
||||||
|
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
||||||
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||||
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorageType;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.Hopper;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
public class LinkedChestHopperListener implements Listener {
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
public void fromHopper(InventoryMoveItemEvent event) {
|
||||||
|
//FROM HOPPER
|
||||||
|
if (event.getInitiator().getHolder() instanceof Hopper) {
|
||||||
|
Location location = event.getDestination().getLocation();
|
||||||
|
if (location == null) return;
|
||||||
|
if (!Utils.isLocationChunkLoaded(location)) return;
|
||||||
|
|
||||||
|
ChestLinkStorageType storageType = Config.getChestLink();
|
||||||
|
if (storageType == null) return;
|
||||||
|
ChestLinkStorage storage = storageType.getStorage(location);
|
||||||
|
if (storage != null) {
|
||||||
|
if(!event.isCancelled()) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
int hopperAmount = SpigotConfig.getWorldSettings(location.getWorld()).getHopperAmount();
|
||||||
|
if (Utils.hopperMove(event.getSource(), hopperAmount, storage.getInventory())) {
|
||||||
|
storage.updateDisplayItem();
|
||||||
|
}
|
||||||
|
if (event.getDestination().getHolder() != null) event.getDestination().getHolder().getInventory().clear();
|
||||||
|
if (storage.getInventory().getViewers().size() > 0) storage.sort();
|
||||||
|
}
|
||||||
|
}.runTaskLater(ChestsPlusPlus.PLUGIN, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -147,7 +147,11 @@ public class Utils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> getAllPlayers() {
|
public static List<String> getAllPlayers() {
|
||||||
return getPlayersAsNameList(Arrays.asList(Bukkit.getOfflinePlayers()));
|
List<String> result = new ArrayList<>();
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers()) {
|
||||||
|
result.add(p.getName());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> getPlayersAsNameList(Collection<? extends OfflinePlayer> players) {
|
public static List<String> getPlayersAsNameList(Collection<? extends OfflinePlayer> players) {
|
||||||
|
|
|
@ -4,7 +4,6 @@ import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||||
import com.jamesdpeters.minecraft.chests.filters.HopperFilter;
|
import com.jamesdpeters.minecraft.chests.filters.HopperFilter;
|
||||||
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
import com.jamesdpeters.minecraft.chests.misc.Utils;
|
||||||
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
import com.jamesdpeters.minecraft.chests.serialize.LocationInfo;
|
||||||
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
|
||||||
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
import com.jamesdpeters.minecraft.chests.serialize.SpigotConfig;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
import com.jamesdpeters.minecraft.chests.storage.chestlink.ChestLinkStorage;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
@ -35,7 +34,7 @@ public class VirtualChestToHopper extends BukkitRunnable {
|
||||||
for (LocationInfo location : storage.getLocations()) {
|
for (LocationInfo location : storage.getLocations()) {
|
||||||
if (location != null) {
|
if (location != null) {
|
||||||
if (location.getLocation() != null) {
|
if (location.getLocation() != null) {
|
||||||
if (!PluginConfig.SHOULD_RUN_HOPPERS_UNLOADED_CHUNKS.get() && !Utils.isLocationChunkLoaded(location.getLocation()))
|
if (!Utils.isLocationChunkLoaded(location.getLocation()) || !location.getLocation().getChunk().isEntitiesLoaded())
|
||||||
continue;
|
continue;
|
||||||
Location below = location.getLocation().clone().subtract(0, 1, 0);
|
Location below = location.getLocation().clone().subtract(0, 1, 0);
|
||||||
if (below.getBlock().getState() instanceof Hopper hopper) {
|
if (below.getBlock().getState() instanceof Hopper hopper) {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.jamesdpeters.minecraft.chests.serialize;
|
||||||
|
|
||||||
import com.google.common.base.Charsets;
|
import com.google.common.base.Charsets;
|
||||||
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
import com.jamesdpeters.minecraft.chests.ChestsPlusPlus;
|
||||||
|
import com.jamesdpeters.minecraft.chests.PluginConfig;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.AbstractStorage;
|
import com.jamesdpeters.minecraft.chests.storage.abstracts.AbstractStorage;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.abstracts.StorageType;
|
import com.jamesdpeters.minecraft.chests.storage.abstracts.StorageType;
|
||||||
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorageType;
|
import com.jamesdpeters.minecraft.chests.storage.autocraft.AutoCraftingStorageType;
|
||||||
|
@ -53,13 +54,13 @@ public class Config {
|
||||||
store = new ConfigStorage();
|
store = new ConfigStorage();
|
||||||
saveASync();
|
saveASync();
|
||||||
}
|
}
|
||||||
chestLinkStorageType = new ChestLinkStorageType(store);
|
if (PluginConfig.CHESTLINKS_ENABLED.get()) chestLinkStorageType = new ChestLinkStorageType(store);
|
||||||
autoCraftingStorageType = new AutoCraftingStorageType(store);
|
if (PluginConfig.AUTOCRAFTERS_ENABLED.get()) autoCraftingStorageType = new AutoCraftingStorageType(store);
|
||||||
|
|
||||||
//Add each storage type to a list.
|
//Add each storage type to a list.
|
||||||
storageTypes = new ArrayList<>();
|
storageTypes = new ArrayList<>();
|
||||||
storageTypes.add(chestLinkStorageType);
|
if (PluginConfig.CHESTLINKS_ENABLED.get()) storageTypes.add(chestLinkStorageType);
|
||||||
storageTypes.add(autoCraftingStorageType);
|
if (PluginConfig.AUTOCRAFTERS_ENABLED.get()) storageTypes.add(autoCraftingStorageType);
|
||||||
|
|
||||||
storageTypes.forEach(StorageType::onConfigLoad);
|
storageTypes.forEach(StorageType::onConfigLoad);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Chests++ Language File (Version 2.6.2-Beta)
|
# Chests++ Language File (Version 2.6.3-Beta)
|
||||||
# NOTE: This file gets replaced when the plugin launches! If you want to make modifications create a copy first!
|
# 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'
|
# 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
|
# It should be located in the 'lang' folder
|
||||||
|
|
3
pom.xml
3
pom.xml
|
@ -19,9 +19,6 @@
|
||||||
<module>ChestsPlusPlus_1_18_R2</module>
|
<module>ChestsPlusPlus_1_18_R2</module>
|
||||||
<module>ChestsPlusPlus_1_18_R1</module>
|
<module>ChestsPlusPlus_1_18_R1</module>
|
||||||
<module>ChestsPlusPlus_1_17_R1</module>
|
<module>ChestsPlusPlus_1_17_R1</module>
|
||||||
<module>ChestsPlusPlus_1_16_R3</module>
|
|
||||||
<module>ChestsPlusPlus_1_16_R2</module>
|
|
||||||
<module>ChestsPlusPlus_1_16</module>
|
|
||||||
<module>ChestsPlusPlus_Main</module>
|
<module>ChestsPlusPlus_Main</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue