1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

Merge pull request #860 from SoSeDiK/spawners

Spawners
This commit is contained in:
TheBusyBiscuit 2019-03-27 16:40:44 +01:00 committed by GitHub
commit 8c2746e775
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 12 deletions

View File

@ -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",

View File

@ -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);
} }
} }