Jump to content

Recommended Posts

Posted

Hello! I am trying to get it to when I right-click the block (a block from my mod) the blockstate is full it will change to empty and it will drop two items.

However when I right-click the block the items don't appear. :(

 

The code below:

 

@Override

public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) {

if (state.getValue(TYPE) == EnumType.FULL){

worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.EMPTY)));

EntityItem entityitem1 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(Items.bucket, 1));

EntityItem entityitem2 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(OraniaItems.bucket_of_brine, 1));

worldIn.spawnEntityInWorld(entityitem1);

worldIn.spawnEntityInWorld(entityitem2);

return true;

}

return false;

}

Posted

First check if this even returns true with System.out.println();

 
if(state.getValue(TYPE) == EnumType.FULL)

 

Than, do what diesieben said, nothing is needed with registrations.

 

 

Posted

  public boolean onBlockActivated(World worldIn ....

 

Here on the method you already have an instance of "World" so use it

 

 

If you are still not getting it: worldIn.isRemote instead of World.isRemote

Posted

I know I have an instance and but it give me an error: The final field World.isRemote cannot be assigned.

 

What exactly are you doing?

Don't type World.isRemote, that will bring you errors.

Type this: worldIn.isRemote

Posted

Not sure if your just making a simple slip-up or don't know java well enough yet.

 

A single equals is for assigning a value, a double equals is for comparing.

 

(worldIn.isRemote = false)

^ This is trying to set the isRemote field to false, but you can't because its final.

 

if (worldIn.isRemote == false)

^ this is what you want

Or better yet:  if (!worldIn.isRemote)

It is the shortened form of: if (worldIn.isRemote != true)

The exclamation mark represents not, so the statement is read as 'if world.isRemote is not true' thus its false.

 

 

Posted

As he mentioned above = is used to assign a value to a variable while == is for comparing. When you have a boolean you don't need to add the == part though because a boolean is always true or false. Adding ! Before your boolean is like saying "not" true.

Posted

(I put the entire onBlockActivated code)

 

@Override

public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) {

// This is some other code go to the next //

if (state.getValue(TYPE) == EnumType.EMPTY){

ItemStack itemstack = playerIn.getCurrentEquippedItem();

if (itemstack.getItem() == Items.water_bucket){

worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.FULL)));

if (!playerIn.capabilities.isCreativeMode) {

playerIn.destroyCurrentEquippedItem();

return true;

}

 

}

}

//This is the code I'm using

if (!worldIn.isRemote){

if (state.getValue(TYPE) == EnumType.FULL){

worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.EMPTY)));

EntityItem entityitem1 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(Items.bucket, 1));

EntityItem entityitem2 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(OraniaItems.bucket_of_brine, 1));

worldIn.spawnEntityInWorld(entityitem1);

worldIn.spawnEntityInWorld(entityitem2);

return true;

}

}

return false;

}

Posted

What I meant by This is some other code go to the next // is different code unrelated with my problem. I adjusted the code however it still does not work.

 

@Override

public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) {

 

if (state.getValue(TYPE) == EnumType.EMPTY){

ItemStack itemstack = playerIn.getCurrentEquippedItem();

if (itemstack.getItem() == Items.water_bucket){

worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.FULL)));

if (!playerIn.capabilities.isCreativeMode) {

playerIn.destroyCurrentEquippedItem();

return true;

}

return false;

}

}

if (!worldIn.isRemote){

if (state.getValue(TYPE) == EnumType.FULL){

worldIn.setBlockState(pos, (this.blockState.getBaseState().withProperty(TYPE, EnumType.EMPTY)));

EntityItem entityitem1 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(Items.bucket, 1));

EntityItem entityitem2 = new EntityItem(worldIn, hitX, hitY, hitZ, new ItemStack(OraniaItems.bucket_of_brine, 1));

worldIn.spawnEntityInWorld(entityitem1);

worldIn.spawnEntityInWorld(entityitem2);

return true;

}

}

return true;

}

 

Posted

The first part should also be inside the isRemote check.

Also, what I just noticed, why in the actual fuck are you using

hitX, hitY, hitZ

as the spawn coordinates of the item entity?

 

I am not very sure if this is actually a thing (because i am a 1.8 noob) but i think that BlockPos has got a .getX(), geY(), getZ().

You already have a BlockPos instance on your method so use pos.getX(), pos.getY() and pos.getZ() instead of hitX, hitY, hitZ.

 

If this is not a thing then ignore this comment. It is me being derpy on 1.8 forge.

 

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hey guys, I'm trying to use the simple planes mod https://www.curseforge.com/minecraft/mc-mods/simple-planes with a nuclear bombs mod https://www.curseforge.com/minecraft/mc-mods/nuclear-bombs . The simple planes mod has a cargo plane that can drop tnt, and i want it to work with the nuclear bombs. I added this JSON file from chatGPT to the payloads folder in simple planes (because the nukes couldn't even get stored in the plane in the first place), but this only allows the nuke to drop but doesn't explode: https://mclo.gs/3uEQIX2 . This nuke mod requires a redstone signal and then manual activation, which makes this tougher i imagine. If someone could write me a code for the payload folder for simpleplanes, something that even tampers with the nuke mod, or any general suggestions that would be great!  Many Thanks
    • https://paste.ee/p/Qai73Cbt  that is crash file link  
    • I'm trying to make an addon mod for lycanite mobs and I got in the game. I ran the command to summon in my mob and it said unable to summon object i tried and tried again and it never worked and then someone told me that it was probably because I never added a registry for my addon mod, so how do I do that?
    • hi have 218 mods in modpack in Modrinth and it keeps crashing, so are there any incompatibilities? debug.log  
    • Hello, this is the first time I've created a mod for Minecraft and my mod is for an entity that plays in your world. I've survived several tutorials and documentation, but I still can't do what I want to do. Can you tell me why I'm getting this error? Everything looks good. no ? Forge for 1.21.4 changelist : https://gist.github.com/ChampionAsh5357/d895a7b1a34341e19c80870720f9880f Repos Github for my mod : https://github.com/Maxime66410/TheFakePlayer Last Log : https://gist.github.com/Maxime66410/246f983f2d791469ae87a77825527da9   Caused by: java.lang.NullPointerException: Registry Object not present: thefakeplayer:fake_player_entity at TRANSFORMER/[email protected]/net.minecraftforge.registries.RegistryObject.get(RegistryObject.java:193) ~[forge-1.21.4-54.1.3_mapped_official_1.21.4-recomp.jar%231!/:?] at TRANSFORMER/[email protected]/org.furranystudio.thefakeplayer.Events.ClientModEvents.entityAttributes(ClientModEvents.java:27) ~[main/:?] at TRANSFORMER/[email protected]/org.furranystudio.thefakeplayer.Events.__ClientModEvents_entityAttributes_EntityAttributeCreationEvent.invoke(.dynamic) ~[main/:?] at SECURE-BOOTSTRAP/net.minecraftforge.eventbus/net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:46) ~[eventbus-6.2.27.jar:?] at SECURE-BOOTSTRAP/net.minecraftforge.eventbus/net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-6.2.27.jar:?] at SECURE-BOOTSTRAP/net.minecraftforge.eventbus/net.minecraftforge.eventbus.EventBus.post(EventBus.java:288) ~[eventbus-6.2.27.jar:?] at LAYER PLUGIN/[email protected]/net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:184) ~[javafmllanguage-1.21.4-54.1.3.jar:54.1.3]     SOLUTION :  ModEntities.ENTITIES.register(modEventBus); -> public Thefakeplayer(FMLJavaModLoadingContext context) https://docs.minecraftforge.net/en/1.21.x/concepts/registries/ https://github.com/MinecraftForge/MinecraftForge/blob/1.21.x/src/main/java/net/minecraftforge/registries/DeferredRegister.java  
  • Topics

×
×
  • Create New...

Important Information

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