Posted October 31, 20177 yr @SubscribeEvent public void onPlayerInteract(PlayerInteractEvent.RightClickBlock evt) { // only handle right clicks on blocks // TODO: port for 1.9 // if (evt.action != PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) { // return; BlockPos pos = evt.getPos(); World world = evt.getWorld(); IBlockState state = world.getBlockState(pos); Block block = world.getBlockState(pos).getBlock(); // don't interact with vanilla egg blocks if configured if (RealmOfTheDragons.instance.getConfig().isDisableBlockOverride() && block == Blocks.DRAGON_EGG) { return; } // ignore non-egg blocks if (block != Blocks.DRAGON_EGG && block != BlockDragonBreedEgg.DRAGON_BREED_EGG) { return; } // deny action evt.setResult(Event.Result.DENY); // clear dragon egg block to avoid teleportation boolean setair = world.setBlockToAir(pos); // create dragon egg entity on server // put else if (!world.isRemote) { // this was inverted, i.e. evt.world.isRemote, but it should surely be this way EntityTameableDragon dragon = new EntityTameableDragon(world); dragon.setPosition(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); dragon.getReproductionHelper().setBreeder(evt.getEntityPlayer()); dragon.getLifeStageHelper().setLifeStage(EnumDragonLifeStage.EGG); boolean spawn = world.spawnEntity(dragon); // set breed type (custom dragon egg only, otherwise use default breed) if (block == BlockDragonBreedEgg.DRAGON_BREED_EGG) { EnumDragonBreed breed = state.getValue(BlockDragonBreedEgg.BREED); dragon.getBreedHelper().setBreedType(breed); } spawn = true; } if (world.provider.getDimensionType().equals(DimensionType.THE_END)) { evt.setCanceled(true); } } } if (world.provider.getDimensionType().equals(DimensionType.THE_END)) { evt.setCanceled(true); } how do I arrange this exactly?
October 31, 20177 yr What specifically are you trying to cancel? If it's the entire thing in there wouldn't you just surround the entire thing with that if? And wouldn't using: if (world.provider instanceof WorldProviderEnd) { evt.setCanceled(true); } Work a lot better? Edited October 31, 20177 yr by SubDivide
November 1, 20177 yr Author 9 hours ago, SubDivide said: What specifically are you trying to cancel? If it's the entire thing in there wouldn't you just surround the entire thing with that if? And wouldn't using: if (world.provider instanceof WorldProviderEnd) { evt.setCanceled(true); } Work a lot better? SOLVED! Just gotta put the source code so I can help kids who would check this public class DragonEggBlockHandler { @SubscribeEvent public void onPlayerInteract(PlayerInteractEvent.RightClickBlock evt) { BlockPos pos = evt.getPos(); World world = evt.getWorld(); IBlockState state = world.getBlockState(pos); Block block = world.getBlockState(pos).getBlock(); if (world.provider.getDimensionType().getId() != 1) { // don't interact with vanilla egg blocks if configured if (RealmOfTheDragons.instance.getConfig().isDisableBlockOverride() && block == Blocks.DRAGON_EGG) { return; } // ignore non-egg blocks if (block != Blocks.DRAGON_EGG && block != BlockDragonBreedEgg.DRAGON_BREED_EGG) { return; } // deny action evt.setResult(Event.Result.DENY); // clear dragon egg block to avoid teleportation world.setBlockToAir(pos); // create dragon egg entity on server // put else if (!world.isRemote) { // this was inverted, i.e. evt.world.isRemote, but it should surely be this way EntityTameableDragon dragon = new EntityTameableDragon(world); dragon.setPosition(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); dragon.getReproductionHelper().setBreeder(evt.getEntityPlayer()); dragon.getLifeStageHelper().setLifeStage(EnumDragonLifeStage.EGG); // set breed type (custom dragon egg only, otherwise use default breed) if (block == BlockDragonBreedEgg.DRAGON_BREED_EGG) { EnumDragonBreed breed = state.getValue(BlockDragonBreedEgg.BREED); dragon.getBreedHelper().setBreedType(breed); } world.spawnEntity(dragon); } } } }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.