first
This commit is contained in:
parent
39a720530d
commit
746be15e86
|
@ -1,2 +1,4 @@
|
|||
# orebfuscator
|
||||
orebfuscator for mcpc+ 1.7.10
|
||||
|
||||
original idea https://github.com/Shevchik/Orebfuscator
|
||||
|
|
124
java/Orebfuscator/AsyncPacketQueue.java
Normal file
124
java/Orebfuscator/AsyncPacketQueue.java
Normal file
|
@ -0,0 +1,124 @@
|
|||
package Orebfuscator;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
|
||||
public class AsyncPacketQueue<E> implements Iterable<E>, Collection<E>, Queue<E>
|
||||
{
|
||||
|
||||
public Queue queue;
|
||||
public EntityPlayerMP player;
|
||||
|
||||
public AsyncPacketQueue(EntityPlayerMP player, Queue queue)
|
||||
{
|
||||
this.player = player;
|
||||
this.queue = queue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(E arg0) {
|
||||
//Packet packet = (Packet) Fields.getValue(arg0, Fields.InboundHandlerTuplePacketListener.getPacketIndex());
|
||||
//Log.msg("%s", packet.getClass().getName());
|
||||
Log.msg("%s", arg0.getClass().getName());
|
||||
return this.queue.add(arg0);
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
this.player = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public E element() {
|
||||
return (E) this.queue.element();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean offer(E arg0) {
|
||||
return this.queue.offer(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public E peek() {
|
||||
return (E) this.queue.peek();
|
||||
}
|
||||
|
||||
@Override
|
||||
public E poll() {
|
||||
return (E) this.queue.poll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public E remove() {
|
||||
return (E) this.queue.remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(Collection<? extends E> arg0) {
|
||||
Log.error("Queue.addAll");
|
||||
return this.queue.addAll(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
this.queue.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Object arg0) {
|
||||
return this.queue.contains(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAll(Collection<?> arg0) {
|
||||
return this.queue.containsAll(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return this.queue.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(Object arg0) {
|
||||
return this.queue.remove(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAll(Collection<?> arg0) {
|
||||
return this.queue.removeAll(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retainAll(Collection<?> arg0) {
|
||||
return this.queue.removeAll(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return this.queue.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray() {
|
||||
return this.queue.toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T[] toArray(T[] arg0) {
|
||||
return (T[]) this.queue.toArray(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<E> iterator() {
|
||||
return this.queue.iterator();
|
||||
}
|
||||
}
|
84
java/Orebfuscator/Fields.java
Normal file
84
java/Orebfuscator/Fields.java
Normal file
|
@ -0,0 +1,84 @@
|
|||
package Orebfuscator;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class Fields
|
||||
{
|
||||
public static int findFieldIndex(Class<?> clazz, String fieldName)
|
||||
{
|
||||
Field[] fields = clazz.getDeclaredFields();
|
||||
for (int i = 0; i < fields.length; i++)
|
||||
{
|
||||
if (fields[i].getName().equals(fieldName))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static Object getValue(Object instance, int index)
|
||||
{
|
||||
try {
|
||||
Field field = instance.getClass().getDeclaredFields()[index];
|
||||
field.setAccessible(true);
|
||||
return field.get(instance);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Object getValue(Object instance, String name)
|
||||
{
|
||||
try {
|
||||
Field field = instance.getClass().getDeclaredField(name);
|
||||
field.setAccessible(true);
|
||||
return field.get(instance);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void setValue(Object instance, int index, Object value)
|
||||
{
|
||||
try {
|
||||
Field field = instance.getClass().getDeclaredFields()[index];
|
||||
field.setAccessible(true);
|
||||
field.set(instance, value);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static class NetworkManager
|
||||
{
|
||||
public static String getOutboundPacketsQueueName()
|
||||
{
|
||||
return "outboundPacketsQueue";
|
||||
}
|
||||
|
||||
public static int getReceivedPacketsQueueIndex()
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
|
||||
public static int getOutboundPacketsQueueIndex()
|
||||
{
|
||||
return 11;
|
||||
}
|
||||
|
||||
public static int getChannelIndex()
|
||||
{
|
||||
return 12;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class InboundHandlerTuplePacketListener
|
||||
{
|
||||
public static int getPacketIndex()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
42
java/Orebfuscator/Log.java
Normal file
42
java/Orebfuscator/Log.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package Orebfuscator;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.ThreadContext;
|
||||
|
||||
import cpw.mods.fml.common.TracingPrintStream;
|
||||
import cpw.mods.fml.relauncher.FMLRelaunchLog;
|
||||
|
||||
public class Log
|
||||
{
|
||||
private static boolean configured;
|
||||
private static Logger myLog;
|
||||
|
||||
private static void configureLogging()
|
||||
{
|
||||
myLog = LogManager.getLogger(Orebfuscator.MODID);
|
||||
configured = true;
|
||||
}
|
||||
|
||||
public static void log(Level level, String format, Object... data)
|
||||
{
|
||||
if (!configured)
|
||||
{
|
||||
configureLogging();
|
||||
}
|
||||
myLog.log(level, String.format(format, data));
|
||||
}
|
||||
|
||||
public static void msg(String format, Object... data)
|
||||
{
|
||||
log(Level.INFO, format, data);
|
||||
}
|
||||
|
||||
public static void error(String format, Object... data)
|
||||
{
|
||||
log(Level.ERROR, format, data);
|
||||
}
|
||||
}
|
115
java/Orebfuscator/MapChunkBulk.java
Normal file
115
java/Orebfuscator/MapChunkBulk.java
Normal file
|
@ -0,0 +1,115 @@
|
|||
package Orebfuscator;
|
||||
|
||||
import net.minecraft.network.play.server.S26PacketMapChunkBulk;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class MapChunkBulk
|
||||
{
|
||||
public int offsetLSB;
|
||||
public int offsetMSB;
|
||||
public int offsetMetadata;
|
||||
public int offsetBlocklight;
|
||||
public int len;
|
||||
public int lenLSB;
|
||||
public int lenMSB;
|
||||
public int[] bufLSB;
|
||||
public int[] bufMSB;
|
||||
public byte[][] dataArray;
|
||||
public byte[] data;
|
||||
|
||||
public MapChunkBulk(S26PacketMapChunkBulk packet, World world)
|
||||
{
|
||||
int k = 0;
|
||||
int l;
|
||||
|
||||
bufLSB = (int[]) Fields.getValue(packet, "field_149265_c"); // 1110011 - íàáîð áëîêîâ (ExtendedBlockStorage.blockLSBArray) ïî âûñîòå (1 - åñòü áëîê, 0 - íåò áëîêà)
|
||||
bufMSB = (int[]) Fields.getValue(packet, "field_149262_d"); // 0001110 - íàáîð áëîêîâ (ExtendedBlockStorage.blockMSBArray) ïî âûñîòå (1 - åñòü áëîê, 0 - íåò áëîêà)
|
||||
dataArray = (byte[][]) Fields.getValue(packet, "field_149260_f"); // -- ìàññèâ äàííûõ
|
||||
|
||||
int lsb;
|
||||
int msb;
|
||||
int pos;
|
||||
int len;
|
||||
|
||||
for (int i = 0; i < bufLSB.length; i++)
|
||||
{
|
||||
lenLSB = 0;
|
||||
lenMSB = 0;
|
||||
len = 0;
|
||||
for (int j = 0; j < 16; ++j)
|
||||
{
|
||||
l = bufLSB[i] >> j & 1;
|
||||
|
||||
if (l == 1)
|
||||
{
|
||||
lenLSB++;
|
||||
len = j + 1;
|
||||
l = bufMSB[i] >> j & 1;
|
||||
lenMSB++;
|
||||
}
|
||||
}
|
||||
|
||||
offsetLSB = 0; // ñ ýòîé ïîçèöèè íà÷èíàþòñÿ áëîêè ðàçìåðîì 16x16x16 ñîäåðæàùèå ïåðâûå 8 áèò BlockID
|
||||
// ðàçìåð áëîêà 16*16*16 = 4096 áàéò
|
||||
offsetMetadata = offsetLSB + lenLSB * 4096; // íà÷àëî NibbleArrays ñîäåðæàùèõ ExtendedBlockStorage.blockMetadataArray
|
||||
// ðàçìåð ìàññèâà (16*16*16)/2 = 2048 (äåëèì ïîïàëàì, ò.ê. â îäíîì áàéòå ñîäåðæèòñÿ äâà çíà÷åíèÿ ïî 4 áèòà)
|
||||
offsetBlocklight = offsetMetadata + lenLSB * 2048; // íà÷àëî NibbleArray ñîäåðæàùåãî ExtendedBlockStorage.blocklightArray
|
||||
|
||||
// NibbleArray ExtendedBlockStorage.blockMSBArray
|
||||
if (world.provider.hasNoSky)
|
||||
{
|
||||
offsetMSB = offsetBlocklight + lenLSB * 2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
offsetMSB = offsetBlocklight + 2 * lenLSB * 2048; // åñëè åñòü íåáî, òî â áóôåðå áóäåò ìàññèâ ExtendedBlockStorage.skylightArray
|
||||
}
|
||||
|
||||
pos = 0;
|
||||
data = dataArray[i];
|
||||
for (int j = 0; j < 16; ++j)
|
||||
{
|
||||
l = bufLSB[i] >> j & 1;
|
||||
|
||||
if (l == 1)
|
||||
{
|
||||
for (int x = 0; x < 16; x++)
|
||||
{
|
||||
for (int y = 0; y < 16; y++)
|
||||
{
|
||||
for (int z = 0; z < 16; z++)
|
||||
{
|
||||
if (!Orebfuscator.isBlockTransparent(getBlockID(x, y, z)))
|
||||
{
|
||||
//data[pos + n] = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
pos += 4096;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getBlockID(int x, int y, int z)
|
||||
{
|
||||
if (y >> 4 < this.lenLSB)
|
||||
{
|
||||
y = y & 15;
|
||||
/*
|
||||
int l = this.blockLSBArray[y << 8 | z << 4 | x] & 255;
|
||||
|
||||
if (this.blockMSBArray != null)
|
||||
{
|
||||
l |= this.blockMSBArray.get(p_150819_1_, p_150819_2_, p_150819_3_) << 8;
|
||||
}
|
||||
|
||||
return Block.getBlockById(l);
|
||||
*/
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
89
java/Orebfuscator/Orebfuscator.java
Normal file
89
java/Orebfuscator/Orebfuscator.java
Normal file
|
@ -0,0 +1,89 @@
|
|||
package Orebfuscator;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.network.NetHandlerPlayServer;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.Mod;
|
||||
import cpw.mods.fml.common.Mod.EventHandler;
|
||||
import cpw.mods.fml.common.event.FMLInitializationEvent;
|
||||
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||
import cpw.mods.fml.common.network.FMLNetworkEvent;
|
||||
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
|
||||
@Mod(modid = Orebfuscator.MODID, version = Orebfuscator.VERSION, acceptableRemoteVersions = "*")
|
||||
public class Orebfuscator
|
||||
{
|
||||
public static final String MODID = "Orebfuscator";
|
||||
public static final String VERSION = "0.1";
|
||||
|
||||
@EventHandler
|
||||
public void init(FMLInitializationEvent event)
|
||||
{
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void preInit(FMLPreInitializationEvent event)
|
||||
{
|
||||
FMLCommonHandler.instance().bus().register(this);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPlayerLogged(PlayerEvent.PlayerLoggedInEvent event)
|
||||
{
|
||||
PlayerInjector.hookPlayer((EntityPlayerMP)event.player);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onPlayerLoggedOut(PlayerEvent.PlayerLoggedOutEvent event)
|
||||
{
|
||||
PlayerInjector.cleanupPlayer((EntityPlayerMP) event.player);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onClientConnect(FMLNetworkEvent.ServerConnectionFromClientEvent event)
|
||||
{
|
||||
/*
|
||||
NetHandlerPlayServer handler = (NetHandlerPlayServer)event.handler;
|
||||
PlayerInjector.hookPlayer(handler.playerEntity, handler.netManager);
|
||||
*/
|
||||
}
|
||||
|
||||
private static HashSet<Integer> forcedTransparentBlocks = new HashSet<Integer>();
|
||||
private static boolean[] TransparentBlocks = new boolean[4096];
|
||||
private static boolean TransparentCached = false;
|
||||
public static boolean isBlockTransparent(int id)
|
||||
{
|
||||
if (id < 0)
|
||||
return true;
|
||||
if (!TransparentCached)
|
||||
{
|
||||
// Generate TransparentBlocks by reading them from Minecraft
|
||||
for (int i = 0; i < TransparentBlocks.length; i++) {
|
||||
if (forcedTransparentBlocks.contains(i))
|
||||
{
|
||||
TransparentBlocks[i] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
Block block = Block.getBlockById(i);
|
||||
if (block == null)
|
||||
{
|
||||
TransparentBlocks[i] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
TransparentBlocks[i] = !block.isNormalCube();
|
||||
}
|
||||
}
|
||||
}
|
||||
TransparentCached = true;
|
||||
}
|
||||
return TransparentBlocks[id];
|
||||
}
|
||||
}
|
49
java/Orebfuscator/PlayerInjector.java
Normal file
49
java/Orebfuscator/PlayerInjector.java
Normal file
|
@ -0,0 +1,49 @@
|
|||
package Orebfuscator;
|
||||
|
||||
import io.netty.channel.Channel;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Queue;
|
||||
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.network.NetHandlerPlayServer;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
|
||||
public class PlayerInjector {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static void hookPlayer(EntityPlayerMP player)
|
||||
{
|
||||
/*
|
||||
NetworkManager nm = player.playerNetServerHandler.netManager;
|
||||
Queue queue = (Queue)Fields.getValue(nm, Fields.NetworkManager.getReceivedPacketsQueueIndex());
|
||||
queue = new AsyncPacketQueue(player, queue);
|
||||
Fields.setValue(nm, Fields.NetworkManager.getReceivedPacketsQueueIndex(), queue);
|
||||
*/
|
||||
/*
|
||||
Queue queue = (Queue)Fields.getValue(nm, Fields.NetworkManager.getOutboundPacketsQueueIndex());
|
||||
queue = new AsyncPacketQueue(player, queue);
|
||||
Fields.setValue(nm, Fields.NetworkManager.getOutboundPacketsQueueIndex(), queue);
|
||||
*/
|
||||
|
||||
NetworkManager nm = player.playerNetServerHandler.netManager;
|
||||
Channel channel = (Channel)Fields.getValue(nm, Fields.NetworkManager.getChannelIndex());
|
||||
channel = new ProxyChannel(channel, player);
|
||||
Fields.setValue(nm, Fields.NetworkManager.getChannelIndex(), channel);
|
||||
}
|
||||
|
||||
public static void cleanupPlayer(EntityPlayerMP player)
|
||||
{
|
||||
/*
|
||||
NetworkManager nm = player.playerNetServerHandler.netManager;
|
||||
((AsyncPacketQueue)Fields.getValue(nm, Fields.NetworkManager.getReceivedPacketsQueueIndex())).cleanup();
|
||||
*/
|
||||
/*
|
||||
NetworkManager nm = player.playerNetServerHandler.netManager;
|
||||
((AsyncPacketQueue)Fields.getValue(nm, Fields.NetworkManager.getOutboundPacketsQueueIndex())).cleanup();
|
||||
*/
|
||||
}
|
||||
}
|
239
java/Orebfuscator/ProxyChannel.java
Normal file
239
java/Orebfuscator/ProxyChannel.java
Normal file
|
@ -0,0 +1,239 @@
|
|||
package Orebfuscator;
|
||||
|
||||
import java.net.SocketAddress;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.network.play.server.S26PacketMapChunkBulk;
|
||||
import io.netty.buffer.ByteBufAllocator;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelConfig;
|
||||
import io.netty.channel.ChannelFuture;
|
||||
import io.netty.channel.ChannelMetadata;
|
||||
import io.netty.channel.ChannelPipeline;
|
||||
import io.netty.channel.ChannelProgressivePromise;
|
||||
import io.netty.channel.ChannelPromise;
|
||||
import io.netty.channel.EventLoop;
|
||||
import io.netty.util.Attribute;
|
||||
import io.netty.util.AttributeKey;
|
||||
|
||||
public class ProxyChannel implements Channel
|
||||
{
|
||||
public Channel channel;
|
||||
public EntityPlayerMP player;
|
||||
|
||||
public ProxyChannel(Channel channel, EntityPlayerMP player)
|
||||
{
|
||||
this.channel = channel;
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public void updateMsg(Object msg)
|
||||
{
|
||||
if (msg instanceof S26PacketMapChunkBulk)
|
||||
{
|
||||
S26PacketMapChunkBulk packet = (S26PacketMapChunkBulk)msg;
|
||||
MapChunkBulk chunk = new MapChunkBulk(packet, player.worldObj);
|
||||
|
||||
//Log.msg("%d", field_149260_f[0].length);
|
||||
}
|
||||
|
||||
//Log.msg("%s", msg.getClass().getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> Attribute<T> attr(AttributeKey<T> key) {
|
||||
return this.channel.attr(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture bind(SocketAddress localAddress) {
|
||||
return this.channel.bind(localAddress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress) {
|
||||
return this.channel.connect(remoteAddress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) {
|
||||
return this.channel.connect(remoteAddress, localAddress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture disconnect() {
|
||||
return this.channel.disconnect();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture close() {
|
||||
return this.channel.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture deregister() {
|
||||
return this.channel.deregister();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise) {
|
||||
return this.channel.bind(localAddress, promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise) {
|
||||
return this.channel.connect(remoteAddress, promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) {
|
||||
return this.channel.connect(remoteAddress, localAddress, promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture disconnect(ChannelPromise promise) {
|
||||
return this.channel.disconnect(promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture close(ChannelPromise promise) {
|
||||
return this.channel.close(promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture deregister(ChannelPromise promise) {
|
||||
return this.channel.deregister(promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture write(Object msg) {
|
||||
return this.channel.write(msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture write(Object msg, ChannelPromise promise) {
|
||||
return this.channel.write(msg, promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) {
|
||||
this.updateMsg(msg);
|
||||
return this.channel.writeAndFlush(msg, promise);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture writeAndFlush(Object msg) {
|
||||
this.updateMsg(msg);
|
||||
return this.channel.writeAndFlush(msg);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelPipeline pipeline() {
|
||||
return this.channel.pipeline();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ByteBufAllocator alloc() {
|
||||
return this.channel.alloc();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelPromise newPromise() {
|
||||
return this.channel.newPromise();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelProgressivePromise newProgressivePromise() {
|
||||
return this.channel.newProgressivePromise();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture newSucceededFuture() {
|
||||
return this.channel.newSucceededFuture();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture newFailedFuture(Throwable cause) {
|
||||
return this.channel.newFailedFuture(cause);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelPromise voidPromise() {
|
||||
return this.channel.voidPromise();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Channel arg0) {
|
||||
return this.channel.compareTo(arg0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventLoop eventLoop() {
|
||||
return this.channel.eventLoop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Channel parent() {
|
||||
return this.channel.parent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelConfig config() {
|
||||
return this.channel.config();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpen() {
|
||||
return this.channel.isOpen();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRegistered() {
|
||||
return this.channel.isRegistered();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isActive() {
|
||||
return this.channel.isActive();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelMetadata metadata() {
|
||||
return this.channel.metadata();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SocketAddress localAddress() {
|
||||
return this.channel.localAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SocketAddress remoteAddress() {
|
||||
return this.channel.remoteAddress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelFuture closeFuture() {
|
||||
return this.channel.closeFuture();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWritable() {
|
||||
return this.channel.isWritable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Channel flush() {
|
||||
return this.channel.flush();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Channel read() {
|
||||
return this.channel.read();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Unsafe unsafe() {
|
||||
return this.channel.unsafe();
|
||||
}
|
||||
}
|
16
resources/mcmod.info
Normal file
16
resources/mcmod.info
Normal file
|
@ -0,0 +1,16 @@
|
|||
[
|
||||
{
|
||||
"modid": "Orebfuscator",
|
||||
"name": "Example Mod",
|
||||
"description": "",
|
||||
"version": "${version}",
|
||||
"mcversion": "${mcversion}",
|
||||
"url": "",
|
||||
"updateUrl": "",
|
||||
"authorList": ["ExampleDude"],
|
||||
"credits": "The Forge and FML guys, for making this example",
|
||||
"logoFile": "",
|
||||
"screenshots": [],
|
||||
"dependencies": []
|
||||
}
|
||||
]
|
Loading…
Reference in a new issue