Merge pull request #1165 from MartinTheDragon/better-crane-config-logic

Improve crane I/O screwdriver logic
This commit is contained in:
HbmMods 2023-08-26 21:53:14 +02:00 committed by GitHub
commit ba8aa1e4b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 46 deletions

View File

@ -6,7 +6,6 @@ import com.hbm.items.tool.ItemTooling;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.tileentity.network.TileEntityCraneBase; import com.hbm.tileentity.network.TileEntityCraneBase;
import com.hbm.util.ChatBuilder;
import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
@ -23,7 +22,6 @@ import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon; import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -92,10 +90,6 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid
world.setBlockMetadataWithNotify(x, y, z, l, 2); world.setBlockMetadataWithNotify(x, y, z, l, 2);
} }
protected boolean hasReversedIO() {
return false;
}
@Override @Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if (tool != ToolType.SCREWDRIVER) return false; if (tool != ToolType.SCREWDRIVER) return false;
@ -105,28 +99,12 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid
TileEntityCraneBase craneTileEntity = (TileEntityCraneBase) te; TileEntityCraneBase craneTileEntity = (TileEntityCraneBase) te;
// some cranes like the ejector have reversed input and output sides ForgeDirection newDirection = ForgeDirection.getOrientation(side);
// so this bit of logic is to hide that away from the player
boolean actuallyCycleInput = player.isSneaking() != hasReversedIO();
ForgeDirection newDirection;
if (actuallyCycleInput) { // cycle input if (player.isSneaking()) {
// it's in reverse because players are more likely to want to turn the output from DOWN to UP craneTileEntity.setOutputOverride(newDirection);
int newValue = Math.floorMod(world.getBlockMetadata(x, y, z) - 1, 6); } else {
newDirection = ForgeDirection.getOrientation(newValue); craneTileEntity.setInput(newDirection);
world.setBlockMetadataWithNotify(x, y, z, newValue, 3);
craneTileEntity.ensureOutputOverrideValid();
} else { // cycle output
newDirection = craneTileEntity.cycleOutputOverride();
}
if (!world.isRemote) {
ChatBuilder message = player.isSneaking()
? ChatBuilder.start("Input: ").color(EnumChatFormatting.GREEN)
: ChatBuilder.start("Output: ").color(EnumChatFormatting.RED);
message.next(newDirection.name()).color(EnumChatFormatting.WHITE);
player.addChatComponentMessage(message.flush());
} }
return true; return true;

View File

@ -42,11 +42,6 @@ public class CraneExtractor extends BlockCraneBase {
this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_right_turn_down"); this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_right_turn_down");
} }
@Override
protected boolean hasReversedIO() {
return true;
}
@Override @Override
public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) {
int meta = world.getBlockMetadata(x, y, z); int meta = world.getBlockMetadata(x, y, z);

View File

@ -50,11 +50,6 @@ public class CraneUnboxer extends BlockCraneBase implements IEnterableBlock {
this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_right_turn_down"); this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_right_turn_down");
} }
@Override
protected boolean hasReversedIO() {
return true;
}
@Override @Override
public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) {
int meta = world.getBlockMetadata(x, y, z); int meta = world.getBlockMetadata(x, y, z);

View File

@ -46,18 +46,31 @@ public abstract class TileEntityCraneBase extends TileEntityMachineBase {
return outputOverride; return outputOverride;
} }
public ForgeDirection cycleOutputOverride() { public void setOutputOverride(ForgeDirection direction) {
do { ForgeDirection oldSide = getOutputSide();
outputOverride = ForgeDirection.getOrientation(Math.floorMod(outputOverride.ordinal() - 1, 7)); if (oldSide == direction)
} while (outputOverride.ordinal() == getBlockMetadata()); direction = direction.getOpposite();
onBlockChanged(); outputOverride = direction;
return outputOverride;
if (direction == getInputSide())
setInput(oldSide);
else
onBlockChanged();
} }
public void ensureOutputOverrideValid() { public void setInput(ForgeDirection direction) {
if (outputOverride.ordinal() == getBlockMetadata()) outputOverride = getOutputSide(); // save the current output, if it isn't saved yet
cycleOutputOverride();
ForgeDirection oldSide = getInputSide();
if (oldSide == direction)
direction = direction.getOpposite();
boolean needSwapOutput = direction == getOutputSide();
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), needSwapOutput ? 4 : 3);
if (needSwapOutput)
setOutputOverride(oldSide);
} }
protected void onBlockChanged() { protected void onBlockChanged() {