From 1b6e2bd2c3aeee42e9827c32f9c579f7315ca571 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Thu, 27 Feb 2014 01:10:45 -0600 Subject: [PATCH] Entropy Manipulator Can now be dispensed. Matter Cannon Can now be dispensed. --- api | 2 +- helpers/DispenserEntropyManipulator.java | 38 ++++++++++++++ helpers/DispenserMatterCannon.java | 50 +++++++++++++++++++ .../tools/powered/ToolEntropyManipulator.java | 10 ++++ items/tools/powered/ToolMassCannon.java | 9 ++++ parts/automation/PartFormationPlane.java | 36 +------------ util/Platform.java | 38 ++++++++++++++ 7 files changed, 147 insertions(+), 36 deletions(-) create mode 100644 helpers/DispenserEntropyManipulator.java create mode 100644 helpers/DispenserMatterCannon.java diff --git a/api b/api index 8c7e3f1c7..2a5fdff79 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 8c7e3f1c77f3175da5e82bcdf9187e5dc5b6e0b0 +Subproject commit 2a5fdff7926de7ab79d1ec0a8f9aae488e87a447 diff --git a/helpers/DispenserEntropyManipulator.java b/helpers/DispenserEntropyManipulator.java new file mode 100644 index 000000000..afdb528ec --- /dev/null +++ b/helpers/DispenserEntropyManipulator.java @@ -0,0 +1,38 @@ +package appeng.helpers; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import appeng.items.tools.powered.ToolEntropyManipulator; +import appeng.util.Platform; + +final public class DispenserEntropyManipulator extends BehaviorDefaultDispenseItem +{ + + @Override + protected ItemStack dispenseStack(IBlockSource dispenser, ItemStack dispensedItem) + { + Item i = dispensedItem.getItem(); + if ( i instanceof ToolEntropyManipulator ) + { + EnumFacing enumfacing = BlockDispenser.func_149937_b( dispenser.getBlockMetadata() ); + ToolEntropyManipulator tm = (ToolEntropyManipulator) i; + + World w = dispenser.getWorld(); + if ( w instanceof WorldServer ) + { + int x = dispenser.getXInt() + enumfacing.getFrontOffsetX(); + int y = dispenser.getYInt() + enumfacing.getFrontOffsetY(); + int z = dispenser.getZInt() + enumfacing.getFrontOffsetZ(); + + tm.onItemUse( dispensedItem, Platform.getPlayer( (WorldServer) w ), w, x, y, z, enumfacing.ordinal(), 0.5f, 0.5f, 0.5f ); + } + } + return dispensedItem; + } +} diff --git a/helpers/DispenserMatterCannon.java b/helpers/DispenserMatterCannon.java new file mode 100644 index 000000000..06c612689 --- /dev/null +++ b/helpers/DispenserMatterCannon.java @@ -0,0 +1,50 @@ +package appeng.helpers; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.ForgeDirection; +import appeng.items.tools.powered.ToolMassCannon; +import appeng.util.Platform; + +final public class DispenserMatterCannon extends BehaviorDefaultDispenseItem +{ + + @Override + protected ItemStack dispenseStack(IBlockSource dispenser, ItemStack dispensedItem) + { + Item i = dispensedItem.getItem(); + if ( i instanceof ToolMassCannon ) + { + EnumFacing enumfacing = BlockDispenser.func_149937_b( dispenser.getBlockMetadata() ); + ForgeDirection dir = ForgeDirection.UNKNOWN; + for (ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) + { + if ( enumfacing.getFrontOffsetX() == d.offsetX && enumfacing.getFrontOffsetY() == d.offsetY && enumfacing.getFrontOffsetZ() == d.offsetZ ) + dir = d; + } + + ToolMassCannon tm = (ToolMassCannon) i; + + World w = dispenser.getWorld(); + if ( w instanceof WorldServer ) + { + EntityPlayer p = Platform.getPlayer( (WorldServer) w ); + Platform.configurePlayer( p, dir, dispenser.getBlockTileEntity() ); + + p.posX += dir.offsetX; + p.posY += dir.offsetY; + p.posZ += dir.offsetZ; + + dispensedItem = tm.onItemRightClick( dispensedItem, w, p ); + } + } + return dispensedItem; + } +} diff --git a/items/tools/powered/ToolEntropyManipulator.java b/items/tools/powered/ToolEntropyManipulator.java index 319bab081..ebad2852d 100644 --- a/items/tools/powered/ToolEntropyManipulator.java +++ b/items/tools/powered/ToolEntropyManipulator.java @@ -6,6 +6,7 @@ import java.util.Hashtable; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.block.BlockDispenser; import net.minecraft.block.BlockTNT; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; @@ -23,6 +24,7 @@ import net.minecraftforge.oredict.OreDictionary; import appeng.block.misc.BlockTinyTNT; import appeng.core.AEConfig; import appeng.core.features.AEFeature; +import appeng.helpers.DispenserEntropyManipulator; import appeng.items.tools.powered.powersink.AEBasePoweredItem; import appeng.util.InWorldToolOperationResult; import appeng.util.Platform; @@ -154,6 +156,14 @@ public class ToolEntropyManipulator extends AEBasePoweredItem heatUp.put( new Combo( Blocks.snow, OreDictionary.WILDCARD_VALUE ), new InWorldToolOperationResult( new ItemStack( Blocks.flowing_water ) ) ); } + @Override + public void postInit() + { + super.postInit(); + + BlockDispenser.dispenseBehaviorRegistry.putObject( this, new DispenserEntropyManipulator() ); + } + @Override public boolean hitEntity(ItemStack item, EntityLivingBase target, EntityLivingBase hitter) { diff --git a/items/tools/powered/ToolMassCannon.java b/items/tools/powered/ToolMassCannon.java index b7e009a87..791662aa0 100644 --- a/items/tools/powered/ToolMassCannon.java +++ b/items/tools/powered/ToolMassCannon.java @@ -4,6 +4,7 @@ import java.util.EnumSet; import java.util.List; import net.minecraft.block.Block; +import net.minecraft.block.BlockDispenser; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; @@ -35,6 +36,7 @@ import appeng.core.features.AEFeature; import appeng.core.localization.GuiText; import appeng.core.localization.PlayerMessages; import appeng.core.sync.packets.PacketMatterCannon; +import appeng.helpers.DispenserMatterCannon; import appeng.items.contents.CellConfig; import appeng.items.contents.CellUpgrades; import appeng.items.tools.powered.powersink.AEBasePoweredItem; @@ -51,6 +53,13 @@ public class ToolMassCannon extends AEBasePoweredItem implements IStorageCell maxStoredPower = AEConfig.instance.mattercannon_battery; } + @Override + public void postInit() + { + super.postInit(); + BlockDispenser.dispenseBehaviorRegistry.putObject( this, new DispenserMatterCannon() ); + } + @Override public void addInformation(ItemStack is, EntityPlayer player, List lines, boolean advancedItemTooltips) { diff --git a/parts/automation/PartFormationPlane.java b/parts/automation/PartFormationPlane.java index eb70047b9..5027942ff 100644 --- a/parts/automation/PartFormationPlane.java +++ b/parts/automation/PartFormationPlane.java @@ -382,41 +382,7 @@ public class PartFormationPlane extends PartUpgradeable implements ICellContaine if ( i instanceof ItemBlock || i instanceof IPlantable ) { EntityPlayer player = Platform.getPlayer( (WorldServer) w ); - - float pitch = 0.0f, yaw = 0.0f; - player.yOffset = 1.8f; - - switch (side) - { - case DOWN: - pitch = 90.0f; - player.yOffset = -1.8f; - break; - case EAST: - yaw = -90.0f; - break; - case NORTH: - yaw = 180.0f; - break; - case SOUTH: - yaw = 0.0f; - break; - case UNKNOWN: - break; - case UP: - pitch = 90.0f; - break; - case WEST: - yaw = 90.0f; - break; - } - - player.posX = (float) tile.xCoord + 0.5; - player.posY = (float) tile.yCoord + 0.5; - player.posZ = (float) tile.zCoord + 0.5; - - player.rotationPitch = player.prevCameraPitch = player.cameraPitch = pitch; - player.rotationYaw = player.prevCameraYaw = player.cameraYaw = yaw; + Platform.configurePlayer( player, side, tile ); maxStorage = is.stackSize; worked = true; diff --git a/util/Platform.java b/util/Platform.java index 9bb11fb45..6caa40a91 100644 --- a/util/Platform.java +++ b/util/Platform.java @@ -1478,4 +1478,42 @@ public class Platform return false; } + public static void configurePlayer(EntityPlayer player, ForgeDirection side, TileEntity tile) + { + float pitch = 0.0f, yaw = 0.0f; + player.yOffset = 1.8f; + + switch (side) + { + case DOWN: + pitch = 90.0f; + player.yOffset = -1.8f; + break; + case EAST: + yaw = -90.0f; + break; + case NORTH: + yaw = 180.0f; + break; + case SOUTH: + yaw = 0.0f; + break; + case UNKNOWN: + break; + case UP: + pitch = 90.0f; + break; + case WEST: + yaw = 90.0f; + break; + } + + player.posX = (float) tile.xCoord + 0.5; + player.posY = (float) tile.yCoord + 0.5; + player.posZ = (float) tile.zCoord + 0.5; + + player.rotationPitch = player.prevCameraPitch = player.cameraPitch = pitch; + player.rotationYaw = player.prevCameraYaw = player.cameraYaw = yaw; + } + }