@SubscribeEvent public void onBlockDrops(BlockEvent.HarvestDropsEvent event) { if (event.state.getBlock() instanceof BlockMobSpawner) { if (ConfigHandler.spawnerDropRequireSilk) { if (event.harvester != null && EnchantmentHelper.getSilkTouchModifier(event.harvester)) { event.drops.add(new ItemStack(ModBlocks.mobCage, 1)); } } else { event.drops.add(new ItemStack(ModBlocks.mobCage, 1)); } // Drop some Essence of Mob? // No can do, can't get spawner to tell me what mob it is spawning. } }
public boolean hasUndeadSpawner(){ if(extraData!=null) for (int i = 0; i<blockIDs.length; i++){ //Zombie, Skeleton, Creeper, EASY, UPRIGHT spawners if(blockIDs[i] instanceof BlockMobSpawner) { String txt = extraData[i]; if (txt != null && (txt.equals("Zombie") || txt.equals("Skeleton") || txt.equals("Creeper") || txt.equals("EASY") || txt.equals("UPRIGHT"))) return true; } } return false; }
@SubscribeEvent public static void onBreakEvent(BlockEvent.BreakEvent evt) { if (evt.getState().getBlock() instanceof BlockMobSpawner) { if (evt.getPlayer() != null && !evt.getPlayer().capabilities.isCreativeMode && !evt.getPlayer().world.isRemote && !evt.isCanceled()) { TileEntity tile = evt.getPlayer().world.getTileEntity(NullHelper.notnullF(evt.getPos(), "BlockEvent.BreakEvent.getPos()")); if (tile instanceof TileEntityMobSpawner) { if (Math.random() > SpawnerConfig.brokenSpawnerDropChance.get()) { return; } ItemStack equipped = evt.getPlayer().getHeldItemMainhand(); if (Prep.isValid(equipped) && SpawnerConfig.brokenSpawnerToolBlacklist.get().contains(equipped)) { return; } TileEntityMobSpawner spawner = (TileEntityMobSpawner) tile; MobSpawnerBaseLogic logic = spawner.getSpawnerBaseLogic(); ResourceLocation entityName = getEntityName(logic); if (entityName != null && !isBlackListed(entityName)) { final CapturedMob capturedMob = CapturedMob.create(entityName); if (capturedMob != null) { ItemStack drop = capturedMob.toStack(ModObject.itemBrokenSpawner.getItemNN(), 0, 1); dropCache.put(evt.getPos().toImmutable(), drop); for (int i = (int) (Math.random() * 7); i > 0; i--) { setSpawnDelay(logic); logic.updateSpawner(); } } else { dropCache.put(evt.getPos().toImmutable(), Prep.getEmpty()); } } } } else { dropCache.put(evt.getPos().toImmutable(), Prep.getEmpty()); } } }
@SubscribeEvent public static void onHarvestDropsEvent(BlockEvent.HarvestDropsEvent evt) { if (!evt.isCanceled() && evt.getState().getBlock() instanceof BlockMobSpawner) { if (dropCache.containsKey(evt.getPos())) { ItemStack stack = dropCache.get(evt.getPos()); if (Prep.isValid(stack)) { evt.getDrops().add(stack); dropCache.put(evt.getPos().toImmutable(), Prep.getEmpty()); } } else { // A spawner was broken---but not by a player. The TE has been // invalidated already, but we might be able to recover it. try { for (Object object : evt.getWorld().loadedTileEntityList) { if (object instanceof TileEntityMobSpawner) { TileEntityMobSpawner spawner = (TileEntityMobSpawner) object; BlockPos p = spawner.getPos(); if (spawner.getWorld() == evt.getWorld() && p.equals(evt.getPos())) { // Bingo! MobSpawnerBaseLogic logic = spawner.getSpawnerBaseLogic(); ResourceLocation entityName = getEntityName(logic); if (entityName != null && !isBlackListed(entityName)) { final CapturedMob capturedMob = CapturedMob.create(entityName); if (capturedMob != null) { evt.getDrops().add(capturedMob.toStack(ModObject.itemBrokenSpawner.getItemNN(), 0, 1)); } } } } } } catch (Exception e) { // Risky recovery failed. Happens. } } } }
public boolean isSpecial(Block block){ return block instanceof BlockAir || block instanceof BlockMobSpawner || block instanceof BlockChest; }