3
0

增加对mod消息与物品左右键的方块放置监听

This commit is contained in:
2017-07-04 14:30:21 +08:00
parent bfe43ae465
commit f1db52bb04
5 changed files with 151 additions and 46 deletions

View File

@ -0,0 +1,43 @@
--- ../src-base/minecraft/cpw/mods/fml/common/network/FMLEventChannel.java
+++ ../src-work/minecraft/cpw/mods/fml/common/network/FMLEventChannel.java
@@ -1,16 +1,20 @@
package cpw.mods.fml.common.network;
-import io.netty.channel.ChannelFutureListener;
-import io.netty.channel.ChannelHandlerContext;
import java.util.EnumMap;
-import net.minecraft.client.network.NetHandlerPlayClient;
-import net.minecraft.entity.player.EntityPlayerMP;
-import net.minecraft.network.NetHandlerPlayServer;
+
+import cc.capture.type.CaptureBlock;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.EventBus;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent;
import cpw.mods.fml.common.network.internal.FMLProxyPacket;
import cpw.mods.fml.relauncher.Side;
+import io.netty.channel.ChannelFutureListener;
+import io.netty.channel.ChannelHandlerContext;
+import net.minecraft.client.network.NetHandlerPlayClient;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.server.MinecraftServer;
/**
* An event driven network channel, using {@link FMLNetworkEvent.CustomPacketEvent} and {@link FMLNetworkEvent.CustomNetworkEvent}
@@ -100,7 +104,14 @@
FMLNetworkEvent.CustomPacketEvent<?> event = factory.make(msg);
if (event != null)
{
+ CaptureBlock tCapture=null;
+ if(MinecraftServer.cauldronConfig.modPacketPlace.getValue()&&event instanceof ServerCustomPacketEvent){
+ EntityPlayerMP tPlayer=((NetHandlerPlayServer)((ServerCustomPacketEvent)event).handler).playerEntity;
+ tCapture=tPlayer.worldObj.mCapture.startCapture(tPlayer);
+ }
this.eventBus.post(event);
+
+ if(tCapture!=null) tCapture.endCapture();
if (event.reply != null)
{
ctx.channel().attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.REPLY);

View File

@ -0,0 +1,46 @@
--- ../src-base/minecraft/cpw/mods/fml/common/network/simpleimpl/SimpleChannelHandlerWrapper.java
+++ ../src-work/minecraft/cpw/mods/fml/common/network/simpleimpl/SimpleChannelHandlerWrapper.java
@@ -2,10 +2,9 @@
import org.apache.logging.log4j.Level;
-import net.minecraft.network.INetHandler;
-
import com.google.common.base.Preconditions;
+import cc.capture.type.CaptureBlock;
import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.common.network.FMLOutboundHandler;
import cpw.mods.fml.common.network.NetworkRegistry;
@@ -13,6 +12,10 @@
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.network.INetHandler;
+import net.minecraft.network.NetHandlerPlayServer;
+import net.minecraft.server.MinecraftServer;
public class SimpleChannelHandlerWrapper<REQ extends IMessage, REPLY extends IMessage> extends SimpleChannelInboundHandler<REQ> {
private final IMessageHandler<? super REQ, ? extends REPLY> messageHandler;
@@ -34,9 +37,17 @@
{
INetHandler iNetHandler = ctx.channel().attr(NetworkRegistry.NET_HANDLER).get();
MessageContext context = new MessageContext(iNetHandler, side);
- REPLY result = messageHandler.onMessage(msg, context);
- if (result != null)
- {
+
+ CaptureBlock tCapture=null;
+ if(MinecraftServer.cauldronConfig.modPacketPlace.getValue()&&iNetHandler instanceof NetHandlerPlayServer){
+ EntityPlayerMP tPlayer=((NetHandlerPlayServer)iNetHandler).playerEntity;
+ tCapture=tPlayer.worldObj.mCapture.startCapture(tPlayer);
+ }
+
+ REPLY result=messageHandler.onMessage(msg,context);
+
+ if(tCapture!=null) tCapture.endCapture();
+ if(result!=null){
ctx.channel().attr(FMLOutboundHandler.FML_MESSAGETARGET).set(FMLOutboundHandler.OutboundTarget.REPLY);
ctx.writeAndFlush(result).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
}