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

Get Item held by cursor in 1.17.1+


Danny and Son
 Share

Recommended Posts

Thank you! I did notice AbstractContainerMenu#getCarried and was able use that.

Sorry, I am maintaining my mods in 1.16.5, 1.17.1 and 1.18 right now, and I just noticed that PlayerInventory#getItemStack does indeed exist in 1.16.5 but not 1.17.1 which doesn't have PlayerInventory at all, just Inventory which does not have getItemStack.

My title should have said 1.17.1+. Sorry for the confusion.

Link to comment
Share on other sites

4 hours ago, diesieben07 said:

1.17 uses Mojang names, not MCP names.

Good to know, so is there a PlayerInventory#getItemStack equivalent in the Mojang mappings, or is AbstractContainerMenu#getCarried the way to go?

I don't actually need to know at this point, and I'm not sure of any scenario where you'd need it and not have a container menu available. I'm just curious and also wondering for the benefit of someone else with the same question who finds this post.

Link to comment
Share on other sites

  • Danny and Son changed the title to Get Item held by cursor in 1.17.1+

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
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.

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I'm trying to sync player capabilities from server to client using packets. I've researched about this topic a lot, but man is it confusing. I'm trying to update the players data on the client side when the player logs in, respawns, and when they change dimension. I also do so with the event StartTracking. Here are those events: @SubscribeEvent public void onPlayerTracking(PlayerEvent.StartTracking event) { if(event.getTarget() instanceof PlayerEntity) { PlayerEntity player = (PlayerEntity)event.getTarget(); ServerPlayerEntity target = (ServerPlayerEntity)event.getPlayer(); if(!player.getCommandSenderWorld().isClientSide()) { player.getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY).ifPresent(capability -> { CompoundNBT nbt = new CompoundNBT(); Capability<ITitanShifters> cap = TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY; Capability.IStorage<ITitanShifters> storage = cap.getStorage(); nbt.put(cap.getName(), storage.writeNBT(cap, capability, TitanShiftersMod.direction)); ClientMessage message = new ClientMessage(nbt); TitanShiftersNetwork.CLIENTCHANNEL.send(PacketDistributor.PLAYER.with(() -> target), message); }); } } } @SubscribeEvent public void onPlayerLogin(PlayerLoggedInEvent event) { ServerPlayerEntity player = (ServerPlayerEntity)event.getPlayer(); if(!player.getCommandSenderWorld().isClientSide()) { player.getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY).ifPresent(capability -> { CompoundNBT nbt = new CompoundNBT(); Capability<ITitanShifters> cap = TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY; Capability.IStorage<ITitanShifters> storage = cap.getStorage(); nbt.put(cap.getName(), storage.writeNBT(cap, capability, TitanShiftersMod.direction)); ClientMessage message = new ClientMessage(nbt); TitanShiftersNetwork.CLIENTCHANNEL.send(PacketDistributor.PLAYER.with(() -> player), message); }); } } @SubscribeEvent public void onPlayerRespawn(PlayerRespawnEvent event) { ServerPlayerEntity player = (ServerPlayerEntity)event.getPlayer(); if(!player.getCommandSenderWorld().isClientSide()) { player.getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY).ifPresent(capability -> { CompoundNBT nbt = new CompoundNBT(); Capability<ITitanShifters> cap = TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY; Capability.IStorage<ITitanShifters> storage = cap.getStorage(); nbt.put(cap.getName(), storage.writeNBT(cap, capability, TitanShiftersMod.direction)); ClientMessage message = new ClientMessage(nbt); TitanShiftersNetwork.CLIENTCHANNEL.send(PacketDistributor.PLAYER.with(() -> player), message); }); } } @SubscribeEvent public void onPlayerChangeDimension(PlayerChangedDimensionEvent event) { ServerPlayerEntity player = (ServerPlayerEntity)event.getPlayer(); if(!player.getCommandSenderWorld().isClientSide()) { player.getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY).ifPresent(capability -> { CompoundNBT nbt = new CompoundNBT(); Capability<ITitanShifters> cap = TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY; Capability.IStorage<ITitanShifters> storage = cap.getStorage(); nbt.put(cap.getName(), storage.writeNBT(cap, capability, TitanShiftersMod.direction)); ClientMessage message = new ClientMessage(nbt); TitanShiftersNetwork.CLIENTCHANNEL.send(PacketDistributor.PLAYER.with(() -> player), message); }); } } Here is the packet I am sending: public class ClientMessage { private CompoundNBT data; public ClientMessage(CompoundNBT d) { data = d; } public static void encode(ClientMessage message, PacketBuffer buffer) { buffer.writeNbt(message.data); } public static ClientMessage decode(PacketBuffer buffer) { return new ClientMessage(buffer.readNbt()); } public static void handle(ClientMessage message, Supplier<NetworkEvent.Context> supplier) { NetworkEvent.Context context = supplier.get(); context.enqueueWork(() -> { if(context.getDirection().getReceptionSide().isClient() && context.getDirection().getOriginationSide().isServer()) { @SuppressWarnings("resource") ClientPlayerEntity p = Minecraft.getInstance().player; p.getEntity().getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY).ifPresent(capability -> { Capability.IStorage<ITitanShifters> storage = TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY.getStorage(); storage.readNBT(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY, capability, TitanShiftersMod.direction, message.data); }); } }); context.setPacketHandled(true); } } Here is my network class: (I made two networks for sending packets to server and to client) public class TitanShiftersNetwork { private static int id = 0; public static final String NETWORK_VERSION = "0.1.0"; private static ResourceLocation loc = new ResourceLocation(TitanShiftersMod.MOD_ID, "network"); private static ResourceLocation Clientloc = new ResourceLocation(TitanShiftersMod.MOD_ID, "networkclient"); public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel(loc, () -> NETWORK_VERSION, version -> version.equals(NETWORK_VERSION), version -> version.equals(NETWORK_VERSION)); public static final SimpleChannel CLIENTCHANNEL = NetworkRegistry.ChannelBuilder.named(Clientloc).clientAcceptedVersions(s -> Objects.equals(s, "1")) .serverAcceptedVersions(s -> Objects.equals(s, "1")).networkProtocolVersion(() -> "1").simpleChannel(); public static void init() { CHANNEL.registerMessage(0, InputMessage.class, InputMessage::encode, InputMessage::decode, InputMessage::handle); CLIENTCHANNEL.messageBuilder(ClientMessage.class, id++).decoder(ClientMessage::decode).encoder(ClientMessage::encode).consumer(ClientMessage::handle).add(); } } Here is where the Init() method is being called: @SubscribeEvent public void commonSetup(final FMLCommonSetupEvent event) { TitanShiftersNetwork.init(); } And here is where I am trying to update the data on the client side: public static void InheritAttack(PlayerEntity player) { LazyOptional<ITitanShifters> titan = player.getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY, TitanShiftersMod.direction); ITitanShifters titanShifter = titan.orElse(new TitanShifters()); TitanShiftersStats.setAttackTitan(true, player); pureUnshift(player); System.out.println(player.getScoreboardName() + " is pure titan: " + titanShifter.getPureTitan().toString()); ServerPlayerEntity p = (ServerPlayerEntity)player; if(!p.getCommandSenderWorld().isClientSide()) { p.getCapability(TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY).ifPresent(capability -> { CompoundNBT nbt = new CompoundNBT(); Capability<ITitanShifters> cap = TitanShiftersProvider.TITAN_SHIFTERS_CAPABILITY; Capability.IStorage<ITitanShifters> storage = cap.getStorage(); nbt.put(cap.getName(), storage.writeNBT(cap, capability, TitanShiftersMod.direction)); ClientMessage message = new ClientMessage(nbt); TitanShiftersNetwork.CLIENTCHANNEL.send(PacketDistributor.TRACKING_ENTITY_AND_SELF.with(() -> p), message); }); } System.out.println(player.getScoreboardName() + " has inherited the attack titan!"); } Rest of the code is here: https://github.com/TheDerpyParagon/TitanShiftersMod Any help is much appreciated!
    • When I downloaded forge and installed the client version it didn't make a extension so I went to the extension tab and tried to find it but it wasn't there I tried to download previous versions of it but they don't make an extension if someone could help that would be nice!
    • al instalar forge versión 1.18.2 (40.1.0) arroja un error: Failed to download version manifest, can not find client jar URL. que debería hacer?
    • I can now!!!! Thank you so much! I did what you say of putting more time to join and i delete cache (just in case) and i can now, thank you so much 😭
    • Oh thanks, this seems promising ill try and do that.
  • Topics

×
×
  • Create New...

Important Information

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