mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 11:45:51 +00:00
commit
8c2746e775
@ -42,6 +42,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
|
|||||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.BlockStateMeta;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
import org.bukkit.potion.PotionEffectType;
|
||||||
@ -1841,8 +1842,9 @@ public class SlimefunSetup {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List<ItemStack> drops) {
|
public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List<ItemStack> drops) {
|
||||||
if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) {
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) {
|
||||||
if (e.getBlock().getType() != Material.SPAWNER) return true;
|
if (e.getBlock().getType() != Material.SPAWNER) return true;
|
||||||
|
BlockStorage.clearBlockInfo(e.getBlock());
|
||||||
ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone();
|
ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone();
|
||||||
ItemMeta im = spawner.getItemMeta();
|
ItemMeta im = spawner.getItemMeta();
|
||||||
List<String> lore = im.getLore();
|
List<String> lore = im.getLore();
|
||||||
@ -2924,6 +2926,19 @@ public class SlimefunSetup {
|
|||||||
}
|
}
|
||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
|
}, new BlockBreakHandler() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List<ItemStack> drops) {
|
||||||
|
SlimefunItem spawner = BlockStorage.check(e.getBlock());
|
||||||
|
if (spawner != null && SlimefunManager.isItemSimiliar(spawner.getItem(), SlimefunItems.REPAIRED_SPAWNER, false)) {
|
||||||
|
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_CONTAINMENT, true))
|
||||||
|
return false;
|
||||||
|
BlockStorage.clearBlockInfo(e.getBlock());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE",
|
new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE",
|
||||||
|
@ -43,7 +43,7 @@ public class ToolListener implements Listener {
|
|||||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onBlockRegister(BlockPlaceEvent e) {
|
public void onBlockRegister(BlockPlaceEvent e) {
|
||||||
if (BlockStorage.hasBlockInfo(e.getBlock())) {
|
if (BlockStorage.hasBlockInfo(e.getBlock())) {
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
@ -52,14 +52,18 @@ public class ToolListener implements Listener {
|
|||||||
ItemStack item = e.getItemInHand();
|
ItemStack item = e.getItemInHand();
|
||||||
if (item != null && item.getType() == Material.INK_SAC) return;
|
if (item != null && item.getType() == Material.INK_SAC) return;
|
||||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||||
if (sfItem != null && !(sfItem instanceof NotPlaceable)){
|
if (sfItem != null && !(sfItem instanceof NotPlaceable)) {
|
||||||
BlockStorage.addBlockInfo(e.getBlock(), "id", sfItem.getID(), true);
|
BlockStorage.addBlockInfo(e.getBlock(), "id", sfItem.getID(), true);
|
||||||
if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
|
if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
|
||||||
SlimefunItem.blockhandler.get(sfItem.getID()).onPlace(e.getPlayer(), e.getBlock(), sfItem);
|
SlimefunItem.blockhandler.get(sfItem.getID()).onPlace(e.getPlayer(), e.getBlock(), sfItem);
|
||||||
|
} else {
|
||||||
|
for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) {
|
||||||
|
if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (ItemHandler handler: SlimefunItem.getHandlers("BlockPlaceHandler")) {
|
for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) {
|
||||||
if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break;
|
if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -165,15 +169,15 @@ public class ToolListener implements Listener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onBlockBreak(BlockBreakEvent e) {
|
public void onBlockBreak(BlockBreakEvent e) {
|
||||||
boolean allow = true;
|
boolean allow = true;
|
||||||
List<ItemStack> drops = new ArrayList<ItemStack>();
|
List<ItemStack> drops = new ArrayList<ItemStack>();
|
||||||
ItemStack item = e.getPlayer().getInventory().getItemInMainHand();
|
ItemStack item = e.getPlayer().getEquipment().getItemInMainHand();
|
||||||
int fortune = 1;
|
int fortune = 1;
|
||||||
|
|
||||||
Block block2 = e.getBlock().getRelative(BlockFace.UP);
|
Block block2 = e.getBlock().getRelative(BlockFace.UP);
|
||||||
if (StringUtils.equals(block2.getType().toString(), "SAPLING", "WOOD_PLATE", "STONE_PLATE", "IRON_PLATE", "GOLD_PLATE")) {
|
if (StringUtils.equals(block2.getType().toString(), "SAPLING", "WOOD_PLATE", "STONE_PLATE", "IRON_PLATE", "GOLD_PLATE")) { // ToDo: 1.13 Material names
|
||||||
SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP));
|
SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP));
|
||||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||||
if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
|
if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
|
||||||
@ -194,6 +198,10 @@ public class ToolListener implements Listener {
|
|||||||
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
if (sfItem != null && !(sfItem instanceof HandledBlock)) {
|
||||||
if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
|
if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) {
|
||||||
allow = SlimefunItem.blockhandler.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK);
|
allow = SlimefunItem.blockhandler.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK);
|
||||||
|
} else {
|
||||||
|
for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) {
|
||||||
|
if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (allow) {
|
if (allow) {
|
||||||
drops.add(BlockStorage.retrieve(e.getBlock()));
|
drops.add(BlockStorage.retrieve(e.getBlock()));
|
||||||
@ -203,21 +211,20 @@ public class ToolListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (item != null){
|
else if (item != null) {
|
||||||
if (item.getEnchantments().containsKey(Enchantment.LOOT_BONUS_BLOCKS) && !item.getEnchantments().containsKey(Enchantment.SILK_TOUCH)) {
|
if (item.getEnchantments().containsKey(Enchantment.LOOT_BONUS_BLOCKS) && !item.getEnchantments().containsKey(Enchantment.SILK_TOUCH)) {
|
||||||
fortune = SlimefunStartup.randomize(item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS) + 2) - 1;
|
fortune = SlimefunStartup.randomize(item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS) + 2) - 1;
|
||||||
if (fortune <= 0) fortune = 1;
|
if (fortune <= 0) fortune = 1;
|
||||||
fortune = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + SlimefunStartup.randomize(5) : 1) * (fortune + 1);
|
fortune = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + SlimefunStartup.randomize(5) : 1) * (fortune + 1);
|
||||||
}
|
}
|
||||||
|
for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) {
|
||||||
for (ItemHandler handler: SlimefunItem.getHandlers("BlockBreakHandler")) {
|
|
||||||
if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break;
|
if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!drops.isEmpty()) {
|
if (!drops.isEmpty()) {
|
||||||
e.getBlock().setType(Material.AIR);
|
e.getBlock().setType(Material.AIR);
|
||||||
for (ItemStack drop: drops) {
|
for (ItemStack drop : drops) {
|
||||||
if (drop != null) {
|
if (drop != null) {
|
||||||
e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), drop);
|
e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), drop);
|
||||||
}
|
}
|
||||||
@ -225,7 +232,7 @@ public class ToolListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true)
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
public void onEntityExplode(EntityExplodeEvent e) {
|
public void onEntityExplode(EntityExplodeEvent e) {
|
||||||
Iterator<Block> blocks = e.blockList().iterator();
|
Iterator<Block> blocks = e.blockList().iterator();
|
||||||
while (blocks.hasNext()) {
|
while (blocks.hasNext()) {
|
||||||
@ -254,4 +261,5 @@ public class ToolListener implements Listener {
|
|||||||
SlimefunItem item = BlockStorage.check(block);
|
SlimefunItem item = BlockStorage.check(block);
|
||||||
if (item != null) e.setCancelled(true);
|
if (item != null) e.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user