Posted August 9, 20214 yr Hello, I am making a mod that uses the commands from another mod to create portals. That mod is in a state of disrepair environment wise, so I'm not able to use its code, that's why I have to use commands. So essentially what I'm trying to make is a glorified command stick. I have a few question regarding the design. The relevant code snippets can be find below. This code works in a single player world, but, while I haven't tested it there yet, I don't think it would work in a multiplayer one, even if I tweak the whole "!worldIn.isRemote" part. 1. You can see I create a PortalManager when the item is used. Obviously this is not ideal. For example, if I reload a world where I've created portals, I am creating a new PM that doesn't know about them. The problem is I need the "playerIn" object provided by "onItemRightClick" to create the CommandSource and Commands objects. I've tried using "Minecract.getInstance().getServer()", but that returns "null". Ideally, I would want to make PM outside of all this so I can initialize it with stuff from an existing world with portals in it. So basically, how can I get a CommandSource and a Commands object without the "playerIn" from "onItemRightClick"? 2. Sort of related to 1. What tweaks would I have to make in order for this to work on a dedicated server as well as single player world? I don't think I have to worry about packets as the commands from the mod I'm using already take care of spawning entities and what not. Should the commands be executed on the server instead of the client? I don't have a good understanding of which side should execute what. PortalGunItem Spoiler public class PortalGunItem extends Item { ... PortalManager pm; @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { if (!worldIn.isRemote) if (pm != null) pm = new PortalManager(playerIn); } } PortalManager Spoiler public class PortalManager { private final PortalCommands portalCommands; private final CommandSource commandSource; private final Commands commandManager; public PortalManager(Entity playerIn) { this.commandSource = playerIn.getServer().getCommandSource().withPermissionLevel(2) .withEntity(playerIn) .withFeedbackDisabled(), this.commandManager = playerIn.getServer().getCommandManager()); this.PORTAL_1_ID = "portal_1_" + playerIn.getUniqueID(); this.PORTAL_2_ID = "portal_2_" + playerIn.getUniqueID(); } } Thank you very much for the help, it is greatly appreciated. Please let me know if you need to see more code in order to help me. I have a pretty functional od already, but didn't want to flood this post with all the code obviously. Edited August 9, 20214 yr by link182
August 10, 20214 yr Author 17 hours ago, diesieben07 said: Re 1: Use a World capability. Re 2: If you coded things correctly, nothing. Single player has basically the same architecture as playing on a MP server, as it runs an integrated server. How do I use World capability? Could you give me a short example? Edited August 10, 20214 yr by link182
August 10, 20214 yr Author Can I get some slightly more detailed help please? @diesieben07's answer was not exactly what I was looking for.
August 10, 20214 yr 4 hours ago, link182 said: How do I use World capability? Could you give me a short example? https://mcforge.readthedocs.io/en/1.13.x/datastorage/capabilities/
August 10, 20214 yr Author 11 minutes ago, loordgek said: https://mcforge.readthedocs.io/en/1.13.x/datastorage/capabilities/ I know how to google. I was hoping someone could explain to me how this relates to commands and how to get a command manager using this.
August 10, 20214 yr Author 14 hours ago, diesieben07 said: This is what using a World capability will fix. It allows you to attach additional data to a world, optionally even persisting it through world unloads. Still not sure I understand. How can I get the world and player without it coming through itemRightClicked? Again, I would appreciate an actual example of this stuff working.
August 11, 20214 yr Author 11 hours ago, diesieben07 said: Which player and which world? There is not just one. The player using the item and the world he's playing in. No offense and I'm really not trying to be rude here, but I feel like this a pretty good question that deserves some better answers and engagement than what it's been given. I think you can intuit which world and which player I'm talking about. You don't need to try to hit me with a gotcha question. I would really appreciate some help on this with some actual examples that I can use. Considering there is almost no documentation on this stuff, I don't think that's too much to ask.
August 11, 20214 yr Author On 8/9/2021 at 2:08 AM, link182 said: Ideally, I would want to make PM outside of all this so I can initialize it with stuff from an existing world with portals in it. So basically, how can I get a CommandSource and a Commands object without the "playerIn" from "onItemRightClick"? The Portal Manager takes in a CommandSource and a Commands object. How do I get these without the Item method? I can't use world and player from the item method because then the player would first have to use the item before the portal manager knows anything about the world. I think it's made pretty clear in my question.
August 11, 20214 yr Author 9 minutes ago, diesieben07 said: Honestly I have no idea what your actual issue is. If you don't know what the issue is, why not ask for clarification?
August 11, 20214 yr Author Just now, diesieben07 said: I ... did? Then I told you and you said you have no idea what my issue was
August 11, 20214 yr Author Just now, diesieben07 said: Exactly... Dude what do you want from me? That was before you said you had no idea what I was talking about...so clearly you still didn't understand and yet you didn't ask for more clarification so you could actually help.
August 11, 20214 yr Author 1 minute ago, diesieben07 said: Originally I thought I knew exactly what you wanted. Then you asked about how to get the player and then I no longer knew, so I asked. I'll ask the question again. Differently this time. I would like to initialize the PM outside of the item method. It requires a CommandSource, a Commands object, and the player. Right now, these are gotten from the player in the item method. How can I accomplish this without using the item method?
August 11, 20214 yr Author 1 minute ago, diesieben07 said: How do I get the player though? Can you please give me an example of how to do this?
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.