Jump to content

themaw

Members
  • Posts

    53
  • Joined

  • Last visited

Everything posted by themaw

  1. The version is minecraft forge 1.12. As the title said,Is there any way to import a model and render it at a block?
  2. ...I......dont't know what to say. You solved my problem that I haven't solved for many days
  3. Oh.....I finally noticed the problem and corrected it and a new error has arisen
  4. Thank you for your answer. Can you give me a example that How to send both a List<String> and a List<Integer> through Imessage? If i do like this, At the PlayerModDataForCheckSender.class: public void writeToByteBuf(ByteBuf b) { int modidsl1 = ids.size(); int hashesl1 = hashes.size(); b.writeInt(modidsl1); for(String s : ids) ByteBufUtils.writeUTF8String(b, s); b.writeInt(hashesl1); for(int i :hashes) { b.writeInt(i); } } public static PlayerModDataForCheck readFromByteBuf(ByteBuf b) { int modidsl1 = b.readInt(); List<String> modidsread = new LinkedList<String>(); for(int i = 0;i<modidsl1;i++) modidsread.add(ByteBufUtils.readUTF8String(b)); int hashesl1 = b.readInt(); List<Integer> hashesread = new LinkedList<Integer>(); for(int i = 0;i<hashesl1;i++) { hashesread.add(b.readInt()); } return new PlayerModDataForCheck(hashesread,modidsread); } The Imessage: public class PlayerModDataForCheckSender implements IMessage{ public PlayerModDataForCheck data; public PlayerModDataForCheckSender(PlayerModDataForCheck da) { this.data = da; } @Override public void fromBytes(ByteBuf buf) { data.writeToByteBuf(buf); } @Override public void toBytes(ByteBuf buf) { data = PlayerModDataForCheck.readFromByteBuf(buf); } } I will get this: 21:23:43] [Netty Client IO #0/ERROR] [FML]: There was a critical exception handling a packet on channel mawgui io.netty.handler.codec.EncoderException: java.lang.IndexOutOfBoundsException: readerIndex(0) + length(4) exceeds writerIndex(1): UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeHeapByteBuf(ridx: 0, widx: 1, cap: 256) at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:106) ~[MessageToMessageEncoder.class:4.1.9.Final] at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:801) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:831) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:60) ~[SimpleChannelHandlerWrapper.class:?] at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:36) ~[SimpleChannelHandlerWrapper.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[SimpleChannelInboundHandler.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) ~[MessageToMessageDecoder.class:4.1.9.Final] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) ~[DefaultChannelPipeline$HeadContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) ~[AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) ~[DefaultChannelPipeline.class:4.1.9.Final] at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:274) ~[EmbeddedChannel.class:4.1.9.Final] at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:108) [FMLProxyPacket.class:?] at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:155) [NetworkManager.class:?] at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:49) [NetworkManager.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [AbstractChannelHandlerContext.class:4.1.9.Final] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleClientSideCustomPacket(NetworkDispatcher.java:409) [NetworkDispatcher.class:?] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:274) [NetworkDispatcher.class:?] at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:74) [NetworkDispatcher.class:?] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) [ByteToMessageDecoder.class:4.1.9.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) [ByteToMessageDecoder.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) [ByteToMessageDecoder.class:4.1.9.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) [ByteToMessageDecoder.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) [ByteToMessageDecoder.class:4.1.9.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) [ByteToMessageDecoder.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:287) [IdleStateHandler.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) [DefaultChannelPipeline$HeadContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348) [AbstractChannelHandlerContext.class:4.1.9.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) [DefaultChannelPipeline.class:4.1.9.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134) [AbstractNioByteChannel$NioByteUnsafe.class:4.1.9.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:624) [NioEventLoop.class:4.1.9.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:559) [NioEventLoop.class:4.1.9.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:476) [NioEventLoop.class:4.1.9.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438) [NioEventLoop.class:4.1.9.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) [SingleThreadEventExecutor$5.class:4.1.9.Final] at java.lang.Thread.run(Unknown Source) [?:1.8.0_121]
  5. Sure: This is a check system. When the player login in a server,it will call this event at the server: @SubscribeEvent @SideOnly(Side.SERVER) public void playerlogeve(PlayerLoggedInEvent e)throws IOException { System.out.println("Start Check "+e.player.getName()); Thread t1 = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Main.CustomMPL.sendTo(new PlayerCheckTaskSender(), (EntityPlayerMP) e.player); } }); t1.start(); } The Main.CustomMPL at the Main Class is: public static final SimpleNetworkWrapper CustomMPL= NetworkRegistry.INSTANCE.newSimpleChannel(Info.modid); Info.modid is just a string. And this is the PlayerCheckTashSender(): public class PlayerCheckTaskSender implements IMessage{ @Override public void fromBytes(ByteBuf buf) { // TODO Auto-generated method stub } @Override public void toBytes(ByteBuf buf) { // TODO Auto-generated method stub } } And the client handler is like this: public class ClientCheckMessageListener implements IMessageHandler<PlayerCheckTaskSender, PlayerModDataForCheckSender>{ @Override public PlayerModDataForCheckSender onMessage(final PlayerCheckTaskSender message, MessageContext ctx) { Void.getThreadListener(ctx).addScheduledTask(new Runnable(){ @Override public void run() { } }); return new PlayerModDataForCheckSender(CheckSystem.getCopyofCurrectList()); } } And this client handler will return A Imessage like this: package mawmanager.maw.GUI.CheckSystem.IMessage.Client; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import io.netty.buffer.ByteBuf; import mawmanager.maw.GUI.CheckSystem.PlayerModDataForCheck; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; public class PlayerModDataForCheckSender implements IMessage{ public PlayerModDataForCheck data; public PlayerModDataForCheckSender(PlayerModDataForCheck da) { this.data = da; } @Override public void fromBytes(ByteBuf buf) { try{ ByteArrayOutputStream b1 = new ByteArrayOutputStream(); ObjectOutputStream b2 = new ObjectOutputStream(b1); b2.writeObject(data); buf.writeBytes(b1.toByteArray()); }catch(IOException e) { e.printStackTrace(); } } @Override public void toBytes(ByteBuf buf) { // TODO Auto-generated method stub byte[] bytes; int offset; int length = buf.readableBytes(); bytes = new byte[length]; buf.readBytes(bytes); try { ByteArrayInputStream b1 = new ByteArrayInputStream(bytes); ObjectInputStream b2 = new ObjectInputStream(b1); this.data = (PlayerModDataForCheck)b2.readObject(); } catch (IOException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } And this is my PlayerModDataForCheck.Class package mawmanager.maw.GUI.CheckSystem; import java.io.Serializable; import java.util.List; public class PlayerModDataForCheck implements Serializable{ private int randomcode = 0; private List<Integer> hashes = null; private List<String> ids = null; /*private int randomcode ;*/ public PlayerModDataForCheck(List<Integer> i1,List<String> i2) { this.hashes = i1; this.ids = i2; /*this.randomcode = randomc;*/ } public PlayerModDataForCheck(List<Integer> i1,List<String> i2,int i3) { this.hashes = i1; this.ids = i2; this.randomcode = i3; /*this.randomcode = randomc;*/ } public boolean RandomCodeCompare(int i) { return i == randomcode; } public PlayerModDataForCheck getCopies() { return new PlayerModDataForCheck(this.hashes,this.ids); } protected boolean isEmpty() { if(hashes == null|| ids == null)return true; try{if(hashes.size()>0&&ids.size()>0)return false; return true; } catch(Exception e ) { return true; } } protected List<Integer> gethashes() { return hashes; } protected List<String> getids() { return ids; } protected boolean whetherSubset(PlayerModDataForCheck p) { if(isEmpty())return true; try{ List<Integer> hashI = p.gethashes(); List<String> modidI = p.getids(); for(int i:hashes) { boolean isinlist = false; for(int i2:hashI) { if(i2==i) {isinlist = true;break;} } if(!isinlist)return false; } for(String i:ids) { boolean isinlist = false; for(String i2:modidI) { if(i2.equals(i)) {isinlist = true;break;} } if(!isinlist)return false; } return true; }catch(Exception e) { System.out.print(e.getMessage()); return false; } } /*protected int getradomcode() { return this.randomcode; }*/ } Finally is the server side handler: @Override public IMessage onMessage(final PlayerModDataForCheckSender message, MessageContext ctx) { Void.getThreadListener(ctx).addScheduledTask(new Runnable(){ @Override public void run() { if(message == null||!CheckSystem.check(message.data,ctx.getServerHandler().player.getName())) { ctx.getServerHandler().disconnect(new TextComponentString(ChecksystemInfo.kickmessage)); System.out.println(ctx.getServerHandler().player.getName() + "Has beeen kicked"); } } }); // TODO Auto-generated method stub return null; } And the problem is my custom Imessage Class: When the void tobytes() which I Overrided is being called,it will appear a java.io.EOFException at this line ObjectInputStream b2 = new ObjectInputStream(b1); Or this.data = (PlayerModDataForCheck)b2.readObject(); (Sorry for my poor english)
  6. Thank you for your answer.But I'm not code a tileentity. I'm modding a check system with simplempl.
  7. package mawmanager.maw.GUI.CheckSystem.IMessage.Client; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import io.netty.buffer.ByteBuf; import mawmanager.maw.GUI.CheckSystem.PlayerModDataForCheck; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; public class PlayerModDataForCheckSender implements IMessage{ public PlayerModDataForCheck data; public PlayerModDataForCheckSender(PlayerModDataForCheck da) { this.data = da; } @Override public void fromBytes(ByteBuf buf) { try{ ByteArrayOutputStream b1 = new ByteArrayOutputStream(); ObjectOutputStream b2 = new ObjectOutputStream(b1); b2.writeObject(data); buf.writeBytes(b1.toByteArray()); }catch(IOException e) { e.printStackTrace(); } } @Override public void toBytes(ByteBuf buf) { // TODO Auto-generated method stub byte[] bytes; int offset; int length = buf.readableBytes(); bytes = new byte[length]; buf.readBytes(bytes); try { ByteArrayInputStream b1 = new ByteArrayInputStream(bytes); ObjectInputStream b2 = new ObjectInputStream(b1); this.data = (PlayerModDataForCheck)b2.readObject(); } catch (IOException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } This is what I do,but it will throw an error.
  8. As what I say. I want to send an Customobject by Imessage.But I have no idea.
  9. Hey,guys. I want to make a new MainMenu so that I can see if my server is on when I enter the GUIMainMenu. I'm trying to modify the net.minecraft.client.network.ServerPinger to create my own serverpinger. When I use ping(serverdata server) and pass in my own serverdata, the console always says "Can't ping ...(serverIP)", although my server is connectable. Here is the pinger code. package mawmanager.maw.GUI; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.mojang.authlib.GameProfile; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; import io.netty.channel.ChannelException; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.socket.nio.NioSocketChannel; import java.net.InetAddress; import java.net.UnknownHostException; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Iterator; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ServerAddress; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.network.EnumConnectionState; import net.minecraft.network.NetworkManager; import net.minecraft.network.ServerStatusResponse; import net.minecraft.network.handshake.client.C00Handshake; import net.minecraft.network.status.INetHandlerStatusClient; import net.minecraft.network.status.client.CPacketPing; import net.minecraft.network.status.client.CPacketServerQuery; import net.minecraft.network.status.server.SPacketPong; import net.minecraft.network.status.server.SPacketServerInfo; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.translation.I18n; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.commons.lang3.ArrayUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @SideOnly(Side.CLIENT) public class MawServerPinger { private static final Splitter PING_RESPONSE_SPLITTER = Splitter.on('\u0000').limit(6); private static final Logger LOGGER = LogManager.getLogger(); /** A list of NetworkManagers that have pending pings */ private final List<NetworkManager> pingDestinations = Collections.<NetworkManager>synchronizedList(Lists.newArrayList()); public void ping(final ServerData server) throws UnknownHostException { ServerAddress serveraddress = ServerAddress.fromString(server.serverIP); final NetworkManager networkmanager = NetworkManager.createNetworkManagerAndConnect(InetAddress.getByName(serveraddress.getIP()), serveraddress.getPort(), false); this.pingDestinations.add(networkmanager); server.pingToServer = -1L; server.playerList = null; networkmanager.setNetHandler(new INetHandlerStatusClient() { private boolean successful; private boolean receivedStatus; private long pingSentAt; public void handleServerInfo(SPacketServerInfo packetIn) { if (this.receivedStatus) { networkmanager.closeChannel(new TextComponentTranslation("multiplayer.status.unrequested", new Object[0])); } else { this.receivedStatus = true; ServerStatusResponse serverstatusresponse = packetIn.getResponse(); NewMawMainGui.onlinestate =I18n.translateToLocal("mawnewmenu.mawserveronline"); if (serverstatusresponse.getPlayers() != null) { NewMawMainGui.playercount =I18n.translateToLocal("mawnewmenu.playercount")+serverstatusresponse.getPlayers().getPlayers().length; } net.minecraftforge.fml.client.FMLClientHandler.instance().bindServerListData(server, serverstatusresponse); this.pingSentAt = Minecraft.getSystemTime(); networkmanager.sendPacket(new CPacketPing(this.pingSentAt)); this.successful = true; } } public void handlePong(SPacketPong packetIn) { long i = this.pingSentAt; long j = Minecraft.getSystemTime(); server.pingToServer = j - i; networkmanager.closeChannel(new TextComponentString("Finished")); } /** * Invoked when disconnecting, the parameter is a ChatComponent describing the reason for termination */ public void onDisconnect(ITextComponent reason) { if (!this.successful) { NewMawMainGui.onlinestate = I18n.translateToLocal("mawnewmenu.mawserveroffline"); NewMawMainGui.playercount = I18n.translateToLocal("mawnewmenu.playercount")+0; NewMawMainGui.server.pingToServer = -1L; System.out.println("Connection error(MAWSERVER)"); server.serverMOTD = TextFormatting.DARK_RED + I18n.translateToLocal("multiplayer.status.cannot_connect"); server.populationInfo = ""; MawServerPinger.this.tryCompatibilityPing(server); } } }); try { networkmanager.sendPacket(new C00Handshake(serveraddress.getIP(), serveraddress.getPort(), EnumConnectionState.STATUS, true)); networkmanager.sendPacket(new CPacketServerQuery()); } catch (Throwable throwable) { LOGGER.error(throwable); } } private void tryCompatibilityPing(final ServerData server) { final ServerAddress serveraddress = ServerAddress.fromString(server.serverIP); ((Bootstrap)((Bootstrap)((Bootstrap)(new Bootstrap()).group(NetworkManager.CLIENT_NIO_EVENTLOOP.getValue())).handler(new ChannelInitializer<Channel>() { protected void initChannel(Channel p_initChannel_1_) throws Exception { try { p_initChannel_1_.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(true)); } catch (ChannelException var3) { ; } p_initChannel_1_.pipeline().addLast(new SimpleChannelInboundHandler<ByteBuf>() { public void channelActive(ChannelHandlerContext p_channelActive_1_) throws Exception { super.channelActive(p_channelActive_1_); ByteBuf bytebuf = Unpooled.buffer(); try { bytebuf.writeByte(254); bytebuf.writeByte(1); bytebuf.writeByte(250); char[] achar = "MC|PingHost".toCharArray(); bytebuf.writeShort(achar.length); for (char c0 : achar) { bytebuf.writeChar(c0); } bytebuf.writeShort(7 + 2 * serveraddress.getIP().length()); bytebuf.writeByte(127); achar = serveraddress.getIP().toCharArray(); bytebuf.writeShort(achar.length); for (char c1 : achar) { bytebuf.writeChar(c1); } bytebuf.writeInt(serveraddress.getPort()); p_channelActive_1_.channel().writeAndFlush(bytebuf).addListener(ChannelFutureListener.CLOSE_ON_FAILURE); } finally { bytebuf.release(); } } protected void channelRead0(ChannelHandlerContext p_channelRead0_1_, ByteBuf p_channelRead0_2_) throws Exception { short short1 = p_channelRead0_2_.readUnsignedByte(); if (short1 == 255) { String s = new String(p_channelRead0_2_.readBytes(p_channelRead0_2_.readShort() * 2).array(), StandardCharsets.UTF_16BE); String[] astring = (String[])Iterables.toArray(MawServerPinger.PING_RESPONSE_SPLITTER.split(s), String.class); if ("\u00a71".equals(astring[0])) { int i = MathHelper.getInt(astring[1], 0); String s1 = astring[2]; String s2 = astring[3]; int j = MathHelper.getInt(astring[4], -1); int k = MathHelper.getInt(astring[5], -1); server.version = -1; server.gameVersion = s1; server.serverMOTD = s2; server.populationInfo = TextFormatting.GRAY + "" + j + "" + TextFormatting.DARK_GRAY + "/" + TextFormatting.GRAY + k; } } p_channelRead0_1_.close(); } public void exceptionCaught(ChannelHandlerContext p_exceptionCaught_1_, Throwable p_exceptionCaught_2_) throws Exception { p_exceptionCaught_1_.close(); } }); } })).channel(NioSocketChannel.class)).connect(serveraddress.getIP(), serveraddress.getPort()); } public void pingPendingNetworks() { synchronized (this.pingDestinations) { Iterator<NetworkManager> iterator = this.pingDestinations.iterator(); while (iterator.hasNext()) { NetworkManager networkmanager = iterator.next(); if (networkmanager.isChannelOpen()) { networkmanager.processReceivedPackets(); } else { iterator.remove(); networkmanager.checkDisconnected(); } } } } public void clearPendingNetworks() { synchronized (this.pingDestinations) { Iterator<NetworkManager> iterator = this.pingDestinations.iterator(); while (iterator.hasNext()) { NetworkManager networkmanager = iterator.next(); if (networkmanager.isChannelOpen()) { iterator.remove(); networkmanager.closeChannel(new TextComponentTranslation("multiplayer.status.cancelled", new Object[0])); } } } } } There is also code that is executed when a refresh Button is pressed in MainMenu private void check(){ threads.submit(new Runnable(){ private static final String __OBFID = "CL_00000818"; public void run() { try { NewMawMainGui.this.serverp.pingPendingNetworks(); onlinestate=I18n.translateToLocal("mawnewmenu.pinging"); NewMawMainGui.this.serverp.ping(server); } catch (Exception exception) { onlinestate = I18n.translateToLocal("mawnewmenu.mawserveroffline"); playercount = I18n.translateToLocal("mawnewmenu.playercount")+0; NewMawMainGui.this.server.pingToServer = -1L; } } }); } The onlinestate and playercount variables are the text that MainMenuGUI displays to let me know if the server is on As the title says, I want to know how to get the code to get whether the server is on or not, and displays it on GuiScreen] Thank you.
  10. Thank you so much! Because of you, I finally implemented a tool today to remove TileEntity from a region. I successfully made a tool for the player's archive to eliminate the wrong TileEntity. Although I didn't use getCapability(), I just remembered that I didn't transform TileEntity into IInventory. Here is my void code: private void cleantileentity(EntityPlayer theplayer, World world) { int start = info.tileentitycleanrange; int x = theplayer.serverPosX-start; int y = theplayer.serverPosY-128; int z = theplayer.serverPosZ-start; int count = 0; for(int i1 = 0;i1<start*2;i1++){ for(int i2 = 0;i2<300;i2++){ for(int i3 = 0;i3<start*2;i3++){ TileEntity tile = world.getTileEntity(x+i1, y+i2, z+i3); if(tile!=null){ if(tile instanceof IInventory){ IInventory tile2 = (IInventory)tile; for(int i4=0;i4<tile2.getSizeInventory();i4++){ if(tile2.getStackInSlot(i4)!=null){ tile2.setInventorySlotContents(i4, null); } } System.out.println("Remove TileEntity with item in "+tile.toString()+"x:"+(x+i1)+" y:"+(y+i2)+" z:"+(z+i3)); } world.removeTileEntity(x+i1, y+i2, z+i3); System.out.println("Remove TileEntity in "+tile.toString()+"x:"+(x+i1)+" y:"+(y+i2)+" z:"+(z+i3)); ++count; } } } } System.out.println("Clean "+count+" TileEntites By Player "+theplayer.getDisplayName()); }
  11. Is there an optimization method if I want to have a large scale removal? private void clean(EntityPlayer theplayer,World world){ int start = 500; //start is the range of clean int x = theplayer.serverPosX-start; int y = theplayer.serverPosY-128; int z = theplayer.serverPosZ-start; int count = 0; for(int i1 = 0;i1<start*2;i1++){ for(int i2 = 0;i2<300;i2++){ for(int i3 = 0;i3<start*2;i3++){ TileEntity tile = world.getTileEntity(x+i1, y+i2, z+i3); if(tile!=null){ System.out.println(tile.toString()); world.removeTileEntity(x+i1, y+i2, z+i3); ++count; } } } } System.out.println("Clean "+count+" TileEntities By Player "+theplayer.getDisplayName()); }
  12. I tried to use this void to remove a TileEntity ,but the item in TileEntity's slot had not been removed. World.removeTileEntity(x,y,z) What should I do to remove the item in slot?
  13. Or get configuration data from server side
  14. It may be simple,but I really don't know how to do this.
  15. Thank you,But I still use the TickEvent in my server.
  16. Do you mean to set up players to fly with captives?
  17. I don't know.. For example, an EntityLiving would have ‘UUID’ ‘Health’‘Displayname’ tags.I want to give player another tag which called ‘hasSkycard’
  18. What if I want to make a judgment about whether a player has permission to fly by editing the NBT of the EntityPlayer? For example, how to read the player NBT and how to save the modified NBT(I only know how to modify the item NBT) Thank you.
  19. For example, there is no event or function such as "SlotItem moving event"....
  20. I made a item which i called "SkyCard",can make player fly in survial mode.But I want to turn off the fly mode when the itemstack is moved into a slot. What void or event can I use to modify the player When this item is moved into the item slot? Thank you.
×
×
  • Create New...

Important Information

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