Jump to content

Recommended Posts

Posted (edited)

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

  Reveal hidden contents

PortalManager

  Reveal hidden contents

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 by link182
Posted (edited)
  On 8/9/2021 at 7:15 AM, 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.

 

Expand  

How do I use World capability? Could you give me a short example?

Edited by link182
Posted
  On 8/10/2021 at 6:48 AM, 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.

Expand  

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.

Posted
  On 8/11/2021 at 6:43 AM, diesieben07 said:

Which player and which world? There is not just one.

Expand  

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. 

Posted
  On 8/9/2021 at 6: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"? 

Expand  

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. 

Posted
  On 8/11/2021 at 6:37 PM, diesieben07 said:

Exactly... Dude what do you want from me?

Expand  

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. 

Posted
  On 8/11/2021 at 6:44 PM, 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.

Expand  

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? 

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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello all. I'm currently grappling with the updateShape method in a custom class extending Block.  My code currently looks like this: The conditionals in CheckState are there to switch blockstate properties, which is working fine, as it functions correctly every time in getStateForPlacement.  The problem I'm running into is that when I update a state, the blocks seem to call CheckState with the position of the block which was changed updated last.  If I build a wall I can see the same change propagate across. My question thus is this: is updateShape sending its return to the neighbouring block?  Is each block not independently executing the updateShape method, thus inserting its own current position?  The first statement appears to be true, and the second false (each block is not independently executing the method). I have tried to fix this by saving the block's own position to a variable myPos at inception, and then feeding this in as CheckState(myPos) but this causes a worse outcome, where all blocks take the update of the first modified block, rather than just their neighbour.  This raises more questions than it answers, obviously: how is a different instance's variable propagating here?  I also tried changing it so that CheckState did not take a BlockPos, but had myPos built into the body - same problem. I have previously looked at neighbourUpdate and onNeighbourUpdate, but could not find a way to get this to work at all.  One post on here about updatePostPlacement and other methods has proven itself long superceded.  All other sources on the net seem to be out of date. Many thanks in advance for any help you might offer me, it's been several days now of trying to get this work and several weeks of generally trying to get round this roadblock.  - Sandermall
    • sorry, I might be stupid, but how do I open it? because the only options I have are too X out, copy it, which doesn't work and send crash report, which doesn't show it to me, also, sorry for taking so long.
    • Can you reproduce this with version 55.0.21? A whole lot of plant placement issues were just fixed in this PR.
    • Necro'ing that thread to ask if you found a solution ? I'm encountering the same crash on loading the world. I created the world in Creative to test my MP, went into survival to test combat, died, crashed on respawn and since then crash on loading the world. Deactivating Oculus isn't fixing it either, and I don't have Optifine (Twilight forest is incompatible)
  • Topics

×
×
  • Create New...

Important Information

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