Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[Solved]1.11.2. Add integer/float property to vanilla blocks


Recommended Posts

I want to add an integer and float property to some vanilla blocks...something that can be accessed later with a blockstate.getProperty or something. An example is a weight value.  Each block type would have a weight that I specify.  I could have a lookup table, but I wanted to see if possible to add it in the 'proper way' that would also then allow other mods to have access to the new property.


Further, I was hoping to avoid creating a new extended class for every block I wanted to add the new properties to, but instead add a new IProperty (?) to the default blockstate that I would create/init at mod loading. I do not see a register property function or a way to reset the default state with new property (hopefully, I'm missing one that is exposed). I'm still trying to figure out the properties design, so maybe way off base.


--Does this make sense? Am I going about it the correct way? I just want to see if I'm stumbling/fumbling in the correct direction.



Edited by aw_wolfe
Link to comment
Share on other sites

The problem is that properties are not this "magic thing" that get stored. They have to be encoded in metadata to be saved to disk. If you were to add properties to vanilla blocks (even if that was possible), you basically wouldn't be able to save anything, because many blocks (e.g. doors) already use the full 4 bits of metadata.


What you need to do is write your own data structure and manage this stuff yourself, probably using WorldSavedData.

Link to comment
Share on other sites

Even if you could, however, it would probably cause chaos in the model system, as you could theoretically add a block property to a block after the model loads, which MC would not know what do with when it tries to render said block. So, I think you're restricted in terms of options:

- Make the IProperty accessible via an API and have other mods use and implement it themselves, which you would need to check for whenever you wanted to do something with the block. (This doesn't help in editing vanilla blocks)

- Abandon dynamic properties in place of something else

- Manually add substitutions for all the vanilla blocks you want to change, via the GameRegistry#addSubstitutionAlias

Edited by TheMasterGabriel
Link to comment
Share on other sites

Ok. Thanks. I don't think I need to save the information, more of a physical property, i.e. every stone would always weigh the same. So I was thinking that every load would add the property onto the block type each time.


I'm ok with a look up table, but was wanting to design in a way that another mod could access the information if it wanted to.


How do mods access other mods ? Can an API be set up like

//PSUEDO CODE--just to express my question

float getBlockWeight(String blockName){
	//do my lookup table
	return doLookupTable(blockName);

float weight=my_mod.getBlockWeight("minecraft:stone");


Link to comment
Share on other sites

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.

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.


  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • okay thank you for clarifying! I'll try to implement the setup method and event listeners as an extra class, maybe this works!
    • Show your code. You do not have to draw the entire texture (see above). You do not have to draw the texture at 1:1 scale.
    • MC version :1.16.5 Forge version :36.2.20 I added "MeleeAttackGoal" in my entity,and then I can‘t summon this entity.what's wrong in my code? //the entity's code package net.fsmc.classmates.animals; import net.minecraft.entity.AgeableEntity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.ai.attributes.Attributes; import net.minecraft.entity.ai.goal.*; import net.minecraft.entity.merchant.villager.AbstractVillagerEntity; import net.minecraft.entity.monster.ZombifiedPiglinEntity; import net.minecraft.entity.passive.AnimalEntity; import net.minecraft.entity.passive.IronGolemEntity; import net.minecraft.entity.passive.TurtleEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.world.World; import net.minecraft.world.server.ServerWorld; import javax.annotation.Nullable; public class n7Yjy extends AnimalEntity  {          public n7Yjy(EntityType<? extends AnimalEntity> type, World worldIn) {         super(type, worldIn);     }          public static AttributeModifierMap.@NotNull MutableAttribute registerAttributes() {          return MobEntity.func_233666_p_()                  .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.23000000417232513D)                  .createMutableAttribute(Attributes.ATTACK_DAMAGE, 7.0D)                  .createMutableAttribute(Attributes.FOLLOW_RANGE, 40.0D)                  .createMutableAttribute(Attributes.MAX_HEALTH, 30.0D);      }          @Override     protected void registerGoals(){         this.goalSelector.addGoal(2, new RandomWalkingGoal(this , 1D,1));         this.goalSelector.addGoal(3, new LookAtGoal(this,PlayerEntity.class,8.0f));         this.goalSelector.addGoal(3,new MeleeAttackGoal(this,0.3,true));         this.Target();     }     public void Target(){         this.targetSelector.addGoal(2, (new HurtByTargetGoal(this,new Class[0])).setCallsForHelp(new Class[]{ZombifiedPiglinEntity.class}));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, AbstractVillagerEntity.class, false));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, IronGolemEntity.class, true));         this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, TurtleEntity.class, 10, true, false, TurtleEntity.TARGET_DRY_BABY));     }     @Nullable     @Override     public AgeableEntity createChild(ServerWorld serverWorld, AgeableEntity ageableEntity) {         return null;     } }
    • I am trying to set up my first project and it says this: Unsupported Java.  Your build is currently configured to use Java 16.0.1 and Gradle 6.8.1. Possible solution:  - Use Java 15 as Gradle JVM: Open Gradle settings   - Upgrade Gradle wrapper to 7.0 version and re-import the project I know I am using Java 15 already because in the gradle settings it says gradle JVM: 15 version 15.0.2 So my question is how do I upgrade the gradle wrapper? Sorry if this is a noobie question, trying to set up my first project.  
    • Yes, I don't think you want this as a mod jar. I am not 100% on the details, but ModLauncher implements a multi-module-layer system and you need to load into a specific layer.
  • Topics

  • Who's Online (See full list)

  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.