Jump to content

Recommended Posts

Posted

You'll also need to show your updated IRecipe code.

 

Btw, you registered your properties twice in onEntityConstructing - you only need the first one, because it does exactly what the second one does:

if (event.entity instanceof EntityPlayer && EntityPlayerExtended.get((EntityPlayer) event.entity) == null){
EntityPlayerExtended.register((EntityPlayer) event.entity);
}

// the following is totally unnecessary, as it does exactly what was just done above
/*
if (event.entity instanceof EntityPlayer && event.entity.getExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME) == null){
event.entity.registerExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME, new EntityPlayerExtended((EntityPlayer) event.entity));
}
*/

 

That's the second time today I've seen that exact same code - any particular reason people are duplicating it?

Its because they copied it from your tutorial. cheesy.gif

Copied, yet took the time to remove the comments which clearly say that it is not needed. I suppose that's what I get for expecting people to READ.

Posted

You'll also need to show your updated IRecipe code.

 

Btw, you registered your properties twice in onEntityConstructing - you only need the first one, because it does exactly what the second one does:

if (event.entity instanceof EntityPlayer && EntityPlayerExtended.get((EntityPlayer) event.entity) == null){
EntityPlayerExtended.register((EntityPlayer) event.entity);
}

// the following is totally unnecessary, as it does exactly what was just done above
/*
if (event.entity instanceof EntityPlayer && event.entity.getExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME) == null){
event.entity.registerExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME, new EntityPlayerExtended((EntityPlayer) event.entity));
}
*/

 

That's the second time today I've seen that exact same code - any particular reason people are duplicating it?

Its because they copied it from your tutorial. cheesy.gif

Copied, yet took the time to remove the comments which clearly say that it is not needed. I suppose that's what I get for expecting people to READ.

LOOOOOLLLLLLL cheesy.gifcheesy.gifcheesy.gifcheesy.gif

Some people...

But I mean you should try and not put stuff like that also in the tutorial text..

 

EDIT: You did put in your text!

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

You'll also need to show your updated IRecipe code.

 

Btw, you registered your properties twice in onEntityConstructing - you only need the first one, because it does exactly what the second one does:

if (event.entity instanceof EntityPlayer && EntityPlayerExtended.get((EntityPlayer) event.entity) == null){
EntityPlayerExtended.register((EntityPlayer) event.entity);
}

// the following is totally unnecessary, as it does exactly what was just done above
/*
if (event.entity instanceof EntityPlayer && event.entity.getExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME) == null){
event.entity.registerExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME, new EntityPlayerExtended((EntityPlayer) event.entity));
}
*/

 

That's the second time today I've seen that exact same code - any particular reason people are duplicating it?

Its because they copied it from your tutorial. cheesy.gif

Copied, yet took the time to remove the comments which clearly say that it is not needed. I suppose that's what I get for expecting people to READ.

Sorry, I literally just glanced at them.

Posted

I give up. Just use this code:

 

Ok, that was impressive.  Someone managed to out-stupid diesieben07's patience.

I don't know whether to be offended or appalled? Probably a bit of both.

Posted

Ok. Now you will need packets to sync the data in your IExtendedEntityProperties so that the client knows about it so the crafting recipe can work properly there.

 

Ok, so i've set up the packet handler's but I cannot figure out how to get a message from the server to the client. Whenever I do it is trying to cast the Server message to the Client message which are apparently different? I honestly have no idea how packets work anymore, last time I used them was back in 1.5.2.

 

I should also mention that is is being fired every time the player gains xp, a level, or the data is being loaded. This is just to make sure that the client recieves all of the data needed.

 

The item code that sends the data

@Override
public void onCreated(ItemStack is, World world, EntityPlayer player){
	super.onCreated(is, world, player);
	EntityPlayerExtended playerEXT = EntityPlayerExtended.get(player);
	if(!world.isRemote){
		playerEXT.addMagicXP(this.xpGiven);
		player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "+" + this.xpGiven + EnumChatFormatting.GOLD + " to Magic! Only " + playerEXT.getRemainingXpToLevel() + " to go!"));
		player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Total XP: " + EnumChatFormatting.GOLD + playerEXT.getMagicXP()));
	}
}

My sync method to send the packet. (This is called inside of EntityPlayerExtended)

	
public void sync(){
    	if(!this.player.worldObj.isRemote){
    		RunesOfAltura.network.sendTo(new ServerPacketManager(this.magicXP + ":" + this.magicLevel), (EntityPlayerMP)player);
    	}
}

 

My packet manager code(It is relatively the same for both client and server with minor exceptions)

package com.Cyphereion.RunesOfAltura.Manager;

import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;

public class ClientPacketManager implements IMessage {
    
    private String text;

    public ClientPacketManager() { }

    public ClientPacketManager(String text) {
        this.text = text;
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        text = ByteBufUtils.readUTF8String(buf);
    }

    @Override
    public void toBytes(ByteBuf buf) {
        ByteBufUtils.writeUTF8String(buf, text);
    }

    public static class Handler implements IMessageHandler<ClientPacketManager, IMessage> {
        
        @Override
        public IMessage onMessage(ClientPacketManager message, MessageContext ctx){
            System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName()));
            return null;
        }
    }
}

 

My registry for them

	network = NetworkRegistry.INSTANCE.newSimpleChannel(RunesOfAltura.MODID);
	network.registerMessage(ServerPacketManager.Handler.class, ServerPacketManager.class, 0, Side.SERVER);
	network.registerMessage(ClientPacketManager.Handler.class, ClientPacketManager.class, 0, Side.CLIENT);

Posted

What... why...

Why are you sending a String? You want to send 2 numbers. So...send 2 numbers.

 

Well like I said, I am still confused as to how this new packet system works. Used to I would create one packet and then send the data but with this it looks like I would have to create two packets. I really don't know much of what's going on here. I've looked at your tutorial but you didn't really go far into depth on it.

Posted

You don't need two packets for this. You just make a packet for well... every type of packet you send.

This is the "update client IEEP data" packet.

Then you could have a lets say... "client pressed a gui button" packet.

 

It's really not hard.

 

I still don't understand what your getting at. Forget that the packet is a String, that shouldn't hurt anything. How could I fix the issue with the client not able receive it properly?

This is error it gives me, I don't understand what is happening here.

java.lang.ClassCastException: net.minecraft.client.network.NetHandlerPlayClient cannot be cast to net.minecraft.network.NetHandlerPlayServer
at cpw.mods.fml.common.network.simpleimpl.MessageContext.getServerHandler(MessageContext.java:36) ~[MessageContext.class:?]
at com.Cyphereion.RunesOfAltura.Manager.ClientPacketManager$Handler.onMessage(ClientPacketManager.java:33) ~[ClientPacketManager$Handler.class:?]
at com.Cyphereion.RunesOfAltura.Manager.ClientPacketManager$Handler.onMessage(ClientPacketManager.java:1) ~[ClientPacketManager$Handler.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:37) ~[simpleChannelHandlerWrapper.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:17) ~[simpleChannelHandlerWrapper.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:98) ~[simpleChannelInboundHandler.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[DefaultChannelHandlerContext.class:?]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[MessageToMessageDecoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) ~[DefaultChannelPipeline.class:?]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:?]
at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
at net.minecraft.client.multiplayer.PlayerControllerMP.updateController(PlayerControllerMP.java:317) [PlayerControllerMP.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1682) [Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1028) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:951) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_25]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_25]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_25]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_25]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.11.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.11.jar:?]
at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:78) [start/:?]
at GradleStart.main(GradleStart.java:45) [start/:?]

Posted

You used getServerHanlder on the client. That obviously does not work.

 

I see what your talking about but how would I fix that? Like I said, packets are not what they used to be.

Posted

Fix what... You just cannot access the server handler on the client. It's impossible.

 

I don't understand... i'm not accessing it from the client. I have went out of my way to set up two completely different packet handlers, one for the server, one for the client. What am I doing wrong?

 

If you are talking about where I did this:

    RunesOfAltura.network.sendTo(new ServerPacketManager(this.magicXP + ":" + this.magicLevel), (EntityPlayerMP)player);

then I have no idea what's wrong there, I changed it to ClientPacketManager and it didn't change a thing.

 

EDIT: I went through EVERY piece of code I have, and finally found what you were talking about. I changed ctx.getServerHandler().playerEntity.getDisplayName() to ctx.getClientHandler() but now I cannot get the player for the client. How would I get it so that I can update the data for it?

Posted

You can tell when people really start to get on diesieben's nerves.

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

The client only ever has one player: Minecraft#thePlayer.

 

Wow, that took AGES. Thank you for being so patient with me, it tends to take a crap-ton of explaining but I will get it eventually!

Posted

Show your ClientPacketManager class.

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.

Posted

Show your ClientPacketManager class.

 

I've fixed everything now but here you go.

 

package com.Cyphereion.RunesOfAltura.Manager;

import net.minecraft.client.Minecraft;

import com.Cyphereion.RunesOfAltura.RunesOfAltura;
import com.Cyphereion.RunesOfAltura.Data.EntityPlayerExtended;

import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.ByteBufUtils;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;

public class ClientPacketManager implements IMessage {
    
    private String text;
    private static LogManager log = RunesOfAltura.instance.log;

    public ClientPacketManager() { }

    public ClientPacketManager(String text) {
        this.text = text;
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        text = ByteBufUtils.readUTF8String(buf);
    }

    @Override
    public void toBytes(ByteBuf buf) {
        ByteBufUtils.writeUTF8String(buf, text);
    }

    public static class Handler implements IMessageHandler<ClientPacketManager, IMessage> {      
        @Override
        public IMessage onMessage(ClientPacketManager message, MessageContext ctx){
        	String[] args = message.text.split(":");
        	EntityPlayerExtended player = EntityPlayerExtended.get(Minecraft.getMinecraft().thePlayer);
        	player.magicXP = Integer.parseInt(args[0]);
        	player.magicLevel = Integer.parseInt(args[1]);
        	log.debug(String.format("Received %s from " + Minecraft.getMinecraft().thePlayer.getDisplayName(), message.text));
            return null;
        }
    }
}

Posted

You are still sending a String. Why?

Also: That will crash on a dedicated server.

 

Okay, you still haven't explained to me how I can send multiple data types in one packet. As for it crashing on a dedicated server, how in the friggin world am I supposed to fix that?

Posted

Writing:

 

buf.writeInt(someInt);
buf.writeByte(someByte);
buf.writeString(someString);

 

Reading:

 

someInt = buf.readInt();
someByte = buf.readByte();
someString = buf.readString();

 

You just need to read and write in the same order.

 

To access the client player in a safe way, make a method in your proxies that returns Minecraft#thePlayer in the ClientProxy and throws an exception (it will never be called) on the ServerProxy.

 

Ok, I see where you were talking about thePlayer issue and fixed that. Would I also need to put the new packet code into the ServerPacketManager as well?

Posted

Wat... Why do you even have a "ServerPacketManager" in the first place? That's a horrible name by the way. The thing is a packet, not a manager.

You are sending one packet to the client, right? That packet updates the IEEP data. So, name it "PacketUpdateClientIEEPData".

 

Your joking? I followed YOUR tutorial and it said that you needed both a Server-side packet and a Client-side packet. So what is it, do I need one or not?

Posted

Where in the world does my tutorial say you need both?

Please try to understand what packets actually are. It's really fucking simple.

 

I do understand what packets are but like I have said before. You barely explained what was what in your tutorial. In 1.5.2 you needed to send it through a manager for the server and then grab it again for the client in another manager. I am completely confused as to what you are trying to explain here.

Posted

In 1.5.2 you needed to send it through a manager for the server and then grab it again for the client in another manager.

This is bullshit.

In 1.5.2 you created a Packet250CustomPayload manually by whatever means and then send that manually. To client or server.

Then you had ONE packet handler for both which received all your packets.

Most people then sent a packetID as the first byte in the packet data and had humongous switch statements on that packetID containing all their packet handling code in ONE method.

 

Now you have one IMessage + IMessageHandler for each of those packetIDs. Each packet has a defined direction (from client to server or the other way around). The IMessage encapsulates the data you want to send. The IMessageHandler then does something with that data.

 

I'm here to get help on something that I am not very proficient at. I do not need you to sit here and insult me. If you are going to be rude then please butt out. I am glad that you have helped me thus far but I will not tolerate being treated this way. I am doing everything that I can to understand what you are saying. I wouldn't say that's cause to be rude, would you?

Posted

Where did I insult you? I used the word "bullshit". If you cannot take being told you're wrong, then please go seek help elsewhere.

 

If I had a problem with you saying that i'm wrong I would have left long before we hit page 3.

Posted

So... what are you trying to tell me now?

 

I'm saying that if I couldn't handle being proved wrong I wouldn't be here. All you have done is prove me wrong. Not that I mean it in a bad way, that is the only way to show me what I am doing wrong. I just don't like it when you take up an attitude with me. You're not the only one here agitated.

Posted

No. Instead of saying, "That is not correct."; he said what he said. Not a big deal. And not anything to be insulted about. Ive been told things like that a few times by him. cheesy.gif. I didnt really get insulted at all.

Also to the topic, things change from version to version. So even if you had two managers in 1.5.2, you might only have one in 1.7.10. Though Im pretty sure, its only one manager back in 1.5.

 

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

I am not agitated nor do I "take up an attitude".

Right now you are the one being butthurt.

Oops. You posted before me.

I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!

Posted

Or can we lock the thread? This has moved way beyond the initial issue (which is solved).

 

@OP If you have a new problem (such as dealing with packets), it's better for everyone if you start a new thread.

 

I was planning on that but peeps keep replying. It might be best if you did lock it. ;P

Guest
This topic is now closed to further replies.

Announcements



×
×
  • Create New...

Important Information

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