236 lines
10 KiB
Java
236 lines
10 KiB
Java
package com.pahimar.ee3.core.proxy;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.client.MinecraftForgeClient;
|
|
import net.minecraftforge.common.ForgeDirection;
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
|
|
import com.pahimar.ee3.EquivalentExchange3;
|
|
import com.pahimar.ee3.client.audio.SoundHandler;
|
|
import com.pahimar.ee3.client.renderer.item.ItemAlchemicalChestRenderer;
|
|
import com.pahimar.ee3.client.renderer.item.ItemAlchemyTableRenderer;
|
|
import com.pahimar.ee3.client.renderer.item.ItemAludelRenderer;
|
|
import com.pahimar.ee3.client.renderer.item.ItemCalcinatorRenderer;
|
|
import com.pahimar.ee3.client.renderer.item.ItemGlassBellRenderer;
|
|
import com.pahimar.ee3.client.renderer.item.ItemRenderingTankRenderer;
|
|
import com.pahimar.ee3.client.renderer.tileentity.TileEntityAlchemicalChestRenderer;
|
|
import com.pahimar.ee3.client.renderer.tileentity.TileEntityAlchemyTableRenderer;
|
|
import com.pahimar.ee3.client.renderer.tileentity.TileEntityAludelRenderer;
|
|
import com.pahimar.ee3.client.renderer.tileentity.TileEntityCalcinatorRenderer;
|
|
import com.pahimar.ee3.client.renderer.tileentity.TileEntityGlassBellRenderer;
|
|
import com.pahimar.ee3.client.renderer.tileentity.TileEntityRenderingTankRenderer;
|
|
import com.pahimar.ee3.core.handlers.DrawBlockHighlightHandler;
|
|
import com.pahimar.ee3.core.handlers.KeyBindingHandler;
|
|
import com.pahimar.ee3.core.handlers.TransmutationTargetOverlayHandler;
|
|
import com.pahimar.ee3.core.util.ItemUtil;
|
|
import com.pahimar.ee3.core.util.KeyBindingUtil;
|
|
import com.pahimar.ee3.core.util.TransmutationHelper;
|
|
import com.pahimar.ee3.item.IChargeable;
|
|
import com.pahimar.ee3.lib.ActionTypes;
|
|
import com.pahimar.ee3.lib.BlockIds;
|
|
import com.pahimar.ee3.lib.Colours;
|
|
import com.pahimar.ee3.lib.RenderIds;
|
|
import com.pahimar.ee3.network.PacketTypeHandler;
|
|
import com.pahimar.ee3.network.packet.PacketRequestEvent;
|
|
import com.pahimar.ee3.tileentity.TileAlchemicalChest;
|
|
import com.pahimar.ee3.tileentity.TileAlchemyTable;
|
|
import com.pahimar.ee3.tileentity.TileAludel;
|
|
import com.pahimar.ee3.tileentity.TileCalcinator;
|
|
import com.pahimar.ee3.tileentity.TileEE;
|
|
import com.pahimar.ee3.tileentity.TileGlassBell;
|
|
import com.pahimar.ee3.tileentity.TileRenderingTank;
|
|
|
|
import cpw.mods.fml.client.FMLClientHandler;
|
|
import cpw.mods.fml.client.registry.ClientRegistry;
|
|
import cpw.mods.fml.client.registry.KeyBindingRegistry;
|
|
import cpw.mods.fml.client.registry.RenderingRegistry;
|
|
import cpw.mods.fml.common.network.PacketDispatcher;
|
|
import cpw.mods.fml.common.registry.TickRegistry;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
/**
|
|
* Equivalent-Exchange-3
|
|
*
|
|
* ClientProxy
|
|
*
|
|
* @author pahimar
|
|
* @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html)
|
|
*
|
|
*/
|
|
public class ClientProxy extends CommonProxy {
|
|
|
|
@Override
|
|
public void registerKeyBindingHandler() {
|
|
|
|
KeyBindingRegistry.registerKeyBinding(new KeyBindingHandler());
|
|
}
|
|
|
|
@Override
|
|
public void registerRenderTickHandler() {
|
|
|
|
TickRegistry.registerTickHandler(new TransmutationTargetOverlayHandler(), Side.CLIENT);
|
|
}
|
|
|
|
@Override
|
|
public void registerDrawBlockHighlightHandler() {
|
|
|
|
MinecraftForge.EVENT_BUS.register(new DrawBlockHighlightHandler());
|
|
}
|
|
|
|
@Override
|
|
public void setKeyBinding(String name, int value) {
|
|
|
|
KeyBindingUtil.addKeyBinding(name, value);
|
|
KeyBindingUtil.addIsRepeating(false);
|
|
}
|
|
|
|
@Override
|
|
public void registerSoundHandler() {
|
|
|
|
MinecraftForge.EVENT_BUS.register(new SoundHandler());
|
|
}
|
|
|
|
@Override
|
|
public void initRenderingAndTextures() {
|
|
|
|
RenderIds.calcinatorRender = RenderingRegistry.getNextAvailableRenderId();
|
|
RenderIds.aludelRender = RenderingRegistry.getNextAvailableRenderId();
|
|
RenderIds.alchemicalChestRender = RenderingRegistry.getNextAvailableRenderId();
|
|
RenderIds.glassBell = RenderingRegistry.getNextAvailableRenderId();
|
|
RenderIds.alchemyTable = RenderingRegistry.getNextAvailableRenderId();
|
|
RenderIds.renderingTank = RenderingRegistry.getNextAvailableRenderId();
|
|
|
|
MinecraftForgeClient.registerItemRenderer(BlockIds.CALCINATOR, new ItemCalcinatorRenderer());
|
|
MinecraftForgeClient.registerItemRenderer(BlockIds.ALUDEL_BASE, new ItemAludelRenderer());
|
|
MinecraftForgeClient.registerItemRenderer(BlockIds.ALCHEMICAL_CHEST, new ItemAlchemicalChestRenderer());
|
|
MinecraftForgeClient.registerItemRenderer(BlockIds.GLASS_BELL, new ItemGlassBellRenderer());
|
|
MinecraftForgeClient.registerItemRenderer(BlockIds.ALCHEMY_TABLE, new ItemAlchemyTableRenderer());
|
|
MinecraftForgeClient.registerItemRenderer(BlockIds.RENDERING_TANK, new ItemRenderingTankRenderer());
|
|
}
|
|
|
|
@Override
|
|
public void registerTileEntities() {
|
|
|
|
super.registerTileEntities();
|
|
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileCalcinator.class, new TileEntityCalcinatorRenderer());
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileAludel.class, new TileEntityAludelRenderer());
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileAlchemicalChest.class, new TileEntityAlchemicalChestRenderer());
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileGlassBell.class, new TileEntityGlassBellRenderer());
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileAlchemyTable.class, new TileEntityAlchemyTableRenderer());
|
|
ClientRegistry.bindTileEntitySpecialRenderer(TileRenderingTank.class, new TileEntityRenderingTankRenderer());
|
|
}
|
|
|
|
@Override
|
|
public void sendRequestEventPacket(byte eventType, int originX, int originY, int originZ, byte sideHit, byte rangeX, byte rangeY, byte rangeZ, String data) {
|
|
|
|
PacketDispatcher.sendPacketToServer(PacketTypeHandler.populatePacket(new PacketRequestEvent(eventType, originX, originY, originZ, sideHit, rangeX, rangeY, rangeZ, data)));
|
|
}
|
|
|
|
@Override
|
|
public void handleTileEntityPacket(int x, int y, int z, ForgeDirection orientation, byte state, String customName) {
|
|
|
|
TileEntity tileEntity = FMLClientHandler.instance().getClient().theWorld.getBlockTileEntity(x, y, z);
|
|
|
|
if (tileEntity != null) {
|
|
if (tileEntity instanceof TileEE) {
|
|
((TileEE) tileEntity).setOrientation(orientation);
|
|
((TileEE) tileEntity).setState(state);
|
|
((TileEE) tileEntity).setCustomName(customName);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void handleTileWithItemPacket(int x, int y, int z, ForgeDirection orientation, byte state, String customName, int itemID, int metaData, int stackSize, int color) {
|
|
|
|
World world = FMLClientHandler.instance().getClient().theWorld;
|
|
TileEntity tileEntity = world.getBlockTileEntity(x, y, z);
|
|
|
|
this.handleTileEntityPacket(x, y, z, orientation, state, customName);
|
|
|
|
if (tileEntity != null) {
|
|
if (tileEntity instanceof TileGlassBell) {
|
|
|
|
ItemStack itemStack = new ItemStack(itemID, stackSize, metaData);
|
|
if (color != Integer.parseInt(Colours.PURE_WHITE, 16)) {
|
|
ItemUtil.setColor(itemStack, color);
|
|
}
|
|
|
|
((TileGlassBell) tileEntity).setInventorySlotContents(TileGlassBell.DISPLAY_SLOT_INVENTORY_INDEX, itemStack);
|
|
world.updateAllLightTypes(x, y, z);
|
|
}
|
|
else if (tileEntity instanceof TileAludel) {
|
|
|
|
ItemStack itemStack = new ItemStack(itemID, stackSize, metaData);
|
|
if (color != Integer.parseInt(Colours.PURE_WHITE, 16)) {
|
|
ItemUtil.setColor(itemStack, color);
|
|
}
|
|
|
|
((TileAludel) tileEntity).setInventorySlotContents(TileAludel.INPUT_INVENTORY_INDEX, itemStack);
|
|
world.updateAllLightTypes(x, y, z);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void transmuteBlock(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int sideHit) {
|
|
|
|
if (TransmutationHelper.targetBlockStack != null) {
|
|
if (itemStack != null) {
|
|
int pnX = 1;
|
|
int pnY = 1;
|
|
int pnZ = 1;
|
|
if (itemStack.getItem() instanceof IChargeable) {
|
|
int charge = ((IChargeable) itemStack.getItem()).getCharge(itemStack) * 2;
|
|
switch (ForgeDirection.getOrientation(sideHit)) {
|
|
case UP: {
|
|
pnX = 1 + charge;
|
|
pnZ = 1 + charge;
|
|
break;
|
|
}
|
|
case DOWN: {
|
|
pnX = 1 + charge;
|
|
pnZ = 1 + charge;
|
|
break;
|
|
}
|
|
case NORTH: {
|
|
pnX = 1 + charge;
|
|
pnY = 1 + charge;
|
|
break;
|
|
}
|
|
case SOUTH: {
|
|
pnX = 1 + charge;
|
|
pnY = 1 + charge;
|
|
break;
|
|
}
|
|
case EAST: {
|
|
pnY = 1 + charge;
|
|
pnZ = 1 + charge;
|
|
break;
|
|
}
|
|
case WEST: {
|
|
pnY = 1 + charge;
|
|
pnZ = 1 + charge;
|
|
break;
|
|
}
|
|
case UNKNOWN: {
|
|
pnX = 0;
|
|
pnY = 0;
|
|
pnZ = 0;
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
EquivalentExchange3.proxy.sendRequestEventPacket(ActionTypes.TRANSMUTATION, x, y, z, (byte) sideHit, (byte) pnX, (byte) pnY, (byte) pnZ, TransmutationHelper.formatTargetBlockInfo(TransmutationHelper.targetBlockStack));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|