Jump to content
  • Home
  • Files
  • Docs
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.16] Attach Capability to Chunks?
Currently Supported: 1.16.X (Latest) and 1.15.X (LTS)
Sign in to follow this  
Followers 0
kiou.23

[1.16] Attach Capability to Chunks?

By kiou.23, December 1, 2020 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

kiou.23    5

kiou.23

kiou.23    5

  • Creeper Killer
  • kiou.23
  • Members
  • 5
  • 157 posts
Posted December 1, 2020

Say I simply want to hold a single random Integer in each chunk, I know I can attach Capabilities to Chunks through the  AttachcapabilitiesEvent, but then I would need to create my own class that extends Capability<Integer>? Would I need to serialize the data to nbt for it to be saved? any tips on how I should go about doing this?

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2403

Draco18s

Draco18s    2403

  • Reality Controller
  • Draco18s
  • Members
  • 2403
  • 15926 posts
Posted December 1, 2020 (edited)

No, you would create your own class that implements MySavedIntegerStorage<MySavedIntegerInterface>

 

https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/farming/entities/capabilities/MilkStorage.java

Edited December 1, 2020 by Draco18s
  • Quote

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Share this post


Link to post
Share on other sites

kiou.23    5

kiou.23

kiou.23    5

  • Creeper Killer
  • kiou.23
  • Members
  • 5
  • 157 posts
Posted December 1, 2020
30 minutes ago, Draco18s said:

No, you would create your own class that implements MySavedIntegerStorage<MySavedIntegerInterface>

 

https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/farming/entities/capabilities/MilkStorage.java

Okay, like this?

public interface IChunkValue {

    int getValue();
    void setValue(int value);

}

 

public class ChunkValue implements IChunkValue {

    private int value;

    public ChunkValue(int value) {
        this.value = value;
    }

    @Override
    public int getValue() {
        return value;
    }

    @Override
    public void setValue(int value) {
        this.value = value;
    }
}

 

public class ChunkValueStorage implements Capability.IStorage<IChunkValue> {

    @Override
    public INBT writeNBT(Capability<IChunkValue> capability, IChunkValue instance, Direction side) {
        CompoundNBT nbt = new CompoundNBT();
        nbt.putInt("value", instance.getValue());
        return nbt;
    }

    @Override
    public void readNBT(Capability<IChunkValue> capability, IChunkValue instance, Direction side, INBT nbt) {
        instance.setValue(((CompoundNBT)nbt).getInt("value"));
    }

    public class Factory implements Callable<IChunkValue> {
        @Override
        public IChunkValue call() throws Exception {
            return new ChunkValue(0);
        }
    }
}

 

Now what?... I don't really get where to go after this

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2403

Draco18s

Draco18s    2403

  • Reality Controller
  • Draco18s
  • Members
  • 2403
  • 15926 posts
Posted December 1, 2020

https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/farming/FarmingBase.java#L86-L87

 

Pretty sure this hasn't changed.

  • Quote

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Share this post


Link to post
Share on other sites

kiou.23    5

kiou.23

kiou.23    5

  • Creeper Killer
  • kiou.23
  • Members
  • 5
  • 157 posts
Posted December 1, 2020
13 minutes ago, Draco18s said:

https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/farming/FarmingBase.java#L86-L87

 

Pretty sure this hasn't changed.

yeah, I did that, but I'm getting a bunch of NullPointerExceptions at this line:

    @Override
    public INBT serializeNBT() {
        return TutorialMod.CHUNK_VALUE_CAPABILITY.writeNBT(getCachedChunkValue(), null);
    }

 

I'm guessing that it's because I'm defining TutorialMod.CHUNK_VALUE_CAPABILITY as null, but I don't know what to do then

 

    @CapabilityInject(IChunkValue.class)
    public static final Capability<IChunkValue> CHUNK_VALUE_CAPABILITY = null;

 

should I initialise it as something else?

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2403

Draco18s

Draco18s    2403

  • Reality Controller
  • Draco18s
  • Members
  • 2403
  • 15926 posts
Posted December 1, 2020
1 minute ago, kiou.23 said:

should I initialise it as something else?

No, that's how its supposed to work. Forge injects the value to non-null at runtime.

You still need to register the capability.

https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/farming/FarmingBase.java#L189

  • Thanks 1
  • Quote

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Share this post


Link to post
Share on other sites

kiou.23    5

kiou.23

kiou.23    5

  • Creeper Killer
  • kiou.23
  • Members
  • 5
  • 157 posts
Posted December 1, 2020 (edited)
22 minutes ago, Draco18s said:

No, that's how its supposed to work. Forge injects the value to non-null at runtime.

You still need to register the capability.

https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/farming/FarmingBase.java#L189

OHH that is what I was missing, thanks!

just a final question tho, why do I need an interface? if it's only going to be implemented once, why can't I just reference the class (in this case, ChunkValue)?

Edited December 1, 2020 by kiou.23
  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2403

Draco18s

Draco18s    2403

  • Reality Controller
  • Draco18s
  • Members
  • 2403
  • 15926 posts
Posted December 1, 2020

Because of how Capabilities work.

  • Quote

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Share this post


Link to post
Share on other sites

vemerion    56

vemerion

vemerion    56

  • Creeper Killer
  • vemerion
  • Members
  • 56
  • 220 posts
Posted December 1, 2020
1 hour ago, kiou.23 said:

just a final question tho, why do I need an interface? if it's only going to be implemented once, why can't I just reference the class (in this case, ChunkValue)?

You don't need an interface, you could use the ChunkValue class only, without an interface.

  • Thanks 1
  • Quote

Share this post


Link to post
Share on other sites

kiou.23    5

kiou.23

kiou.23    5

  • Creeper Killer
  • kiou.23
  • Members
  • 5
  • 157 posts
Posted December 1, 2020
12 hours ago, Draco18s said:

Because of how Capabilities work.

 

11 hours ago, vemerion said:

You don't need an interface, you could use the ChunkValue class only, without an interface.

 

who do I trust?

  • Quote

Share this post


Link to post
Share on other sites

diesieben07    7595

diesieben07

diesieben07    7595

  • Reality Controller
  • diesieben07
  • Forum Team
  • 7595
  • 55077 posts
Posted December 1, 2020
2 minutes ago, kiou.23 said:

who do I trust?

vemerion is right

  • Like 1
  • Quote

Share this post


Link to post
Share on other sites

desht    91

desht

desht    91

  • Creeper Killer
  • desht
  • Members
  • 91
  • 244 posts
Posted December 2, 2020

Expanding on this:

  • If you intend for your capability to ever be used by other mods (i.e. you're making it part of your mod's API) then using an interface is very strongly advised, simply as good programming practice (expose the interface, not the implementation).
  • If you only ever intend for your capability to be used for storing data for your own purposes, an interface is very much optional.  You might decide it's useful to have one, just for tidiness in your own code, but then again you're free just to use a class.

 

  • Like 1
  • Thanks 1
  • Quote

Share this post


Link to post
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

    • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 0
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • diesieben07
      [1.16.4] what difference between custom slots and EquipmentSlotType

      By diesieben07 · Posted 3 minutes ago

      Call getCapability.
    • Klarks
      [1.16.4] what difference between custom slots and EquipmentSlotType

      By Klarks · Posted 19 minutes ago

      I dont understand how i can get them from my class
    • diesieben07
      [1.16.4] what difference between custom slots and EquipmentSlotType

      By diesieben07 · Posted 24 minutes ago

      Yes, exactly.
    • Klarks
      [1.16.4] what difference between custom slots and EquipmentSlotType

      By Klarks · Posted 34 minutes ago

      those handlers ? public <T> net.minecraftforge.common.util.LazyOptional<T> getCapability(net.minecraftforge.common.capabilities.Capability<T> capability, @Nullable Direction facing) { if (this.isAlive() && capability == net.minecraftforge.items.CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { if (facing == null) return handlers[2].cast(); else if (facing.getAxis().isVertical()) return handlers[0].cast(); else if (facing.getAxis().isHorizontal()) return handlers[1].cast(); } return super.getCapability(capability, facing); }  
    • diesieben07
      [1.16.4] what difference between custom slots and EquipmentSlotType

      By diesieben07 · Posted 38 minutes ago

      No, that is your IItemHandler. You need to look at LivingEntity - it already has these inventories.
  • Topics

    • Klarks
      9
      [1.16.4] what difference between custom slots and EquipmentSlotType

      By Klarks
      Started 4 hours ago

    • Fars3O_
      1
      Minecraft forge not fully loading

      By Fars3O_
      Started 4 hours ago

    • BastouP
      3
      [1.16.4] Get Overworld save directory

      By BastouP
      Started 14 hours ago

    • Woodside
      15
      [1.15.2] Render as 2D icon in GUI, 3D model in hand

      By Woodside
      Started Sunday at 08:26 PM

    • CatSack
      1
      Forge unable to find model

      By CatSack
      Started 12 hours ago

  • Who's Online (See full list)

    • WildHeart
    • diesieben07
    • FreshMod
    • desht
    • Wintersky20
    • Terestriel
    • Klarks
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • [1.16] Attach Capability to Chunks?
  • Theme

Copyright © 2019 ForgeDevelopment LLC · Ads by Longitude Ads LLC Powered by Invision Community