mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-11-20 23:34:48 +00:00
Move from FMLEventChannel to SimpleNetworkWrapper
- Split each network packet into it's own individual IMessage class. - Move the TextTable into separate classes for server and client based rendering.
This commit is contained in:
@@ -14,7 +14,6 @@ import dan200.computercraft.shared.PocketUpgrades;
|
||||
import dan200.computercraft.shared.command.CommandComputerCraft;
|
||||
import dan200.computercraft.shared.command.ContainerViewComputer;
|
||||
import dan200.computercraft.shared.common.DefaultBundledRedstoneProvider;
|
||||
import dan200.computercraft.shared.common.TileGeneric;
|
||||
import dan200.computercraft.shared.computer.blocks.BlockCommandComputer;
|
||||
import dan200.computercraft.shared.computer.blocks.BlockComputer;
|
||||
import dan200.computercraft.shared.computer.blocks.TileCommandComputer;
|
||||
@@ -31,7 +30,12 @@ import dan200.computercraft.shared.media.items.ItemDiskExpanded;
|
||||
import dan200.computercraft.shared.media.items.ItemDiskLegacy;
|
||||
import dan200.computercraft.shared.media.items.ItemPrintout;
|
||||
import dan200.computercraft.shared.media.items.ItemTreasureDisk;
|
||||
import dan200.computercraft.shared.network.ComputerCraftPacket;
|
||||
import dan200.computercraft.shared.network.NetworkMessage;
|
||||
import dan200.computercraft.shared.network.client.*;
|
||||
import dan200.computercraft.shared.network.server.ComputerActionServerMessage;
|
||||
import dan200.computercraft.shared.network.server.ComputerServerMessage;
|
||||
import dan200.computercraft.shared.network.server.QueueEventServerMessage;
|
||||
import dan200.computercraft.shared.network.server.RequestComputerMessage;
|
||||
import dan200.computercraft.shared.peripheral.commandblock.CommandBlockPeripheralProvider;
|
||||
import dan200.computercraft.shared.peripheral.common.BlockPeripheral;
|
||||
import dan200.computercraft.shared.peripheral.common.DefaultPeripheralProvider;
|
||||
@@ -63,18 +67,15 @@ import net.minecraft.block.Block;
|
||||
import net.minecraft.command.CommandHandler;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.init.Items;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.item.crafting.Ingredient;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.IThreadListener;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@@ -92,6 +93,7 @@ import net.minecraftforge.fml.common.network.FMLNetworkEvent;
|
||||
import net.minecraftforge.fml.common.network.IGuiHandler;
|
||||
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.registries.IForgeRegistry;
|
||||
import pl.asie.charset.ModCharset;
|
||||
|
||||
@@ -111,6 +113,7 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
|
||||
{
|
||||
registerTileEntities();
|
||||
registerForgeHandlers();
|
||||
registerNetwork();
|
||||
|
||||
Fixes.register( FMLCommonHandler.instance().getDataFixer() );
|
||||
if( Loader.isModLoaded( ModCharset.MODID ) ) IntegrationCharset.register();
|
||||
@@ -123,67 +126,6 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
|
||||
handler.registerCommand( new CommandComputerCraft() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePacket( final ComputerCraftPacket packet, final EntityPlayer player )
|
||||
{
|
||||
IThreadListener listener = player.getServer();
|
||||
if( listener != null )
|
||||
{
|
||||
if( listener.isCallingFromMinecraftThread() )
|
||||
{
|
||||
processPacket( packet, player );
|
||||
}
|
||||
else
|
||||
{
|
||||
listener.addScheduledTask( () -> processPacket( packet, player ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void processPacket( ComputerCraftPacket packet, EntityPlayer player )
|
||||
{
|
||||
switch( packet.m_packetType )
|
||||
{
|
||||
///////////////////////////////////
|
||||
// Packets from Client to Server //
|
||||
///////////////////////////////////
|
||||
case ComputerCraftPacket.TurnOn:
|
||||
case ComputerCraftPacket.Shutdown:
|
||||
case ComputerCraftPacket.Reboot:
|
||||
case ComputerCraftPacket.QueueEvent:
|
||||
case ComputerCraftPacket.RequestComputerUpdate:
|
||||
case ComputerCraftPacket.SetLabel:
|
||||
{
|
||||
int instance = packet.m_dataInt[0];
|
||||
ServerComputer computer = ComputerCraft.serverComputerRegistry.get( instance );
|
||||
if( computer != null )
|
||||
{
|
||||
computer.handlePacket( packet, player );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ComputerCraftPacket.RequestTileEntityUpdate:
|
||||
{
|
||||
int x = packet.m_dataInt[0];
|
||||
int y = packet.m_dataInt[1];
|
||||
int z = packet.m_dataInt[2];
|
||||
BlockPos pos = new BlockPos( x, y, z );
|
||||
World world = player.getEntityWorld();
|
||||
TileEntity tileEntity = world.getTileEntity( pos );
|
||||
if( tileEntity != null && tileEntity instanceof TileGeneric )
|
||||
{
|
||||
TileGeneric generic = (TileGeneric) tileEntity;
|
||||
SPacketUpdateTileEntity description = generic.getUpdatePacket();
|
||||
if( description != null )
|
||||
{
|
||||
((EntityPlayerMP) player).connection.sendPacket( description );
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void registerBlocks( RegistryEvent.Register<Block> event )
|
||||
{
|
||||
@@ -431,8 +373,53 @@ public abstract class ComputerCraftProxyCommon implements IComputerCraftProxy
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler( ComputerCraft.instance, handlers );
|
||||
}
|
||||
|
||||
public class ForgeHandlers implements
|
||||
IGuiHandler
|
||||
private void registerNetwork()
|
||||
{
|
||||
// Server messages
|
||||
|
||||
ComputerServerMessage.register( ComputerActionServerMessage::new, ( computer, packet ) -> {
|
||||
switch( packet.getAction() )
|
||||
{
|
||||
case TURN_ON:
|
||||
computer.turnOn();
|
||||
break;
|
||||
case REBOOT:
|
||||
computer.reboot();
|
||||
break;
|
||||
case SHUTDOWN:
|
||||
computer.shutdown();
|
||||
break;
|
||||
}
|
||||
} );
|
||||
|
||||
ComputerServerMessage.register( QueueEventServerMessage::new, ( computer, packet ) ->
|
||||
computer.queueEvent( packet.getEvent(), packet.getArgs() ) );
|
||||
|
||||
NetworkMessage.registerMainThread( Side.SERVER, RequestComputerMessage::new, ( context, packet ) -> {
|
||||
ServerComputer computer = ComputerCraft.serverComputerRegistry.get( packet.getInstance() );
|
||||
if( computer != null ) computer.sendComputerState( context.getServerHandler().player );
|
||||
} );
|
||||
|
||||
// Client messages
|
||||
|
||||
NetworkMessage.registerMainThread( Side.CLIENT, PlayRecordClientMessage::new, ( computer, packet ) -> {
|
||||
playRecordClient( packet.getPos(), packet.getSoundEvent(), packet.getName() );
|
||||
} );
|
||||
|
||||
ComputerClientMessage.register( ComputerDataClientMessage::new, ( computer, packet ) ->
|
||||
computer.setState( packet.getComputerId(), packet.getLabel(), packet.getState(), packet.getUserData() ) );
|
||||
|
||||
ComputerClientMessage.register( ComputerTerminalClientMessage::new, ( computer, packet ) ->
|
||||
computer.readDescription( packet.getTag() ) );
|
||||
|
||||
NetworkMessage.registerMainThread( Side.CLIENT, ComputerDeletedClientMessage::new, ( context, packet ) ->
|
||||
ComputerCraft.clientComputerRegistry.remove( packet.getInstanceId() ) );
|
||||
|
||||
NetworkMessage.registerMainThread( Side.CLIENT, ChatTableClientMessage::new, ( context, packet ) ->
|
||||
showTableClient( packet.getTable() ) );
|
||||
}
|
||||
|
||||
public class ForgeHandlers implements IGuiHandler
|
||||
{
|
||||
private ForgeHandlers()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user