Attempt to fix some linking issues

This commit is contained in:
Calclavia 2014-02-04 18:57:15 +08:00
parent 43754c4163
commit e04b1d1004
11 changed files with 42 additions and 142 deletions

View file

@ -16,7 +16,6 @@ import org.modstats.ModstatInfo;
import org.modstats.Modstats;
import resonantinduction.core.handler.TextureHookHandler;
import resonantinduction.core.handler.ToolModeLink;
import resonantinduction.core.prefab.part.PacketMultiPart;
import resonantinduction.core.resource.BlockDust;
import resonantinduction.core.resource.ResourceGenerator;
@ -24,6 +23,7 @@ import resonantinduction.core.resource.TileMaterial;
import resonantinduction.core.resource.fluid.TileFluidMixture;
import resonantinduction.core.resource.item.ItemOreResource;
import calclavia.components.tool.ToolMode;
import calclavia.components.tool.ToolModeLink;
import calclavia.lib.content.ContentRegistry;
import calclavia.lib.network.PacketAnnotation;
import calclavia.lib.network.PacketHandler;

View file

@ -1,19 +0,0 @@
package resonantinduction.core.handler;
import net.minecraft.entity.player.EntityPlayer;
import universalelectricity.api.vector.VectorWorld;
/**
* @author Calclavia
*
*/
public interface ILinkable
{
/**
*
* @param player
* @param vector
* @return True to clear the link.
*/
public boolean onLink(EntityPlayer player, VectorWorld vector);
}

View file

@ -1,96 +0,0 @@
/**
*
*/
package resonantinduction.core.handler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import universalelectricity.api.vector.VectorWorld;
import calclavia.components.tool.ToolMode;
import codechicken.multipart.ControlKeyModifer;
/**
* @author Calclavia
*/
public class ToolModeLink extends ToolMode
{
@Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
TileEntity tile = world.getBlockTileEntity(x, y, z);
if (ControlKeyModifer.isControlDown(player))
{
if (tile instanceof ILinkable)
{
if (!world.isRemote)
{
if (((ILinkable) tile).onLink(player, this.getLink(stack)))
{
clearLink(stack);
player.addChatMessage("Link cleared.");
return true;
}
}
}
}
if (!world.isRemote)
{
player.addChatMessage("Set link to block [" + x + ", " + y + ", " + z + "], Dimension: '" + world.provider.getDimensionName() + "'");
setLink(stack, new VectorWorld(world, x, y, z));
if (tile instanceof ILinkable)
{
if (!world.isRemote)
{
((ILinkable) tile).onLink(player, this.getLink(stack));
}
}
return true;
}
return false;
}
@Override
public String getName()
{
return "toolmode.link.name";
}
public boolean hasLink(ItemStack itemStack)
{
return getLink(itemStack) != null;
}
public VectorWorld getLink(ItemStack itemStack)
{
if (itemStack.stackTagCompound == null || !itemStack.getTagCompound().hasKey("link"))
{
return null;
}
return new VectorWorld(itemStack.getTagCompound().getCompoundTag("link"));
}
public void setLink(ItemStack itemStack, VectorWorld vec)
{
if (itemStack.getTagCompound() == null)
{
itemStack.setTagCompound(new NBTTagCompound());
}
itemStack.getTagCompound().setCompoundTag("link", vec.writeToNBT(new NBTTagCompound()));
}
public void clearLink(ItemStack itemStack)
{
itemStack.getTagCompound().removeTag("link");
}
}

View file

@ -16,19 +16,19 @@ import calclavia.lib.prefab.block.BlockSidedIO;
*
* @author Calclavia
*/
public class BlockIOBase extends BlockSidedIO
public class BlockRIIO extends BlockSidedIO
{
public BlockIOBase(String name)
public BlockRIIO(String name)
{
this(name, Settings.getNextBlockID());
}
public BlockIOBase(String name, int id)
public BlockRIIO(String name, int id)
{
this(name, id, UniversalElectricity.machine);
}
public BlockIOBase(String name, int id, Material material)
public BlockRIIO(String name, int id, Material material)
{
super(Settings.CONFIGURATION.get(Configuration.CATEGORY_BLOCK, name, id).getInt(id), material);
this.setCreativeTab(TabRI.CORE);

View file

@ -15,7 +15,7 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
import resonantinduction.core.Reference;
import resonantinduction.core.Settings;
import resonantinduction.core.prefab.block.BlockIOBase;
import resonantinduction.core.prefab.block.BlockRIIO;
import resonantinduction.core.render.RIBlockRenderingHandler;
import universalelectricity.api.CompatibilityModule;
import cpw.mods.fml.relauncher.Side;
@ -27,7 +27,7 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia
*
*/
public class BlockBattery extends BlockIOBase implements ITileEntityProvider
public class BlockBattery extends BlockRIIO implements ITileEntityProvider
{
public BlockBattery()
{

View file

@ -3,12 +3,17 @@ package resonantinduction.electrical.levitator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.Reference;
import resonantinduction.core.prefab.block.BlockRIRotatable;
import resonantinduction.core.render.RIBlockRenderingHandler;
import universalelectricity.api.vector.VectorWorld;
import calclavia.components.tool.ToolModeLink;
import calclavia.lib.prefab.block.ILinkable;
import calclavia.lib.utility.WrenchUtility;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -49,11 +54,27 @@ public class BlockLevitator extends BlockRIRotatable
@Override
public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ)
{
if (!entityPlayer.isSneaking())
ItemStack itemStack = entityPlayer.getCurrentEquippedItem();
if (WrenchUtility.isWrench(itemStack))
{
TileLevitator levitator = (TileLevitator) world.getBlockTileEntity(x, y, z);
levitator.incrementFacing();
return true;
TileEntity tile = world.getBlockTileEntity(x, y, z);
if (tile instanceof ILinkable)
{
ILinkable linkable = (ILinkable) tile;
if (linkable.onLink(entityPlayer, ToolModeLink.getLink(itemStack)))
{
ToolModeLink.clearLink(itemStack);
}
else
{
ToolModeLink.setLink(itemStack, new VectorWorld(world, x, y, z));
}
return true;
}
}
return false;

View file

@ -23,13 +23,13 @@ import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.IFluidBlock;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.Settings;
import resonantinduction.core.handler.ILinkable;
import resonantinduction.electrical.Electrical;
import resonantinduction.electrical.tesla.TileTesla;
import universalelectricity.api.vector.Vector3;
import universalelectricity.api.vector.VectorWorld;
import calclavia.lib.network.IPacketReceiver;
import calclavia.lib.network.IPacketSender;
import calclavia.lib.prefab.block.ILinkable;
import calclavia.lib.prefab.tile.TileAdvanced;
import calclavia.lib.render.EnumColor;
import calclavia.lib.utility.inventory.InventoryUtility;
@ -456,12 +456,6 @@ public class TileLevitator extends TileAdvanced implements IPacketReceiver, IPac
return null;
}
public void incrementFacing()
{
int newOrdinal = getDirection().ordinal() < 5 ? getDirection().ordinal() + 1 : 0;
setDirection(ForgeDirection.getOrientation(newOrdinal));
}
public ForgeDirection getDirection()
{
return ForgeDirection.getOrientation(getBlockType() != null ? getBlockMetadata() : 0);

View file

@ -11,7 +11,7 @@ import net.minecraft.world.World;
import resonantinduction.core.Reference;
import resonantinduction.core.Settings;
import resonantinduction.core.Utility;
import resonantinduction.core.prefab.block.BlockIOBase;
import resonantinduction.core.prefab.block.BlockRIIO;
import resonantinduction.core.render.RIBlockRenderingHandler;
import calclavia.lib.utility.LanguageUtility;
import cpw.mods.fml.relauncher.Side;
@ -21,7 +21,7 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author Calclavia
*
*/
public class BlockTesla extends BlockIOBase implements ITileEntityProvider
public class BlockTesla extends BlockRIIO implements ITileEntityProvider
{
public BlockTesla()
{

View file

@ -22,7 +22,6 @@ import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.Settings;
import resonantinduction.core.handler.ILinkable;
import resonantinduction.electrical.Electrical;
import universalelectricity.api.energy.EnergyStorageHandler;
import universalelectricity.api.vector.Vector3;
@ -32,6 +31,7 @@ import calclavia.lib.multiblock.reference.IMultiBlockStructure;
import calclavia.lib.multiblock.reference.MultiBlockHandler;
import calclavia.lib.network.IPacketReceiver;
import calclavia.lib.network.IPacketSender;
import calclavia.lib.prefab.block.ILinkable;
import calclavia.lib.prefab.tile.TileElectrical;
import calclavia.lib.render.EnumColor;
import calclavia.lib.utility.LanguageUtility;

View file

@ -18,7 +18,7 @@ import resonantinduction.api.fluid.IFluidPipe;
import resonantinduction.core.prefab.part.PartFramedConnection;
import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.fluid.network.PipeNetwork;
import calclavia.lib.prefab.block.BlockAdvanced;
import calclavia.lib.utility.WrenchUtility;
import codechicken.lib.render.CCRenderState;
import codechicken.lib.render.IconTransformation;
import codechicken.lib.render.RenderUtils;
@ -76,13 +76,13 @@ public class PartPipe extends PartFramedConnection<EnumPipeMaterial, IFluidPipe,
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition part, ItemStack item)
{
if (BlockAdvanced.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z()))
if (WrenchUtility.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z()))
{
if (!world().isRemote)
{
isExtracting = !isExtracting;
player.addChatMessage("Pipe extraction mode: " + isExtracting);
BlockAdvanced.damageWrench(player, player.getCurrentEquippedItem(), x(), y(), z());
WrenchUtility.damageWrench(player, player.getCurrentEquippedItem(), x(), y(), z());
}
return true;
}

View file

@ -16,7 +16,7 @@ import resonantinduction.mechanical.network.IMechanical;
import resonantinduction.mechanical.network.PartMechanical;
import calclavia.lib.multiblock.reference.IMultiBlockStructure;
import calclavia.lib.multiblock.reference.MultiBlockHandler;
import calclavia.lib.prefab.block.BlockAdvanced;
import calclavia.lib.utility.WrenchUtility;
import codechicken.lib.vec.Cuboid6;
import codechicken.lib.vec.Rotation;
import codechicken.lib.vec.Transformation;
@ -114,7 +114,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
@Override
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
{
if (BlockAdvanced.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z()))
if (WrenchUtility.isUsableWrench(player, player.getCurrentEquippedItem(), x(), y(), z()))
{
if (player.isSneaking())
{
@ -133,7 +133,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
getMultiBlock().get().manualCrankTime = 10;
}
BlockAdvanced.damageWrench(player, player.getCurrentEquippedItem(), x(), y(), z());
WrenchUtility.damageWrench(player, player.getCurrentEquippedItem(), x(), y(), z());
return true;
}