NoobMaster4000
Members-
Posts
40 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
NoobMaster4000's Achievements
Tree Puncher (2/8)
0
Reputation
-
Okay, instead of nuke the drop list I did this: if (!world.isRemote) { for (int i = 0; i < event.getDrops().size(); i++) { if (!event.getDrops().isEmpty() && event.getDrops().get(i).getItem() instanceof ItemBlock) { ItemStack drop = event.getDrops().get(i); Block b = Block.getBlockFromItem(drop.getItem()); ItemStack smelt = FurnaceRecipes.instance() .getSmeltingResult(b.getPickBlock(state, null, world, event.getPos(), player)); smelt.setCount(1 + random.nextInt(fortuneLevel +1)); if (smelt.getItem() instanceof ItemAir) return; if (event.getDrops().contains(drop)) { event.getDrops().remove(drop); } event.getDrops().add(smelt.copy()); } } } Reverted the problem, now telepathy come over autosmelt. Probably my modification is wrong and using ItemHandlerHelper.giveItemToPlayer(player, event.getDrops().get(i)); Now drop both
-
Maybe I misunderstood or I explained bad, the autosmelt and telepathy enchants works both at the same time, if I harvest a block with a pickaxe with both of them, iron ore block and iron ingot from autosmelt enchant. package com.mod.modcore.events.enchantment; import java.util.Map; import java.util.Random; import com.mod.modcore.config.ConfigHandler; import com.mod.modcore.init.InitEnchants; import com.mod.modcore.lib.PlayerHelper; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemAir; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @EventBusSubscriber public class AutosmeltEvent { static Random random = new Random(); @SubscribeEvent public static void onAutosmeltUse(HarvestDropsEvent event) { EntityPlayer player = (EntityPlayer) event.getHarvester(); if (event.getHarvester() == null) return; ItemStack hand = player.inventory.getCurrentItem(); Map<Enchantment, Integer> autosmelt = EnchantmentHelper.getEnchantments(hand); if (autosmelt.isEmpty() || !autosmelt.containsKey(InitEnchants.AUTOSMELT)) return; Block block = event.getState().getBlock(); IBlockState state = event.getState(); World world = event.getWorld(); @SuppressWarnings("unused") int fortuneLevel = event.getFortuneLevel(); String[] blacklist = ConfigHandler.enchants.autosmelt.blacklistblocks; if (PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block))) { return; } if (!world.isRemote) { ItemStack smelt = FurnaceRecipes.instance() .getSmeltingResult(block.getPickBlock(state, null, world, event.getPos(), player)); for (int i = 0; i < event.getDrops().size(); i++) { if (smelt.getItem() instanceof ItemAir) return; event.getDrops().clear(); event.getDrops().add(smelt.copy()); } } } } I have this now, and works but I don't know how to add the fortunelevel to allow drop more items.
-
Telepathy: boolean isfull = player.inventory.getFirstEmptyStack() == -1; if (!world.isRemote) { if (telepathylevel > 0) { if (PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block))) return; for (int i = 0; i < event.getDrops().size(); i++) { if (!isfull) { player.inventory.addItemStackToInventory(event.getDrops().get(i)); } else { Random random = new Random(); float f = random.nextFloat() * 0.6F + 0.1F; float f1 = random.nextFloat() * 0.6F + 0.1F; float f2 = random.nextFloat() * 0.6F + 0.1F; float f3 = 0.025F; EntityItem eitem = new EntityItem(world, pos.getX() + f, pos.getY() + f1, pos.getZ() + f2, event.getDrops().get(i).copy()); eitem.motionX = (random.nextGaussian() * f3); eitem.motionY = (random.nextGaussian() * f3 + 0.20000000298023224D); eitem.motionZ = (random.nextGaussian() * f3); world.spawnEntity(eitem); event.setDropChance(0.0F); } } } } Autosmelt: @SubscribeEvent public static void onAutosmeltUse(HarvestDropsEvent event) { EntityPlayer player = (EntityPlayer) event.getHarvester(); if (event.getHarvester() == null) return; ItemStack hand = player.inventory.getCurrentItem(); Map<Enchantment, Integer> autosmelt = EnchantmentHelper.getEnchantments(hand); if (autosmelt.isEmpty() || !autosmelt.containsKey(InitEnchants.AUTOSMELT)) return; Block block = event.getState().getBlock(); IBlockState state = event.getState(); World world = event.getWorld(); int fortuneLevel = event.getFortuneLevel(); String[] blacklist = ConfigHandler.enchants.autosmelt.blacklistblocks; if (PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block))) { return; } if (!world.isRemote) { ItemStack smelt = FurnaceRecipes.instance().getSmeltingResult( new ItemStack(block, 1 + random.nextInt(fortuneLevel + 1), block.getMetaFromState(state))); for (int i = 0; i < event.getDrops().size(); i++) { if (smelt.getItem() instanceof ItemAir) return; event.getDrops().clear(); event.getDrops().add(smelt.copy()); } } } The error log is for this: @SubscribeEvent public static void onExcavateUse(BlockEvent.BreakEvent event) { EntityPlayer player = (EntityPlayer) event.getPlayer(); ItemStack hand = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); Map<Enchantment, Integer> excavate = EnchantmentHelper.getEnchantments(hand); if (excavate.isEmpty() || !excavate.containsKey(InitEnchants.EXCAVATE)) return; int excavatelevel = excavate.get(InitEnchants.EXCAVATE); World world = event.getWorld(); BlockPos pos = event.getPos(); IBlockState state = event.getState(); Block block = event.getState().getBlock(); String[] blacklist = ConfigHandler.enchants.excavate.blacklistblocks; boolean breakonlysimilarblocks = ConfigHandler.enchants.excavate.breakonlysimilarblocks; if (!world.isRemote) { if (excavatelevel > 0) { for (int i = 0; i < (excavatelevel + 1); i++) { Iterable<BlockPos> it = BlockPos.getAllInBox(pos.add(-i, -i, -i), pos.add(i, i, i)); for (BlockPos offset2 : it) { Block block2 = world.getBlockState(offset2).getBlock(); if (!PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block2))) { block2.harvestBlock(world, player, offset2, state, null, ItemStack.EMPTY); block2.removedByPlayer(state, world, offset2, player, true); hand.damageItem(1, player); } else if (breakonlysimilarblocks) { if (block2 == block && !PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block2))) { block2.harvestBlock(world, player, offset2, state, null, ItemStack.EMPTY); block2.removedByPlayer(state, world, offset2, player, true); hand.damageItem(1, player); } } } } } } } With error at line: block2.harvestBlock(world, player, offset2, state, null, ItemStack.EMPTY);
-
[19:13:28] [Server thread/ERROR] [FML]: Exception caught during firing event net.minecraftforge.event.world.BlockEvent$BreakEvent@53c6a690: java.lang.IllegalArgumentException: Cannot get property PropertyEnum{name=variant, clazz=class net.minecraft.block.BlockStone$EnumType, values=[stone, granite, smooth_granite, diorite, smooth_diorite, andesite, smooth_andesite]} as it does not exist in BlockStateContainer{block=minecraft:iron_ore, properties=[]} at net.minecraft.block.state.BlockStateContainer$StateImplementation.getValue(BlockStateContainer.java:204) ~[BlockStateContainer$StateImplementation.class:?] at net.minecraft.block.BlockStone.getItemDropped(BlockStone.java:52) ~[BlockStone.class:?] at net.minecraft.block.Block.getDrops(Block.java:1563) ~[Block.class:?] at net.minecraft.block.Block.getDrops(Block.java:1543) ~[Block.class:?] at net.minecraft.block.Block.dropBlockAsItemWithChance(Block.java:720) ~[Block.class:?] at net.minecraft.block.Block.dropBlockAsItem(Block.java:710) ~[Block.class:?] at net.minecraft.block.Block.harvestBlock(Block.java:929) ~[Block.class:?] at com.mod.modcore.events.enchantment.ExcavateEvent.onExcavateUse(ExcavateEvent.java:48) ~[ExcavateEvent.class:?] at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_20_ExcavateEvent_onExcavateUse_BreakEvent.invoke(.dynamic) ~[?:?] at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90) ~[ASMEventHandler.class:?] at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182) [EventBus.class:?] at net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(ForgeHooks.java:838) [ForgeHooks.class:?] at net.minecraft.server.management.PlayerInteractionManager.tryHarvestBlock(PlayerInteractionManager.java:309) [PlayerInteractionManager.class:?] at net.minecraft.server.management.PlayerInteractionManager.blockRemoving(PlayerInteractionManager.java:261) [PlayerInteractionManager.class:?] at net.minecraft.network.NetHandlerPlayServer.processPlayerDigging(NetHandlerPlayServer.java:732) [NetHandlerPlayServer.class:?] at net.minecraft.network.play.client.CPacketPlayerDigging.processPacket(CPacketPlayerDigging.java:56) [CPacketPlayerDigging.class:?] at net.minecraft.network.play.client.CPacketPlayerDigging.processPacket(CPacketPlayerDigging.java:12) [CPacketPlayerDigging.class:?] at net.minecraft.network.PacketThreadUtil$1.run(PacketThreadUtil.java:21) [PacketThreadUtil$1.class:?] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_221] at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_221] at net.minecraft.util.Util.runTask(Util.java:53) [Util.class:?] at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:798) [MinecraftServer.class:?] at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743) [MinecraftServer.class:?] at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192) [IntegratedServer.class:?] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592) [MinecraftServer.class:?] at java.lang.Thread.run(Unknown Source) [?:1.8.0_221] if (!PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block2))) { block2.harvestBlock(world, player, offset2, state, null, ItemStack.EMPTY); block2.removedByPlayer(state, world, offset2, player, true); hand.damageItem(1, player); } The error is at block2.harvestBlock Also, telepathy add the item in my inventory and autosmelt on the ground Telepathy: boolean isfull = player.inventory.getFirstEmptyStack() == -1; if (!isfull) { player.inventory.addItemStackToInventory(event.getDrops().get(i)); } AutoSmelt: if (!world.isRemote) { ItemStack smelt = FurnaceRecipes.instance().getSmeltingResult( new ItemStack(block, 1 + random.nextInt(fortuneLevel + 1), block.getMetaFromState(state))); for (int i = 0; i < event.getDrops().size(); i++) { if (smelt.getItem() instanceof ItemAir) return; event.getDrops().clear(); event.getDrops().add(smelt.copy()); } }
-
No, I mean how I put it in my entity check? What I need is exclude the player from the blacklist, he should be always whitelisted so that means: Blacklist: cow I hit the cow, no effects. hit the player, effects Blacklist: {} I hit the cow, effects. hit the player, effects The blacklist should always exclude the player making him always affected, even if blacklisted somehow
-
Sorry, it says "excavatelevel" but: public static void onExcavateUse(BlockEvent.BreakEvent event) { EntityPlayer player = (EntityPlayer) event.getPlayer(); ItemStack hand = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); Map<Enchantment, Integer> excavate = EnchantmentHelper.getEnchantments(hand); if (excavate.isEmpty() || !excavate.containsKey(InitEnchants.EXCAVATE)) return; int excavatelevel = excavate.get(InitEnchants.EXCAVATE); World world = event.getWorld(); BlockPos pos = event.getPos(); IBlockState state = event.getState(); Block block = event.getState().getBlock(); String[] blacklist = ConfigHandler.enchants.excavate.blacklistblocks; boolean breakonlysimilarblocks = ConfigHandler.enchants.excavate.breakonlysimilarblocks; if (!world.isRemote) { if (excavatelevel > 0) { for (int i = 0; i < (excavatelevel + 1); i++) { Iterable<BlockPos> it = BlockPos.getAllInBox(pos.add(-i, -i, -i), pos.add(i, i, i)); for (BlockPos offset2 : it) { Block block2 = world.getBlockState(offset2).getBlock(); if (/* block2 == block && */ block2 != Blocks.AIR && !PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block2))) { block2.harvestBlock(world, player, offset2, state, null, ItemStack.EMPTY); block2.removedByPlayer(state, world, offset2, player, true); hand.damageItem(1, player); } else if (breakonlysimilarblocks) { if (block2 == block && block2 != Blocks.AIR && !PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block2))) { block2.harvestBlock(world, player, offset2, state, null, ItemStack.EMPTY); block2.removedByPlayer(state, world, offset2, player, true); hand.damageItem(1, player); } } } } } } } It works with everything (need the last test) Now the problem is LivingHurtEvent: String[] blacklist = ConfigHandler.enchants.poison.blacklistentities; if (PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(entityhurt))) return; The 2 methods are: public static boolean isBlacklisted(String[] blacklist, String name) { for (int i = 0; i < blacklist.length; i++) { if (blacklist[i].contains(name)) { return true; } } return false; } public static String getEntityName(Entity entity) { return EntityList.getKey(entity).toString(); } public static String getEntityName(Block block) { return block.getRegistryName().toString(); } public static String getEntityName(Item item) { return item.getRegistryName().toString(); } Which works if I hit a cow and the effect work, if I add "minecraft:cow" in the blacklist it work and the effect doesn't work on the cow but but I can't add "minecraft:player", if I hit a player it crashes. I want this blacklist so the entities blacklisted aren't affected
-
if (!world.isRemote) { if (excavatelevel > 0) { for (int i = 0; i < (excavatelevel + 1); i++) { Iterable<BlockPos> it = BlockPos.getAllInBox(pos.add(-i, -i, -i), pos.add(i, i, i)); for (BlockPos offset2 : it) { Block block2 = world.getBlockState(offset2).getBlock(); if (/*block2 == block &&*/ block2 != Blocks.AIR && !PlayerHelper.isBlacklisted(blacklist, block2.getRegistryName().toString())) { block2.harvestBlock(world, player, offset2, state, null, ItemStack.EMPTY); block2.removedByPlayer(state, world, offset2, player, true); hand.damageItem(1, player); } } } } } The comment is because I want to set a setting to break only the same block but I have to solve the problem with the redstone since it becore lit_redstone_ore, so I leave there for now Found this ItemStack hand = player.inventory.armorInventory.get(i); Now telepathy doesn't work with autosmelt, which is: Dropping iron ingots and the ore
-
Okay, I'll try. I use this: for (int i = 0; i < entityhurt.inventory.armorInventory.size(); i++) { ItemStack hand = player.inventory.armorItemInSlot(i); to check the player armor (for telepathy) but on server it crashes because there's no method, how can I check it? I want to make telepathy compatible for pickaxe/armor
-
Is just a test, I'll add now what it miss public static void onExcavateUse(BlockEvent.BreakEvent event) { EntityPlayer player = (EntityPlayer) event.getPlayer(); ItemStack hand = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); Map<Enchantment, Integer> excavate = EnchantmentHelper.getEnchantments(hand); if (excavate.isEmpty() || !excavate.containsKey(InitEnchants.EXCAVATE)) return; int excavatelevel = excavate.get(InitEnchants.EXCAVATE); World world = event.getWorld(); BlockPos pos = event.getPos(); Block block = event.getState().getBlock(); String[] blacklist = ConfigHandler.enchants.excavate.blacklistblocks; if (!world.isRemote) { if (excavatelevel > 0) { for (int i = 0; i < (excavatelevel + 1); i++) { Iterable<BlockPos> it = BlockPos.getAllInBox(pos.add(-i, -i, -i), pos.add(i, i, i)); for (BlockPos offset2 : it) { Block block2 = world.getBlockState(offset2).getBlock(); if (block2 == block && block2 != Blocks.AIR && !PlayerHelper.isBlacklisted(blacklist, block2.getRegistryName().toString())) { world.destroyBlock(offset2, true); hand.damageItem(1, player); } } } } } }
-
public static void onTelepathyUse(HarvestDropsEvent event) { EntityPlayer player = (EntityPlayer) event.getHarvester(); if (event.getHarvester() == null) return; World world = event.getWorld(); ItemStack hand = player.getItemStackFromSlot(EntityEquipmentSlot.MAINHAND); Map<Enchantment, Integer> telepathy = EnchantmentHelper.getEnchantments(hand); if (telepathy.isEmpty() || !telepathy.containsKey(InitEnchants.TELEPATHY)) return; int telepathylevel = telepathy.get(InitEnchants.TELEPATHY); // IBlockState state = event.getState(); // Random random = new Random(); // BlockPos pos = event.getPos(); Block block = event.getState().getBlock(); // int fortuneLevel = event.getFortuneLevel(); // ItemStack drop = new ItemStack(block, 1, block.getMetaFromState(state)); String[] blacklist = ConfigHandler.enchants.telepathy.blacklistblocks; boolean isfull = player.inventory.getFirstEmptyStack() == -1; if (!world.isRemote) { if (telepathylevel > 0) { if (PlayerHelper.isBlacklisted(blacklist, PlayerHelper.getEntityName(block))) return; if (!isfull) { for (int i = 0; i < event.getDrops().size(); i++) { player.inventory.addItemStackToInventory(event.getDrops().get(i)); } } } } } } Like this? Yes, it works not with the 3x3 enchant but it works