Как с этим бороться?
Если, что-то надо будет докинуть, докину.
[11:45:37] [Server thread/ERROR] [FML]: Detected ongoing potential memory leak. 900 packets have leaked. Top offenders
[11:45:37] [Server thread/ERROR] [FML]: ssHSch : 900
[11:45:37] [Server thread/ERROR] [FML]: ssHSch : 900
Java:
@ChannelHandler.Sharable
public class PacketPipeline extends MessageToMessageCodec<FMLProxyPacket, AbstractPacket>
{
private EnumMap<Side, FMLEmbeddedChannel> channels;
private LinkedList<Class<? extends AbstractPacket>> packets = Lists.newLinkedList();
private boolean isPostInitialised = false;
public boolean registerPacket(Class<? extends AbstractPacket> clazz)
{
if (this.packets.size() > 256 | this.packets.contains(clazz) | this.isPostInitialised)
{
return false;
}
this.packets.add(clazz);
return true;
}
public void initialise() {
this.channels = NetworkRegistry.INSTANCE.newChannel("ssHSch", new ChannelHandler[]{this});
this.registerPacket(KeyPacket.class);
this.registerPacket(AnchorPullPacket.class);
this.registerPacket(FuelPacket.class);
this.registerPacket(DistPacket.class);
this.registerPacket(EntityPullPacket.class);
this.registerPacket(AnchorSPacket.class);
}
public void postInit()
{
if (this.isPostInitialised)
{
return;
}
this.isPostInitialised = true;
Collections.sort(this.packets, new Comparator<Class<? extends AbstractPacket>>()
{
@Override
public int compare(Class<? extends AbstractPacket> clazz1, Class<? extends AbstractPacket> clazz2)
{
int com = String.CASE_INSENSITIVE_ORDER.compare(clazz1.getCanonicalName(), clazz2.getCanonicalName());
if (com == 0)
{
com = clazz1.getCanonicalName().compareTo(clazz2.getCanonicalName());
}
return com;
}
});
}
@Override
protected void encode(ChannelHandlerContext ctx, AbstractPacket msg, List<Object> out) throws Exception
{
ByteBuf buffer = Unpooled.buffer();
Class<? extends AbstractPacket> clazz = msg.getClass();
if (!this.packets.contains(msg.getClass()))
{
throw new NullPointerException("No Packet Registered for: " + msg.getClass().getCanonicalName());
}
byte discriminator = (byte) this.packets.indexOf(clazz);
buffer.writeByte(discriminator);
msg.encodeInto(ctx, buffer);
FMLProxyPacket proxyPacket = new FMLProxyPacket(buffer.copy(), ctx.channel().attr(NetworkRegistry.FML_CHANNEL).get());
out.add(proxyPacket);
}
@Override
protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List<Object> out) throws Exception
{
ByteBuf payload = msg.payload();
byte discriminator = payload.readByte();
Class<? extends AbstractPacket> clazz = this.packets.get(discriminator);
if (clazz == null)
{
throw new NullPointerException("No packet registered for discriminator: " + discriminator);
}
AbstractPacket pkt = clazz.newInstance();
pkt.decodeInto(ctx, payload.slice());
EntityPlayer player;
switch (FMLCommonHandler.instance().getEffectiveSide())
{
case CLIENT:
player = this.getClientPlayer();
pkt.handleClientSide(player);
break;
case SERVER:
INetHandler netHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();
player = ((NetHandlerPlayServer)netHandler).playerEntity;
pkt.handleServerSide(player);
break;
default:
}
out.add(pkt);
}
@SideOnly(Side.CLIENT)
private EntityPlayer getClientPlayer()
{
return Minecraft.getMinecraft().thePlayer;
}
public void sendToAll(AbstractPacket message) {
this.channels.get((Object)Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set((OutboundTarget)FMLOutboundHandler.OutboundTarget.ALL);
this.channels.get((Object)Side.SERVER).writeAndFlush((Object)message);
}
public void sendTo(AbstractPacket message, EntityPlayerMP player) {
this.channels.get((Object)Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set((OutboundTarget)FMLOutboundHandler.OutboundTarget.PLAYER);
this.channels.get((Object)Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set((Object)player);
this.channels.get((Object)Side.SERVER).writeAndFlush((Object)message);
}
public void sendToAllAround(AbstractPacket message, NetworkRegistry.TargetPoint point) {
this.channels.get((Object)Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set((OutboundTarget)FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT);
this.channels.get((Object)Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set((Object)point);
this.channels.get((Object)Side.SERVER).writeAndFlush((Object)message);
}
public void sendToDimension(AbstractPacket message, int dimensionId) {
this.channels.get((Object)Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGET).set((OutboundTarget)FMLOutboundHandler.OutboundTarget.DIMENSION);
this.channels.get((Object)Side.SERVER).attr(FMLOutboundHandler.FML_MESSAGETARGETARGS).set((Object)dimensionId);
this.channels.get((Object)Side.SERVER).writeAndFlush((Object)message);
}
public void sendToServer(AbstractPacket message) {
this.channels.get((Object)Side.CLIENT).attr(FMLOutboundHandler.FML_MESSAGETARGET).set((OutboundTarget)FMLOutboundHandler.OutboundTarget.TOSERVER);
this.channels.get((Object)Side.CLIENT).writeAndFlush((Object)message);
}
}
Java:
public class KeyPacket
extends AbstractPacket {
private List<Integer> keyData = new ArrayList<Integer>();
public KeyPacket() {
}
public KeyPacket(List<Integer> keys) {
this.keyData = keys;
}
@Override
public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
buffer.writeInt(this.keyData.size());
for (int i = 0; i < this.keyData.size(); ++i) {
buffer.writeInt(this.keyData.get(i).intValue());
}
}
@Override
public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
int c = buffer.readInt();
for (int i = 0; i < c; ++i) {
this.keyData.add(buffer.readInt());
}
}
@Override
public void handleClientSide(EntityPlayer player) {
}
@Override
public void handleServerSide(EntityPlayer player) {
DataManager.setKeyData(player, this.keyData);
}
}
Java:
public class DistPacket
extends AbstractPacket {
double dist;
int side;
public DistPacket() {
}
public DistPacket(double fuel, int side) {
this.dist = fuel;
this.side = side;
}
@Override
public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
buffer.writeDouble(this.dist);
buffer.writeInt(this.side);
}
@Override
public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) {
this.dist = buffer.readDouble();
this.side = buffer.readInt();
}
@Override
public void handleClientSide(EntityPlayer player) {
}
@Override
public void handleServerSide(EntityPlayer player) {
Entity e = null;
if (this.side == 0) {
if (ItemMoveLeggings.rightAnchorMap.containsKey((Object)player)) {
e = (Entity)ItemMoveLeggings.rightAnchorMap.get((Object)player);
}
} else if (this.side == 1 && ItemMoveLeggings.leftAnchorMap.containsKey((Object)player)) {
e = (Entity)ItemMoveLeggings.leftAnchorMap.get((Object)player);
}
if (e != null) {
((EntityAnchor)e).dist = this.dist != 0.0 ? (((EntityAnchor)e).dist += this.dist) : (double)player.getDistanceToEntity(e);
}
}
}