
ND0322
Members-
Posts
28 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
ND0322's Achievements

Tree Puncher (2/8)
0
Reputation
-
@SubscribeEvent public static void onAttachCapabilitiesPlayer(AttachCapabilitiesEvent<Entity> event){ if (event.getObject() instanceof Player) { if (!event.getObject().getCapability(CharmBagProvider.Handler).isPresent()) { event.addCapability(new ResourceLocation(truffleMod.MOD_ID, "charm_bag_cap"), new CharmBagProvider()); System.out.println("added"); } System.out.println("eventRan"); } } I have put two prints to check that the event is called and both are called
-
Woops I set it to private. I changed it now https://github.com/ND0322/Truffle-Mod
-
https://github.com/ND0322/Truffle-Mod/tree/main/main/java/com/ND0322/trufflemod
-
I also did register the events properly in the main mod class
-
I am looking to make a container that is opened through an item and has a seperate inventory for each player like an enderchest. I have created a capability to do this however it does not work. Here is the code: ItemStackHandler: public class CharmBagItemStackHandler extends ItemStackHandler implements CharmBagItemHandler { public int size; public CharmBagItemStackHandler(int size) { super(size); } public CharmBagItemStackHandler() { super(9); } public void copyFrom(CharmBagItemStackHandler source) { this.size = source.size; } } Capability provider(the code is a little messy): public class CharmBagProvider implements ICapabilityProvider, INBTSerializable<CompoundTag>{ public static Capability<CharmBagItemStackHandler> Handler = CapabilityManager.get(new CapabilityToken<>(){}); private CharmBagItemStackHandler inventory = new CharmBagItemStackHandler(9); private Player player; public static CharmBagItemStackHandler CHARMBAG = null; private LazyOptional<CharmBagItemHandler> lazyOptional = LazyOptional.of(() -> inventory); @Nonnull private CharmBagItemStackHandler createHandler() { if (CHARMBAG == null) { CHARMBAG = new CharmBagItemStackHandler(); } return CHARMBAG; } @Override public <T> LazyOptional<T> getCapability(Capability<T> cap, Direction side) { if (cap == Handler) { lazyOptional.cast(); } return LazyOptional.empty(); } @Override public CompoundTag serializeNBT() { return inventory.serializeNBT(); } @Override public void deserializeNBT(CompoundTag nbt) { inventory.deserializeNBT(nbt); } } Container: public class CharmsBagContainer extends AbstractContainerMenu{ private final ItemStack charmBag; private final Level level; // Client Constructor public CharmsBagContainer(int id, Inventory playerInv) { this(id, playerInv, playerInv.player.getMainHandItem()); } // Server constructor public CharmsBagContainer(int id, Inventory inventory, ItemStack item) { super(ContainerInit.CHARM_CONTAINER.get(), id); this.level = inventory.player.level; this.charmBag = item; Player player = inventory.player; System.out.println(player.getCapability(CharmBagProvider.Handler).isPresent()); player.getCapability(CharmBagProvider.Handler).ifPresent(handler -> { for(int i = 0; i < 3; ++i) { for(int j = 0; j < 3; ++j) { this.addSlot(new SlotItemHandler(handler, j + i * 3, 44 + j * 18, 16 + i * 18)); } } }); this.addPlayerHotbar(inventory); this.addPlayerInventory(inventory); } private void addPlayerInventory(Inventory inv){ for(int i = 0; i < 3; ++i) { for(int j = 0; j < 9; ++j) { this.addSlot(new Slot(inv, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } } private void addPlayerHotbar(Inventory inv){ for(int k = 0; k < 9; ++k) { this.addSlot(new Slot(inv, k, 8 + k * 18, 142)); } } @Override public ItemStack quickMoveStack(Player pPlayer, int pIndex) { ItemStack toReturn = ItemStack.EMPTY; Slot slot = this.getSlot(pIndex); if(slot != null && slot.hasItem()){ ItemStack stack = slot.getItem(); toReturn = stack.copy(); if(pIndex < 9){ if(!this.moveItemStackTo(stack, 9, this.slots.size(), true)){ return ItemStack.EMPTY; } }else if(!this.moveItemStackTo(stack, 0, 9, false)){ return ItemStack.EMPTY; } if(!stack.isEmpty()){ slot.set(ItemStack.EMPTY); }else{ slot.setChanged(); } } return toReturn; } @Override public boolean stillValid(Player player) { return player.getMainHandItem().is(this.charmBag.getItem()); } EventHandler: @SubscribeEvent public static void onAttachCapabilitiesPlayer(AttachCapabilitiesEvent<Entity> event){ if (event.getObject() instanceof Player) { if (!event.getObject().getCapability(MaxHealthProvider.MAX_HEALTH_CHANGER).isPresent()) { // The player does not already have this capability so we need to add the capability provider here event.addCapability(new ResourceLocation(truffleMod.MOD_ID, "max_health"), new MaxHealthProvider()); } } } @SubscribeEvent public static void onPlayerCloned(PlayerEvent.Clone event) { if (event.isWasDeath()) { // We need to copyFrom the capabilities event.getOriginal().getCapability(MaxHealthProvider.MAX_HEALTH_CHANGER).ifPresent(oldStore -> { event.getPlayer().getCapability(MaxHealthProvider.MAX_HEALTH_CHANGER).ifPresent(newStore -> { newStore.copyFrom(oldStore); }); }); } } @SubscribeEvent public static void onRegisterCapabilities(RegisterCapabilitiesEvent event) { event.register(MaxHealth.class); } } My issue is probably with attaching the capability as I print to show if the player has the capability and it prints false.
-
I am wondering how you make a healthbar that gets render over every entity. I want to make something like this: https://minecraft.curseforge.com/projects/neat
-
nvm i figured this out
-
I would like to disable vanilla critical hits
-
One more question: how do i run the CriticalHitEvent. It does not let me register it in the main mod class and when I just @SubscribeEvent in an event handler, it does not fire
-
Thanks! It works great.
-
I moved the EntityAttributeModification to another class and setup a listener in the main mod class but I get the same error public class EventHandler { @SubscribeEvent public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) { event.add(EntityType.PLAYER, modAttributes.CRIT_CHANCE.get()); } } public truffleMod() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); IEventBus eventBus = MinecraftForge.EVENT_BUS; ItemInit.ITEMS.register(bus); ModEffects.register(bus); modAttributes.ATTRIBUTES.register(bus); MinecraftForge.EVENT_BUS.register(this); eventBus.addListener(EventHandler::onEntityAttributeModificationEvent); }
-
I am making custom attributes for players in my mod but when I try to add a modifier to the player it crashes with the message "Cannot invoke "net.minecraft.world.entity.ai.attributes.AttributeInstance.addTransientModifier(net.minecraft.world.entity.ai.attributes.AttributeModifier)" because the return value of "net.minecraft.world.entity.player.Player.getAttribute(net.minecraft.world.entity.ai.attributes.Attribute)" is null". Main Mod Class: public truffleMod() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); ItemInit.ITEMS.register(bus); ModEffects.register(bus); MinecraftForge.EVENT_BUS.register(this); modAttributes.ATTRIBUTES.register(bus); } Attribute Registrey: package data.trufflemod.attributes; import java.util.UUID; import com.ND0322.trufflemod.truffleMod; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.RangedAttribute; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public class modAttributes { public static final DeferredRegister<Attribute> ATTRIBUTES = DeferredRegister.create(ForgeRegistries.ATTRIBUTES, truffleMod.MOD_ID); //ATTRIBUTES public static final RegistryObject<Attribute> CRIT_CHANCE = ATTRIBUTES.register("crit_chance", () -> (Attribute) new RangedAttribute(truffleMod.MOD_ID + ".playerCritChance", 4, 0, 100).setSyncable(true)); } EventHandler: @SubscribeEvent public static void onEntityAttributeModificationEvent(EntityAttributeModificationEvent event) { event.add(EntityType.PLAYER, modAttributes.CRIT_CHANCE.get()); } @SubscribeEvent public static void onEvent(EntityJoinWorldEvent event) { if ((event.getEntity() instanceof Player)) { Player player = (Player)event.getEntity(); AttributeModifier CRIT_CHANCE = new AttributeModifier(UUID.fromString("fb84a4dd-8592-48f7-8e47-911987651d42"), "damage modifier", stats.getDamageMultiplier(), AttributeModifier.Operation.MULTIPLY_TOTAL); player.getAttribute(modAttributes.CRIT_CHANCE.get()).addTransientModifier(CRIT_CHANCE); } } What might be causing this error?
-
Ok I moved it inside a method and now I dont crash
-
I only have one player.addEffect(). Should I move the effect instance to a different class or method inside the file?