Jump to content

Toost

Members
  • Posts

    23
  • Joined

  • Last visited

Posts posted by Toost

  1. So here's what I've found:

    Vanilla reeds use this method:

    public boolean generate(World worldIn, Random rand, BlockPos position)
        {
            for (int i = 0; i < 20; ++i)
            {
                BlockPos blockpos = position.add(rand.nextInt(4) - rand.nextInt(4), 0, rand.nextInt(4) - rand.nextInt(4));
    
                if (worldIn.isAirBlock(blockpos))
                {
                    BlockPos blockpos1 = blockpos.down();
    
                    if (worldIn.getBlockState(blockpos1.west()).getBlock().getMaterial() == Material.water || worldIn.getBlockState(blockpos1.east()).getBlock().getMaterial() == Material.water || worldIn.getBlockState(blockpos1.north()).getBlock().getMaterial() == Material.water || worldIn.getBlockState(blockpos1.south()).getBlock().getMaterial() == Material.water)
                    {
                        int j = 2 + rand.nextInt(rand.nextInt(3) + 1);
    
                        for (int k = 0; k < j; ++k)
                        {
                            if (Blocks.reeds.canBlockStay(worldIn, blockpos))
                            {
                                worldIn.setBlockState(blockpos.up(k), Blocks.reeds.getDefaultState(), 2);
                            }
                        }
                    }
                }
            }
    
            return true;
        }

    But with Forge, I think you're supposed to use this method:

            @Override
    public void generate(Random random, int chunkX, int chunkZ, World world,IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
    
    }

    How do I convert from the boolean to void? Also, the parameters of the two methods don't match.

     

    Basically, I just want to know how I convert the vanilla method(boolean) to the one forge uses(void).

  2. Nvm... I found a WAAAAYYyyyyy better way of handling torches. I've made it so that when the player tries to place a torch, they explode. A lot. Huge explode.  :D

    That way they can still use torches in crafting if they need to, but they can't place them in the world.

     

    Here's the event handler code if anybody's interested:

    @SubscribeEvent(priority = EventPriority.HIGH)
        public void onPlayerUseEvent(PlayerInteractEvent e) {
    	EntityPlayer player = e.entityPlayer;
    
    	if(e.entityPlayer.getCurrentEquippedItem() != null){
    		Item item = player.getCurrentEquippedItem().getItem();
    		if(item == Item.getItemFromBlock(Blocks.torch)){
    			e.world.newExplosion(null, player.posX, player.posY, player.posZ, 3f, true, true);
    			e.setCanceled(true);
    
    		}else{}
    	}
        }

    EDIT: Get rid of this line:

    e.setCanceled(true);

    Otherwise, when you right click, you will just get sent flying, but on left click you will actually explode.

    I think this is because the swinging action isn't canceled, but the block placing action is, for some reason.

  3. Alright, so I've taken your advice, and I think the solution is to create an event handler that checks when a player clicks. Then I could have it check if the player used a torch. After that, I can replace that torch block with my "toost torch"(The fake torch that can light things on fire). Then I just have to make it so that toost torches drop regular torches when broken.

    I'm getting stuck on checking for the current item and replacing the regular torches. The rest of the solution should be easy enough, though.

    This is the code for the event handler:

    	@SubscribeEvent(priority = EventPriority.HIGH)
        public void onPlayerUseEvent(PlayerInteractEvent e) {
    	ItemStack toostTorchStack = new ItemStack(ModBlocks.toost_torches);
    	if(e.entityPlayer.getItemInUse() == toostTorchStack){
    		System.out.println("Found Torch");
    
    	}else{
    		System.out.println("Found Item Use Event");
    
    	}
        }

     

    EDIT:

    The console does output the bottom line whenever the player clicks, so the event handler is working. However, it doesn't differentiate whether or not the player is holding torches.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.