diff --git a/api/src/main/java/net/momirealms/customcrops/api/mechanic/item/custom/AbstractCustomListener.java b/api/src/main/java/net/momirealms/customcrops/api/mechanic/item/custom/AbstractCustomListener.java index 5c049d3..ce921bc 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/mechanic/item/custom/AbstractCustomListener.java +++ b/api/src/main/java/net/momirealms/customcrops/api/mechanic/item/custom/AbstractCustomListener.java @@ -195,7 +195,7 @@ public abstract class AbstractCustomListener implements Listener { Sprinkler sprinkler = this.itemManager.getSprinklerBy3DItemID(itemID); if (sprinkler != null) { ItemStack newItem = this.itemManager.getItemStack(null, sprinkler.get2DItemID()); - if (newItem != null) { + if (newItem != null && newItem.getType() != Material.AIR) { newItem.setAmount(itemStack.getAmount()); item.setItemStack(newItem); } @@ -205,7 +205,7 @@ public abstract class AbstractCustomListener implements Listener { Pot pot = this.itemManager.getPotByBlockID(itemID); if (pot != null) { ItemStack newItem = this.itemManager.getItemStack(null, pot.getDryItem()); - if (newItem != null) { + if (newItem != null && newItem.getType() != Material.AIR) { newItem.setAmount(itemStack.getAmount()); item.setItemStack(newItem); } diff --git a/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/SimpleLocation.java b/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/SimpleLocation.java index 6d48a72..14c623d 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/SimpleLocation.java +++ b/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/SimpleLocation.java @@ -55,7 +55,7 @@ public class SimpleLocation { } public ChunkPos getChunkPos() { - return new ChunkPos(x >> 4, z >> 4); + return new ChunkPos((int) Math.floor((double) getX() / 16), (int) Math.floor((double) getZ() / 16)); } public SimpleLocation add(int x, int y, int z) { diff --git a/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/level/AbstractCustomCropsBlock.java b/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/level/AbstractCustomCropsBlock.java index 56b0b7a..1e94433 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/level/AbstractCustomCropsBlock.java +++ b/api/src/main/java/net/momirealms/customcrops/api/mechanic/world/level/AbstractCustomCropsBlock.java @@ -83,6 +83,9 @@ public class AbstractCustomCropsBlock implements DataBlock { * @return can be ticked or not */ public boolean canTick(int interval) { + if (interval <= 0) { + return false; + } if (interval == 1) { return true; } diff --git a/build.gradle.kts b/build.gradle.kts index e113982..fb38987 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { allprojects { project.group = "net.momirealms" - project.version = "3.5.0" + project.version = "3.5.1" apply() apply(plugin = "java") diff --git a/plugin/src/main/java/net/momirealms/customcrops/libraries/dependencies/DependencyRepository.java b/plugin/src/main/java/net/momirealms/customcrops/libraries/dependencies/DependencyRepository.java index c97c283..31ed18f 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/libraries/dependencies/DependencyRepository.java +++ b/plugin/src/main/java/net/momirealms/customcrops/libraries/dependencies/DependencyRepository.java @@ -47,8 +47,8 @@ public enum DependencyRepository { @Override protected URLConnection openConnection(Dependency dependency) throws IOException { URLConnection connection = super.openConnection(dependency); - connection.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(5)); - connection.setReadTimeout((int) TimeUnit.SECONDS.toMillis(5)); + connection.setConnectTimeout(5000); + connection.setReadTimeout(5000); return connection; } }, diff --git a/plugin/src/main/java/net/momirealms/customcrops/mechanic/action/ActionManagerImpl.java b/plugin/src/main/java/net/momirealms/customcrops/mechanic/action/ActionManagerImpl.java index 5c25399..b330eba 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/mechanic/action/ActionManagerImpl.java +++ b/plugin/src/main/java/net/momirealms/customcrops/mechanic/action/ActionManagerImpl.java @@ -60,6 +60,8 @@ import net.momirealms.customcrops.mechanic.world.block.MemoryCrop; import net.momirealms.customcrops.util.ClassUtils; import net.momirealms.customcrops.util.ConfigUtils; import net.momirealms.customcrops.util.ItemUtils; +import net.momirealms.sparrow.heart.SparrowHeart; +import net.momirealms.sparrow.heart.argument.HandSlot; import org.bukkit.*; import org.bukkit.block.BlockFace; import org.bukkit.configuration.ConfigurationSection; @@ -434,10 +436,7 @@ public class ActionManagerImpl implements ActionManager { return state -> { if (Math.random() > chance) return; if (state.getPlayer() == null) return; - PacketContainer animationPacket = new PacketContainer(PacketType.Play.Server.ANIMATION); - animationPacket.getIntegers().write(0, state.getPlayer().getEntityId()); - animationPacket.getIntegers().write(1, arg ? 0 : 3); - PacketManager.getInstance().send(state.getPlayer(), animationPacket); + SparrowHeart.getInstance().swingHand(state.getPlayer(), arg ? HandSlot.MAIN : HandSlot.OFF); }; }); } diff --git a/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/adaptor/BukkitWorldAdaptor.java b/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/adaptor/BukkitWorldAdaptor.java index 2f47476..5b4fd7d 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/adaptor/BukkitWorldAdaptor.java +++ b/plugin/src/main/java/net/momirealms/customcrops/mechanic/world/adaptor/BukkitWorldAdaptor.java @@ -243,6 +243,10 @@ public class BukkitWorldAdaptor extends AbstractWorldAdaptor { @Override public void saveChunkToCachedRegion(CustomCropsChunk customCropsChunk) { CustomCropsRegion customCropsRegion = customCropsChunk.getCustomCropsRegion(); + if (customCropsRegion == null) { + LogUtils.severe(customCropsChunk.getChunkPos().toString() + " unloaded before chunk saving"); + return; + } SerializableChunk serializableChunk = toSerializableChunk((CChunk) customCropsChunk); if (serializableChunk.canPrune()) { customCropsRegion.removeChunk(customCropsChunk.getChunkPos());