Jump to content

Tret

Members
  • Posts

    12
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Tret's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. So I just need to attach my code (I posted above) to chunks?
  2. Do you by any chance have good code examples of chunk capabilities in 1.17 forge? I can't find any and I really need some to fully understand the forge documentation.
  3. I've been digging for some capabilities knowledge and I can see a lot of people using capabilities and nbt tags to add custom properties to block entities. Should I stick with the custom storage or would the capability system be a better way to implement my mechanic? So far I have these prototype codes: public class HeatCapability implements IHeat{ @Override public void setHeat(double heat) { } @Override public double getHeat() { return 0; } @Override public double ExchangeRate() { return 0; } @Override public double HeatCapacity() { return 0; } @Override public double ExchangeFactor() { return 0; } @Override public void write(DataOutput pOutput) throws IOException { } @Override public byte getId() { return 0; } @Override public TagType<?> getType() { return null; } @Override public Tag copy() { return null; } @Override public void accept(TagVisitor pVisitor) { } } public class HeatStorage implements ICapabilitySerializable<CompoundTag> { @CapabilityInject(IHeat.class) public static final Capability<IHeat> HEAT_CAPABILITY = null; public static final LazyOptional<IHeat> instance = LazyOptional.of(HEAT_CAPABILITY::getDefaultInstance); @Nonnull @Override public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) { return cap == HEAT_CAPABILITY? (LazyOptional<T>) instance : LazyOptional.empty(); } @Override public CompoundTag serializeNBT() { CompoundTag nbt = new CompoundTag(); nbt.putDouble("Heat", instance.resolve().get().getHeat()); return nbt; } @Override public void deserializeNBT(CompoundTag nbt) { instance.resolve().get().setHeat(nbt.getDouble("Heat")); } }
  4. And since I add chunk capabilities the container itself will only exist per chunk so it does not need to know which chunk it is in right? Thank you for the suggestion and the help!
  5. Yeah but a BlockPos contains a lot of information. For example 3 ints for the 3D space. Id of the world which could be an unsigned short but it is still 31bit of information. If java is smart enough maybe it will use references instead of copy constructors but is it smart enough for that or should I dig into java symbols for getting a value by reference?
  6. Is this as easy as this: https://mcforge.readthedocs.io/en/latest/datastorage/capabilities/#attaching-capabilities Or do I need to create my own capability? Also considering I need to store the BlockPos too as a key my storage size would almost go triple the size as opposed if I try to add my value as a block property. Is there a way to avoid this?
  7. So my only option is to store them in a map with a blockpos as a key so I can identify where it belongs?
  8. Another question arises. How could I add a custom property to every block in Minecraft? Do I need mixin for that?
  9. The problem is, this is a constructor and mixin can not modify constructors. Subscribing to the event would still not work as I need to apply my mechanic to every block there is in Minecraft. Subscribing only applies my mechanic to my blocks or am I wrong here?
  10. So in theory if I had an event that is triggered when a block's neighbor changes I can determine the heat transfer rate at a given tick for the block and with this way I can spare lot's of calculations. So I would need an event that triggers when a block is placed but not just for my blocks, for every block there is in minecraft. I'm searching for that function so I can implement my mechanic in it.
  11. And can you help me out with that?
  12. Dear Forge Community, I have an idea for a mod which implementation is a bit invasive and I have only c++ experience yet so I've came here to ask this question. (I know I should not program MC mods without java experience but in my opinion the seek for knowledge should not be refused under any circumstances and I'm turning to you guys hoping you would not reject it either.) The base idea is to implement heat and heat exchange and add this mechanic to the vanilla blocks of minecraft. My idea is to only calculate a blocks init heat if It's heat transfer rate is far enough from 0 in any direction. This would allow me to calculate efficiently and would not require me to store a new unsigned short for every block. Also I'm planning to use air as a block group with same heat unit at init. At least yet. The question is. I need to mixin into the chunk generation in order to catch the event block generated event and inject my code before return but I can not find any good documentation about this topic and I also can not find the block generated event function which I need to overwrite. Can you help me out with this? Every help is appreciated since I'm learning modding and java. Edit: typo
×
×
  • Create New...

Important Information

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