Доброго времени суток. Хотелось бы сделать так, чтобы за наигранное время давалось что-нибудь (чтоб что-то получить, надо нажать на кнопку в гуи). Для этого в серверную часть добавил ивент, который считает наигранное время(тут еще хотел бы узнать, можно ли вытащить как-нибудь EntityPlayerMP, а то получилось только ники в стринг)
Далее... есть гуи, где можно нажать на кнопку(чтобы получить вознаграждение). Тут я хочу отправить пакет на сервер с игроком, который нажал по кнопке
Далее мне надо просто обработать данный пакет и вернуть в ответ число, но, я пока даже не могу нормально принять пакет на стороне сервера
Подскажите, пожалуйста. где ошибка.
код на подсчет наигранного времени:
@SubscribeEvent
public void onTick(TickEvent.ServerTickEvent e) {
if (e.phase == TickEvent.Phase.END) {
if (tick % 20 == 0) {
String arr[] = MinecraftServer.getServer().getAllUsernames();
for (String name : arr) {
PlayerData data = DiverseThings.instance.serverUtils.getPlayerData(name);
if (data == null) {
data = new PlayerData(name, 0, true);
DiverseThings.instance.serverUtils.toCache(data);
}
data.setTime(data.getTime() + 20);
}
}
tick++;
if (tick == Integer.MAX_VALUE - 1) {
tick = 0;
}
}
}
Далее... есть гуи, где можно нажать на кнопку(чтобы получить вознаграждение). Тут я хочу отправить пакет на сервер с игроком, который нажал по кнопке
Код при нажатии на кнопку в гуи:
@Override
protected void actionPerformed(GuiButton button) {
switch (button.id) {
case 1:
CPacket cPacket = new CPacket();
cPacket.client(Minecraft.getMinecraft().thePlayer);
break;
}
super.actionPerformed(button);
}
Класс клиентского пакета:
public class CPacket extends SimplePacket {
private long time;
private EntityPlayer playerMP;
public CPacket() {
time = 0;
}
public CPacket(long time) {
this.time = time;
}
@Override
public void client(EntityPlayer player) {
playerMP = player;
PacketNetwork.sendToServer(this);
}
}
}
Далее мне надо просто обработать данный пакет и вернуть в ответ число, но, я пока даже не могу нормально принять пакет на стороне сервера
Логи:
io.netty.handler.codec.EncoderException: java.lang.NullPointerException
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107) ~[MessageToMessageEncoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:?]
at me.Sa1ZeR_.DiverseThings.utils.packets.PacketNetwork.sendToServer(PacketNetwork.java:27) [PacketNetwork.class:?]
at me.Sa1ZeR_.DiverseThings.utils.packets.client.CPacket.client(CPacket.java:25) [CPacket.class:?]
at me.Sa1ZeR_.DiverseThings.GUI.WandererScreen.actionPerformed(WandererScreen.java:51) [WandererScreen.class:?]
at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:252) [GuiScreen.class:?]
at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344) [GuiScreen.class:?]
at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313) [GuiScreen.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731) [Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_231]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_231]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_231]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:824) ~[AbstractByteBuf.class:?]
at me.Sa1ZeR_.DiverseThings.utils.packets.SimplePacket.toBytes(SimplePacket.java:35) ~[SimplePacket.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:51) ~[FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:?]
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:?]
... 26 more
[17:56:01] [Client thread/ERROR] [FML]: SimpleChannelHandlerWrapper exception
io.netty.handler.codec.EncoderException: java.lang.NullPointerException
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:107) ~[MessageToMessageEncoder.class:?]
at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:?]
at me.Sa1ZeR_.DiverseThings.utils.packets.PacketNetwork.sendToServer(PacketNetwork.java:27) [PacketNetwork.class:?]
at me.Sa1ZeR_.DiverseThings.utils.packets.client.CPacket.client(CPacket.java:25) [CPacket.class:?]
at me.Sa1ZeR_.DiverseThings.GUI.WandererScreen.actionPerformed(WandererScreen.java:51) [WandererScreen.class:?]
at net.minecraft.client.gui.GuiScreen.mouseClicked(GuiScreen.java:252) [GuiScreen.class:?]
at net.minecraft.client.gui.GuiScreen.handleMouseInput(GuiScreen.java:344) [GuiScreen.class:?]
at net.minecraft.client.gui.GuiScreen.handleInput(GuiScreen.java:313) [GuiScreen.class:?]
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1731) [Minecraft.class:?]
at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039) [Minecraft.class:?]
at net.minecraft.client.Minecraft.run(Minecraft.java:962) [Minecraft.class:?]
at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_231]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_231]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_231]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_231]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
at GradleStart.main(Unknown Source) [start/:?]
Caused by: java.lang.NullPointerException
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:824) ~[AbstractByteBuf.class:?]
at me.Sa1ZeR_.DiverseThings.utils.packets.SimplePacket.toBytes(SimplePacket.java:35) ~[SimplePacket.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:11) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.simpleimpl.SimpleIndexedCodec.encodeInto(SimpleIndexedCodec.java:7) ~[SimpleIndexedCodec.class:?]
at cpw.mods.fml.common.network.FMLIndexedMessageToMessageCodec.encode(FMLIndexedMessageToMessageCodec.java:51) ~[FMLIndexedMessageToMessageCodec.class:?]
at io.netty.handler.codec.MessageToMessageCodec$1.encode(MessageToMessageCodec.java:67) ~[MessageToMessageCodec$1.class:?]
at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:89) ~[MessageToMessageEncoder.class:?]
... 26 more
Подскажите, пожалуйста. где ошибка.
PacketNetwork:
public class PacketNetwork {
private short id;
public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel("testpacket");
public PacketNetwork() {
register(CPacket.class, Side.CLIENT);
register(SPacket.class, Side.SERVER);
}
public static void sendToAllAround(SimplePacket packet, World world, double x, double y, double z, double distance) {
NETWORK.sendToAllAround(packet, new NetworkRegistry.TargetPoint(world.provider.dimensionId, x, y, z, distance));
}
public static void sendToServer(SimplePacket packet) {
NETWORK.sendToServer(packet);
}
public static void sendToClient(SimplePacket packet, EntityPlayerMP player) {
NETWORK.sendTo(packet, player);
}
private void register(Class<? extends SimplePacket> packet, Side side) {
try {
NETWORK.registerMessage(packet.newInstance(), packet, id++, side);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
}
}
SimplePacket:
public class SimplePacket implements IMessage, IMessageHandler<SimplePacket, SimplePacket> {
private ByteBuf buf;
public void client(EntityPlayer player) {}
public void server(EntityPlayerMP player) {}
public void server(PlayerData data) {}
protected ByteBuf getBuf() {
return buf != null ? buf : (buf = Unpooled.buffer());
}
@Override
public void fromBytes(ByteBuf buf) {
this.buf = buf;
}
@Override
public void toBytes(ByteBuf buf) {
if(buf != null) {
buf.writeBytes(this.buf);
}
}
@Override
public SimplePacket onMessage(SimplePacket message, MessageContext ctx) {
System.out.println("Я принял пакет");
if(ctx.side.isServer()) {
message.server(ctx.getServerHandler().playerEntity);
} else {
message.client(clientPlayer());
}
return null;
}
@SideOnly(Side.CLIENT)
private EntityPlayer clientPlayer() {
return Minecraft.getMinecraft().thePlayer;
}
}
Последнее редактирование: