# Fixed IOOBE when items are set in a container at a slot greater than the container size.
# Fixed NPE when a flower pot is placed without content when a structure is pasted on island creation.
# Fixed NPE when saving a structure with flower pots for 1.10-1.12 servers
# Fixed NSME when a flower pot is placed when a structure is pasted on island creation.
# Fixed permission message being sent to a player when they feed a pig with baked or poisonous potatoes when 'AnimalTaming' setting is disabled.
# Fixed permission message being sent to a player when they feed a wolf with cod when 'AnimalTaming' setting is disabled.
# Fixed players being able to feed ocelots with raw salmon, tropical fish, puffer fish when 'AnimalTaming' setting is disabled on 1.13 servers.
# Fixed players being able to feed chickens with beetroot seeds when 'AnimalTaming' setting is disabled.
# Fixed players being able to feed turtles when 'AnimalTaming' setting is disabled.
# Fixed players being able to feed llamas when 'AnimalTaming' setting is disabled.
# Fixed the structure tool selection not working since build 50.
# Fixed events not being unregistered when reloading the plugin.
This commit is contained in:
SystemEncryption 2018-12-16 18:57:34 +00:00
parent 58510f2090
commit 70e7bef250
6 changed files with 200 additions and 128 deletions

View File

@ -2,7 +2,7 @@
<groupId>com.songoda</groupId> <groupId>com.songoda</groupId>
<artifactId>SkyBlock</artifactId> <artifactId>SkyBlock</artifactId>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<version>50</version> <version>51</version>
<build> <build>
<defaultGoal>clean package</defaultGoal> <defaultGoal>clean package</defaultGoal>
<plugins> <plugins>

View File

@ -2,6 +2,7 @@ package me.goodandevil.skyblock;
import java.io.File; import java.io.File;
import org.bukkit.event.HandlerList;
import org.bukkit.generator.ChunkGenerator; import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
@ -190,6 +191,8 @@ public class SkyBlock extends JavaPlugin {
if (this.ownershipManager != null) { if (this.ownershipManager != null) {
this.ownershipManager.onDisable(); this.ownershipManager.onDisable();
} }
HandlerList.unregisterAll(this);
} }
public static SkyBlock getInstance() { public static SkyBlock getInstance() {

View File

@ -394,33 +394,6 @@ public class Interact implements Listener {
} }
} }
} }
if (event.getItem() != null) {
try {
ItemStack structureTool = StructureUtil.getTool();
if ((event.getItem().getType() == structureTool.getType()) && (event.getItem().hasItemMeta())
&& (event.getItem().getItemMeta().getDisplayName()
.equals(structureTool.getItemMeta().getDisplayName()))) {
if (player.hasPermission("skyblock.admin.structure.selection")
|| player.hasPermission("skyblock.admin.structure.*")
|| player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) {
event.setCancelled(true);
skyblock.getPlayerDataManager().getPlayerData(player).getArea().setPosition(2,
block.getLocation());
messageManager.sendMessage(player,
skyblock.getFileManager()
.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
.getFileConfiguration().getString("Island.Structure.Tool.Position.Message")
.replace("%position", "2"));
soundManager.playSound(player, Sounds.WOOD_CLICK.bukkitSound(), 1.0F, 1.0F);
}
}
} catch (Exception e) {
}
}
} else if (event.getAction() == Action.LEFT_CLICK_BLOCK) { } else if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
if (player.getTargetBlock((Set<Material>) null, 5).getType() == Material.FIRE) { if (player.getTargetBlock((Set<Material>) null, 5).getType() == Material.FIRE) {
if (!islandManager.hasPermission(player, block.getLocation(), "Fire")) { if (!islandManager.hasPermission(player, block.getLocation(), "Fire")) {
@ -432,33 +405,6 @@ public class Interact implements Listener {
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
} }
} }
if (event.getItem() != null) {
try {
ItemStack structureTool = StructureUtil.getTool();
if ((event.getItem().getType() == structureTool.getType()) && (event.getItem().hasItemMeta())
&& (event.getItem().getItemMeta().getDisplayName()
.equals(structureTool.getItemMeta().getDisplayName()))) {
if (player.hasPermission("skyblock.admin.structure.selection")
|| player.hasPermission("skyblock.admin.structure.*")
|| player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) {
event.setCancelled(true);
skyblock.getPlayerDataManager().getPlayerData(player).getArea().setPosition(1,
block.getLocation());
messageManager.sendMessage(player,
skyblock.getFileManager()
.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
.getFileConfiguration().getString("Island.Structure.Tool.Position.Message")
.replace("%position", "1"));
soundManager.playSound(player, Sounds.WOOD_CLICK.bukkitSound(), 1.0F, 1.0F);
}
}
} catch (Exception e) {
}
}
} else if (event.getAction() == Action.PHYSICAL) { } else if (event.getAction() == Action.PHYSICAL) {
if (block.getType() == Materials.FARMLAND.parseMaterial()) { if (block.getType() == Materials.FARMLAND.parseMaterial()) {
if (!islandManager.hasPermission(player, block.getLocation(), "Crop")) { if (!islandManager.hasPermission(player, block.getLocation(), "Crop")) {
@ -493,6 +439,65 @@ public class Interact implements Listener {
} }
} }
@EventHandler
public void onPlayerInteractStructure(PlayerInteractEvent event) {
Player player = event.getPlayer();
MessageManager messageManager = skyblock.getMessageManager();
SoundManager soundManager = skyblock.getSoundManager();
if (event.getItem() != null) {
try {
if (event.getAction() == Action.LEFT_CLICK_BLOCK) {
ItemStack structureTool = StructureUtil.getTool();
if ((event.getItem().getType() == structureTool.getType()) && (event.getItem().hasItemMeta())
&& (event.getItem().getItemMeta().getDisplayName()
.equals(structureTool.getItemMeta().getDisplayName()))) {
if (player.hasPermission("skyblock.admin.structure.selection")
|| player.hasPermission("skyblock.admin.structure.*")
|| player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) {
event.setCancelled(true);
skyblock.getPlayerDataManager().getPlayerData(player).getArea().setPosition(1,
event.getClickedBlock().getLocation());
messageManager.sendMessage(player,
skyblock.getFileManager()
.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
.getFileConfiguration().getString("Island.Structure.Tool.Position.Message")
.replace("%position", "1"));
soundManager.playSound(player, Sounds.WOOD_CLICK.bukkitSound(), 1.0F, 1.0F);
}
}
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
ItemStack structureTool = StructureUtil.getTool();
if ((event.getItem().getType() == structureTool.getType()) && (event.getItem().hasItemMeta())
&& (event.getItem().getItemMeta().getDisplayName()
.equals(structureTool.getItemMeta().getDisplayName()))) {
if (player.hasPermission("skyblock.admin.structure.selection")
|| player.hasPermission("skyblock.admin.structure.*")
|| player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) {
event.setCancelled(true);
skyblock.getPlayerDataManager().getPlayerData(player).getArea().setPosition(2,
event.getClickedBlock().getLocation());
messageManager.sendMessage(player,
skyblock.getFileManager()
.getConfig(new File(skyblock.getDataFolder(), "language.yml"))
.getFileConfiguration().getString("Island.Structure.Tool.Position.Message")
.replace("%position", "2"));
soundManager.playSound(player, Sounds.WOOD_CLICK.bukkitSound(), 1.0F, 1.0F);
}
}
}
} catch (Exception e) {
}
}
}
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@EventHandler @EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
@ -612,15 +617,20 @@ public class Interact implements Listener {
} }
} else if (entity.getType() == EntityType.PIG) { } else if (entity.getType() == EntityType.PIG) {
if (!(is.getType() == Materials.CARROT.parseMaterial() if (!(is.getType() == Materials.CARROT.parseMaterial()
|| is.getType() == Materials.POTATO.parseMaterial() || is.getType() == Material.BAKED_POTATO || is.getType() == Materials.POTATO.parseMaterial())) {
|| is.getType() == Material.POISONOUS_POTATO)) {
return; return;
} }
} else if (entity.getType() == EntityType.CHICKEN) { } else if (entity.getType() == EntityType.CHICKEN) {
if (!(is.getType() == Materials.WHEAT_SEEDS.parseMaterial() || is.getType() == Material.PUMPKIN_SEEDS if (!(is.getType() == Materials.WHEAT_SEEDS.parseMaterial() || is.getType() == Material.PUMPKIN_SEEDS
|| is.getType() == Material.MELON_SEEDS)) { || is.getType() == Material.MELON_SEEDS)) {
if (NMSUtil.getVersionNumber() > 8) {
if (!(is.getType() == Materials.BEETROOT_SEEDS.parseMaterial())) {
return; return;
} }
} else {
return;
}
}
} else if (entity.getType() == EntityType.WOLF) { } else if (entity.getType() == EntityType.WOLF) {
if (!(is.getType() == Material.BONE || is.getType() == Materials.PORKCHOP.parseMaterial() if (!(is.getType() == Material.BONE || is.getType() == Materials.PORKCHOP.parseMaterial()
|| is.getType() == Materials.BEEF.parseMaterial() || is.getType() == Materials.BEEF.parseMaterial()
@ -628,13 +638,13 @@ public class Interact implements Listener {
|| is.getType() == Material.MUTTON || is.getType() == Material.ROTTEN_FLESH || is.getType() == Material.MUTTON || is.getType() == Material.ROTTEN_FLESH
|| is.getType() == Materials.COOKED_PORKCHOP.parseMaterial() || is.getType() == Materials.COOKED_PORKCHOP.parseMaterial()
|| is.getType() == Material.COOKED_BEEF || is.getType() == Material.COOKED_CHICKEN || is.getType() == Material.COOKED_BEEF || is.getType() == Material.COOKED_CHICKEN
|| is.getType() == Material.COOKED_RABBIT || is.getType() == Material.COOKED_MUTTON || is.getType() == Material.COOKED_RABBIT || is.getType() == Material.COOKED_MUTTON)) {
|| is.getType() == Materials.COD.parseMaterial()
|| is.getType() == Materials.COOKED_COD.parseMaterial())) {
return; return;
} }
} else if (entity.getType() == EntityType.OCELOT) { } else if (entity.getType() == EntityType.OCELOT) {
if (!(is.getType() == Materials.COD.parseMaterial())) { if (!(is.getType() == Materials.COD.parseMaterial() || is.getType() == Materials.SALMON.parseMaterial()
|| is.getType() == Materials.TROPICAL_FISH.parseMaterial()
|| is.getType() == Materials.PUFFERFISH.parseMaterial())) {
return; return;
} }
} else if (entity.getType() == EntityType.RABBIT) { } else if (entity.getType() == EntityType.RABBIT) {
@ -644,8 +654,28 @@ public class Interact implements Listener {
return; return;
} }
} else { } else {
int NMSVersion = NMSUtil.getVersionNumber();
if (NMSVersion > 10) {
if (entity.getType() == EntityType.LLAMA) {
if (!(is.getType() == Materials.HAY_BLOCK.parseMaterial())) {
return; return;
} }
} else if (NMSVersion > 12) {
if (entity.getType() == EntityType.TURTLE) {
if (!(is.getType() == Materials.SEAGRASS.parseMaterial())) {
return;
}
} else {
return;
}
} else {
return;
}
} else {
return;
}
}
if (!islandManager.hasPermission(player, entity.getLocation(), "AnimalBreeding")) { if (!islandManager.hasPermission(player, entity.getLocation(), "AnimalBreeding")) {
event.setCancelled(true); event.setCancelled(true);

View File

@ -95,7 +95,6 @@ public class nInventoryUtil {
} }
}; };
// TODO Check if listener is already registered
Bukkit.getPluginManager().registerEvents(listener, SkyBlock.getInstance()); Bukkit.getPluginManager().registerEvents(listener, SkyBlock.getInstance());
} }
} }

View File

@ -1,5 +1,6 @@
package me.goodandevil.skyblock.utils.world.block; package me.goodandevil.skyblock.utils.world.block;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -210,7 +211,7 @@ public final class BlockUtil {
blockData.setFacing(((Stairs) materialData).getFacing().toString()); blockData.setFacing(((Stairs) materialData).getFacing().toString());
blockData.setDataType(BlockDataType.STAIRS.toString()); blockData.setDataType(BlockDataType.STAIRS.toString());
} else if (materialData instanceof org.bukkit.material.FlowerPot) { } else if (materialData instanceof org.bukkit.material.FlowerPot) {
if (NMSVersion == 8 || NMSVersion == 9) { if (NMSVersion >= 8 && NMSVersion <= 12) {
try { try {
World world = block.getWorld(); World world = block.getWorld();
@ -221,23 +222,37 @@ public final class BlockUtil {
.newInstance(block.getX(), block.getY(), block.getZ()); .newInstance(block.getX(), block.getY(), block.getZ());
Object tileEntity = worldHandle.getClass().getMethod("getTileEntity", blockPositionClass) Object tileEntity = worldHandle.getClass().getMethod("getTileEntity", blockPositionClass)
.invoke(worldHandle, blockPosition); .invoke(worldHandle, blockPosition);
Object item = tileEntity.getClass().getMethod("b").invoke(tileEntity);
Object itemStackNMS = NMSUtil.getNMSClass("ItemStack").getConstructor(NMSUtil.getNMSClass("Item")) Field aField = tileEntity.getClass().getDeclaredField("a");
.newInstance(item); aField.setAccessible(true);
Object item = aField.get(tileEntity);
if (item != null) {
Object itemStackNMS = NMSUtil.getNMSClass("ItemStack")
.getConstructor(NMSUtil.getNMSClass("Item")).newInstance(item);
ItemStack itemStack = (ItemStack) NMSUtil.getCraftClass("inventory.CraftItemStack") ItemStack itemStack = (ItemStack) NMSUtil.getCraftClass("inventory.CraftItemStack")
.getMethod("asBukkitCopy", itemStackNMS.getClass()).invoke(null, itemStackNMS); .getMethod("asBukkitCopy", itemStackNMS.getClass()).invoke(null, itemStackNMS);
int data = (int) tileEntity.getClass().getMethod("c").invoke(tileEntity);
Field fField = tileEntity.getClass().getDeclaredField("f");
fField.setAccessible(true);
int data = (int) fField.get(tileEntity);
blockData.setFlower(itemStack.getType().name() + ":" + data); blockData.setFlower(itemStack.getType().name() + ":" + data);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} else { } else {
org.bukkit.material.FlowerPot flowerPot = (org.bukkit.material.FlowerPot) materialData; org.bukkit.material.FlowerPot flowerPot = (org.bukkit.material.FlowerPot) materialData;
if (flowerPot.getContents() != null && flowerPot.getContents().getItemType() != Material.AIR) {
blockData.setFlower( blockData.setFlower(
flowerPot.getContents().getItemType().toString() + ":" + flowerPot.getContents().getData()); flowerPot.getContents().getItemType().toString() + ":" + flowerPot.getContents().getData());
} }
}
blockData.setDataType(BlockDataType.FLOWERPOT.toString()); blockData.setDataType(BlockDataType.FLOWERPOT.toString());
} }
@ -281,9 +296,11 @@ public final class BlockUtil {
beacon.setSecondaryEffect(PotionEffectType.getByName(potionEffect[1].toUpperCase())); beacon.setSecondaryEffect(PotionEffectType.getByName(potionEffect[1].toUpperCase()));
for (Integer slotList : blockData.getInventory().keySet()) { for (Integer slotList : blockData.getInventory().keySet()) {
if (slotList < beacon.getInventory().getSize()) {
ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList)); ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList));
beacon.getInventory().setItem(slotList, is); beacon.getInventory().setItem(slotList, is);
} }
}
} else if (blockTypeState == BlockStateType.BREWINGSTAND) { } else if (blockTypeState == BlockStateType.BREWINGSTAND) {
BrewingStand brewingStand = (BrewingStand) block.getState(); BrewingStand brewingStand = (BrewingStand) block.getState();
brewingStand.setBrewingTime(blockData.getBrewingTime()); brewingStand.setBrewingTime(blockData.getBrewingTime());
@ -296,30 +313,38 @@ public final class BlockUtil {
Chest chest = (Chest) block.getState(); Chest chest = (Chest) block.getState();
for (Integer slotList : blockData.getInventory().keySet()) { for (Integer slotList : blockData.getInventory().keySet()) {
if (slotList < chest.getInventory().getSize()) {
ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList)); ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList));
chest.getInventory().setItem(slotList, is); chest.getInventory().setItem(slotList, is);
} }
}
} else if (blockTypeState == BlockStateType.DISPENSER) { } else if (blockTypeState == BlockStateType.DISPENSER) {
Dispenser dispenser = (Dispenser) block.getState(); Dispenser dispenser = (Dispenser) block.getState();
for (Integer slotList : blockData.getInventory().keySet()) { for (Integer slotList : blockData.getInventory().keySet()) {
if (slotList < dispenser.getInventory().getSize()) {
ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList)); ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList));
dispenser.getInventory().setItem(slotList, is); dispenser.getInventory().setItem(slotList, is);
} }
}
} else if (blockTypeState == BlockStateType.DROPPER) { } else if (blockTypeState == BlockStateType.DROPPER) {
Dropper dropper = (Dropper) block.getState(); Dropper dropper = (Dropper) block.getState();
for (Integer slotList : blockData.getInventory().keySet()) { for (Integer slotList : blockData.getInventory().keySet()) {
if (slotList < dropper.getInventory().getSize()) {
ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList)); ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList));
dropper.getInventory().setItem(slotList, is); dropper.getInventory().setItem(slotList, is);
} }
}
} else if (blockTypeState == BlockStateType.HOPPER) { } else if (blockTypeState == BlockStateType.HOPPER) {
Hopper hopper = (Hopper) block.getState(); Hopper hopper = (Hopper) block.getState();
for (Integer slotList : blockData.getInventory().keySet()) { for (Integer slotList : blockData.getInventory().keySet()) {
if (slotList < hopper.getInventory().getSize()) {
ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList)); ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList));
hopper.getInventory().setItem(slotList, is); hopper.getInventory().setItem(slotList, is);
} }
}
} else if (blockTypeState == BlockStateType.CREATURESPAWNER) { } else if (blockTypeState == BlockStateType.CREATURESPAWNER) {
CreatureSpawner creatureSpawner = (CreatureSpawner) block.getState(); CreatureSpawner creatureSpawner = (CreatureSpawner) block.getState();
creatureSpawner.setDelay(blockData.getDelay()); creatureSpawner.setDelay(blockData.getDelay());
@ -330,9 +355,11 @@ public final class BlockUtil {
furnace.setCookTime(blockData.getCookTime()); furnace.setCookTime(blockData.getCookTime());
for (Integer slotList : blockData.getInventory().keySet()) { for (Integer slotList : blockData.getInventory().keySet()) {
if (slotList < furnace.getInventory().getSize()) {
ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList)); ItemStack is = ItemStackUtil.deserializeItemStack(blockData.getInventory().get(slotList));
furnace.getInventory().setItem(slotList, is); furnace.getInventory().setItem(slotList, is);
} }
}
} else if (blockTypeState == BlockStateType.JUKEBOX) { } else if (blockTypeState == BlockStateType.JUKEBOX) {
Jukebox jukebox = (Jukebox) block.getState(); Jukebox jukebox = (Jukebox) block.getState();
jukebox.setPlaying(Material.valueOf(blockData.getPlaying().toUpperCase())); jukebox.setPlaying(Material.valueOf(blockData.getPlaying().toUpperCase()));
@ -372,6 +399,7 @@ public final class BlockUtil {
ShulkerBox shulkerBox = (ShulkerBox) block.getState(); ShulkerBox shulkerBox = (ShulkerBox) block.getState();
for (Integer slotList : blockData.getInventory().keySet()) { for (Integer slotList : blockData.getInventory().keySet()) {
if (slotList < shulkerBox.getInventory().getSize()) {
ItemStack is = ItemStackUtil ItemStack is = ItemStackUtil
.deserializeItemStack(blockData.getInventory().get(slotList)); .deserializeItemStack(blockData.getInventory().get(slotList));
shulkerBox.getInventory().setItem(slotList, is); shulkerBox.getInventory().setItem(slotList, is);
@ -381,6 +409,7 @@ public final class BlockUtil {
} }
} }
} }
}
BlockDataType blockDataType = BlockDataType.valueOf(blockData.getDataType()); BlockDataType blockDataType = BlockDataType.valueOf(blockData.getDataType());
@ -389,12 +418,13 @@ public final class BlockUtil {
stairs.setFacingDirection(BlockFace.valueOf(blockData.getFacing())); stairs.setFacingDirection(BlockFace.valueOf(blockData.getFacing()));
block.getState().setData(stairs); block.getState().setData(stairs);
} else if (blockDataType == BlockDataType.FLOWERPOT) { } else if (blockDataType == BlockDataType.FLOWERPOT) {
if (NMSVersion == 8 || NMSVersion == 9) { if (NMSVersion >= 8 && NMSVersion <= 12) {
if (block.getLocation().clone().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.AIR) { if (block.getLocation().clone().subtract(0.0D, 1.0D, 0.0D).getBlock().getType() == Material.AIR) {
setBlockFast(block.getWorld(), block.getX(), block.getY() - 1, block.getZ(), Material.STONE, setBlockFast(block.getWorld(), block.getX(), block.getY() - 1, block.getZ(), Material.STONE,
(byte) 0); (byte) 0);
} }
if (blockData.getFlower() != null && !blockData.getFlower().isEmpty()) {
try { try {
String[] flower = blockData.getFlower().split(":"); String[] flower = blockData.getFlower().split(":");
int materialData = Integer.parseInt(flower[1]); int materialData = Integer.parseInt(flower[1]);
@ -419,15 +449,24 @@ public final class BlockUtil {
Object item = itemStack.getClass().getMethod("getItem").invoke(itemStack); Object item = itemStack.getClass().getMethod("getItem").invoke(itemStack);
Object data = itemStack.getClass().getMethod("getData").invoke(itemStack); Object data = itemStack.getClass().getMethod("getData").invoke(itemStack);
tileEntity.getClass().getMethod("a", NMSUtil.getNMSClass("Item"), int.class).invoke(tileEntity, Field aField = tileEntity.getClass().getDeclaredField("a");
item, data); aField.setAccessible(true);
aField.set(tileEntity, item);
Field fField = tileEntity.getClass().getDeclaredField("f");
fField.setAccessible(true);
fField.set(tileEntity, data);
tileEntity.getClass().getMethod("update").invoke(tileEntity); tileEntity.getClass().getMethod("update").invoke(tileEntity);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
}
} else { } else {
org.bukkit.material.FlowerPot flowerPot = (org.bukkit.material.FlowerPot) block.getState().getData(); if (blockData.getFlower() != null && !blockData.getFlower().isEmpty()) {
org.bukkit.material.FlowerPot flowerPot = (org.bukkit.material.FlowerPot) block.getState()
.getData();
String[] flower = blockData.getFlower().split(":"); String[] flower = blockData.getFlower().split(":");
material = null; material = null;
@ -448,6 +487,7 @@ public final class BlockUtil {
block.getState().setData(flowerPot); block.getState().setData(flowerPot);
} }
} }
}
if (NMSVersion < 13) { if (NMSVersion < 13) {
block.getState().update(); block.getState().update();

View File

@ -1,6 +1,6 @@
name: SkyBlock name: SkyBlock
main: me.goodandevil.skyblock.SkyBlock main: me.goodandevil.skyblock.SkyBlock
version: 50 version: 51
api-version: 1.13 api-version: 1.13
description: A unique SkyBlock plugin description: A unique SkyBlock plugin
author: GoodAndEvil author: GoodAndEvil