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

[1.12.2][SOLVED!] Capabilities and networking


MCrafterzz
 Share

Recommended Posts

I do admit the isRemote thing was very dumb. I do return success tho. This is the end of the code (It's not the whole code):

 

if (axisalignedbb != Block.NULL_AABB && worldIn.checkNoEntityCollision(axisalignedbb.offset(blockpos))
     && worldIn.setBlockState(blockpos, iblockstate1, 10)) {
    SoundType soundtype = this.block.getSoundType(iblockstate1, worldIn, blockpos, player);
    worldIn.playSound(player, blockpos, soundtype.getPlaceSound(), SoundCategory.BLOCKS,
      (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F);
    if (player instanceof EntityPlayerMP) {
     CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP) player, blockpos, itemstack);
    }
    itemstack.shrink(amount);
    return EnumActionResult.SUCCESS;
   }
 
EDIT:
printing out "PLACED" with my debugger prints this:
[16:27:31] [main/WARN] [ml]: PLACED
[16:27:31] [Server thread/WARN] [ml]: PLACED
 
Why aren't those two messages the same?
Edited by MCrafterzz
Link to comment
Share on other sites

It works like snow layers so you can build apon the block. Also I added the ability to place a four layers at the same time when clicking + CTRL. It's just so wierd as it is based on ItemBlockSnow but randomly workes differently (triggers two times instead of one). Here's the full code:

https://pastebin.com/fys1Mb4G

Edited by MCrafterzz
Link to comment
Share on other sites

I guess I'll have to look into that. The block setting methoud is the same as the vanilla itemblock tho so what do you mean with only place it on the server? Also I still don't understand the reasoning for it triggering twice as the canplayeredit methoud should prevent it.

 

Is there any easier way to detect the press of CTRL without using packets?

Edited by MCrafterzz
Link to comment
Share on other sites

Seems vanilla's ItemBlock actually does the placement on the client as well, very strange. At this point I suspect it triggering twice is not actually the two hands but server and client. Did you check which thread is calling the method?

 

10 minutes ago, MCrafterzz said:

Is there any easier way to detect the press of CTRL without using packets?

No, the server has no idea about the client's keyboard. The server may be located on the other side of the globe, the only way to communicate with it is packets.

And nothing about packets is hard.

Link to comment
Share on other sites

3 hours ago, MCrafterzz said:

Is there any easier way to detect the press of CTRL without using packets?

Isn't CTRL the key used to sneak?
Check if the player is sneaking.

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.

Link to comment
Share on other sites

You might be right. I haven't actually played in a while.

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.

Link to comment
Share on other sites

2 minutes ago, MCrafterzz said:

It still activates twice even tho I use worldIn.isRemote = false

If vanilla does not have the isRemote check, you do not need it either. It will active twice then, that is to be expected.

Please give more information about where these two activations are coming from (use the debugger): What hand? What logical side?

Link to comment
Share on other sites

Changing stuff eventually got it to work so now I just have to get the packages setup. Here is what I have so far:

public class KeybindMessage implements IMessage {

	private boolean keybindDown;

	public KeybindMessage(boolean keybindDown) {
		this.keybindDown = keybindDown;
	}

	@Override
	public void fromBytes(ByteBuf buf) {
		buf.readBoolean();
	}

	@Override
	public void toBytes(ByteBuf buf) {
		buf.writeBoolean(keybindDown);
	}

}
public class KeybindMessageHandler implements IMessageHandler<KeybindMessage, IMessage> {

	@Override
	public IMessage onMessage(KeybindMessage message, MessageContext ctx) {
		return null;
	}

}

What should be in the onMessage methoud?

Main class (some stuff has been removed)

@Mod(modid = "ml", name = "More Layers", version = "1.1.0", acceptedMinecraftVersions = "1.12,1.12.1,1.12.2")
@EventBusSubscriber
public class Main {

	public static final SimpleNetworkWrapper networkInstance = NetworkRegistry.INSTANCE.newSimpleChannel("ml");

	@EventHandler
	public static void preInit(FMLPreInitializationEvent event) {
		networkInstance.registerMessage(KeybindMessageHandler.class, KeybindMessage.class, 0, Side.SERVER);
	}

}

I know that I should call Main.networkInstance.sendToServer but where should I call this and how should I get the result?

 

Link to comment
Share on other sites

2 hours ago, MCrafterzz said:

Bump

No.

 

  • Your IMessage classes must have a public no-parameters constructor.
  • You need to remember on the server for each player whether they are currently pressing the button or not. You can do this using capabilities.
  • When the packet arrives, you store the current state in the player's capability.
  • In your ItemBlock you can then access the capability of the player placing the block.
  • "ml" is a terrible mod ID (and network channel). It should be "morelayers".
  • Thanks 1
Link to comment
Share on other sites

I think I got it working but where should I call the capability to update it? Is there a key press event?:

KeybindInterface keybindInterface = event.getEntityPlayer().getCapability(KeybindProvider.capability, event.getFace());
  keybindInterface.setKeybindDown(Minecraft.getMinecraft().gameSettings.keyBindSprint.isKeyDown());

Edited by MCrafterzz
Link to comment
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.
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

    • Hi guys! I currently have a project that I've been developing in a 'vanilla' environment that I'm actually looking to transfer over to Forge, simply because of how much better the experience would be using Forge. Before starting on this Forge mod, I was planning ahead and was looking at options for proxies, of which I would greatly like to use Velocity. In their docs and by asking around their Discord, they don't support support versions of Forge of 1.13 or later because of changes in the "handshake protocol". But I also really don't want to use an unsupported version of Forge, such as 1.12.2, to be able to use a proxy. I was pointed in the direction of potentially making my own client-side mod to allow Forge to be compatible with an updated proxy, such as Velocity. When asking for a direction for achieving this, I was told to have a look at how the Forge server implements logins and that the discrepancy might be with how modified the handshake protocol is. This sounds like quite the challenge to me and I'm completely up for trying to accomplish it. So for the sake of planning ahead and having a rough idea of how I could accomplish that when the time comes to work on it, has anyone else had experience with trying to achieve this? I appreciate any help or direction offered! Thanks! 
    • Been trying to set up a server for myself and a few friends through BisectHosting. I ended up replicating the server on my own computer to see if the issue persisted (if it was on bisect's end) and it was still there. Every time a player tries to connect to the server they start connecting but after only around 2 seconds the player is disconnected with the error message Payload size exceeds 1048576 bytes.  Upon inspection of the server debug file, the player always disconnects while fmlhandshake ticking packet info is being sent, and I have repeatedly made sure the mods and their configs are identical. I tried to get RandomPatches to increase the max allowed byte size, as the default seems to be 32767, but either something is wrong with it or some other mod is limiting the packet size limit.     Server Debug: https://pastebin.com/xZLbtdQB (only includes portions from after the server launched as I couldn't upload the whole file) Server Log: https://pastebin.com/yrJ3tNaW (similarly only after server launched (hence the weird say commands) Client Log: https://pastebin.com/inSzZV96 (whole thing for once) Modlist: https://pastebin.com/Qvurg45j (All but Optifine and BetterFoliage are present on the server as they have caused issues during startup)   Honestly stumped on how to fix this, been working on it for 10 hours across two days to no avail.
    • quiero dormir uwu
    • Hi, mod called "charging gadgets" is crushing forge minecraft 1.18.1 when i place block from this mod, im temporary playing On 1.18 cuz its not happening on 1.18 but c'mon, pls fix it, 1.18.1 is better and I Wonder i could use this version
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.