add a stripes robot
This commit is contained in:
parent
e9af8230e6
commit
09b004e790
22 changed files with 392 additions and 40 deletions
18
api/buildcraft/api/transport/IStripesActivator.java
Normal file
18
api/buildcraft/api/transport/IStripesActivator.java
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
|
||||||
|
* http://www.mod-buildcraft.com
|
||||||
|
*
|
||||||
|
* The BuildCraft API is distributed under the terms of the MIT License.
|
||||||
|
* Please check the contents of the license, which should be located
|
||||||
|
* as "LICENSE.API" in the BuildCraft source code distribution.
|
||||||
|
*/
|
||||||
|
package buildcraft.api.transport;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
public interface IStripesActivator {
|
||||||
|
void sendItem(ItemStack itemStack, ForgeDirection direction);
|
||||||
|
void dropItem(ItemStack itemStack, ForgeDirection direction);
|
||||||
|
}
|
|
@ -25,5 +25,5 @@ public interface IStripesHandler {
|
||||||
boolean shouldHandle(ItemStack stack);
|
boolean shouldHandle(ItemStack stack);
|
||||||
|
|
||||||
boolean handle(World world, int x, int y, int z, ForgeDirection direction,
|
boolean handle(World world, int x, int y, int z, ForgeDirection direction,
|
||||||
ItemStack stack, EntityPlayer player, IStripesPipe pipe);
|
ItemStack stack, EntityPlayer player, IStripesActivator activator);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,11 +8,5 @@
|
||||||
*/
|
*/
|
||||||
package buildcraft.api.transport;
|
package buildcraft.api.transport;
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
public interface IStripesPipe extends IPipe, IStripesActivator {
|
||||||
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
|
|
||||||
public interface IStripesPipe extends IPipe {
|
|
||||||
void sendItem(ItemStack itemStack, ForgeDirection direction);
|
|
||||||
void dropItem(ItemStack itemStack, ForgeDirection direction);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ buildcraft.boardRobotBuilder=Builder
|
||||||
buildcraft.boardRobotCrafter=Crafter
|
buildcraft.boardRobotCrafter=Crafter
|
||||||
buildcraft.boardRobotDelivery=Delivery
|
buildcraft.boardRobotDelivery=Delivery
|
||||||
buildcraft.boardRobotPump=Pump
|
buildcraft.boardRobotPump=Pump
|
||||||
|
buildcraft.boardRobotStripes=Stripes
|
||||||
|
|
||||||
chat.gateCopier.clear=Gate information cleared.
|
chat.gateCopier.clear=Gate information cleared.
|
||||||
chat.gateCopier.gateCopied=Copied gate information to copier.
|
chat.gateCopier.gateCopied=Copied gate information to copier.
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 896 B |
|
@ -183,6 +183,7 @@ import buildcraft.robots.boards.BoardRobotPicker;
|
||||||
import buildcraft.robots.boards.BoardRobotPlanter;
|
import buildcraft.robots.boards.BoardRobotPlanter;
|
||||||
import buildcraft.robots.boards.BoardRobotPump;
|
import buildcraft.robots.boards.BoardRobotPump;
|
||||||
import buildcraft.robots.boards.BoardRobotShovelman;
|
import buildcraft.robots.boards.BoardRobotShovelman;
|
||||||
|
import buildcraft.robots.boards.BoardRobotStripes;
|
||||||
|
|
||||||
@Mod(name = "BuildCraft", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Core", acceptedMinecraftVersions = "[1.7.10,1.8)", dependencies = "required-after:Forge@[10.13.0.1207,)")
|
@Mod(name = "BuildCraft", version = Version.VERSION, useMetadata = false, modid = "BuildCraft|Core", acceptedMinecraftVersions = "[1.7.10,1.8)", dependencies = "required-after:Forge@[10.13.0.1207,)")
|
||||||
public class BuildCraftCore extends BuildCraftMod {
|
public class BuildCraftCore extends BuildCraftMod {
|
||||||
|
@ -432,6 +433,7 @@ public class BuildCraftCore extends BuildCraftMod {
|
||||||
RobotManager.registerAIRobot(BoardRobotPlanter.class, "boardRobotPlanter", "buildcraft.core.robots.boards.BoardRobotPlanter");
|
RobotManager.registerAIRobot(BoardRobotPlanter.class, "boardRobotPlanter", "buildcraft.core.robots.boards.BoardRobotPlanter");
|
||||||
RobotManager.registerAIRobot(BoardRobotPump.class, "boardRobotPump", "buildcraft.core.robots.boards.BoardRobotPump");
|
RobotManager.registerAIRobot(BoardRobotPump.class, "boardRobotPump", "buildcraft.core.robots.boards.BoardRobotPump");
|
||||||
RobotManager.registerAIRobot(BoardRobotShovelman.class, "boardRobotShovelman", "buildcraft.core.robots.boards.BoardRobotShovelman");
|
RobotManager.registerAIRobot(BoardRobotShovelman.class, "boardRobotShovelman", "buildcraft.core.robots.boards.BoardRobotShovelman");
|
||||||
|
RobotManager.registerAIRobot(BoardRobotStripes.class, "boardRobotStripes", "buildcraft.core.robots.boards.BoardRobotStripes");
|
||||||
RobotManager.registerAIRobot(AIRobotAttack.class, "aiRobotAttack", "buildcraft.core.robots.AIRobotAttack");
|
RobotManager.registerAIRobot(AIRobotAttack.class, "aiRobotAttack", "buildcraft.core.robots.AIRobotAttack");
|
||||||
RobotManager.registerAIRobot(AIRobotBreak.class, "aiRobotBreak", "buildcraft.core.robots.AIRobotBreak");
|
RobotManager.registerAIRobot(AIRobotBreak.class, "aiRobotBreak", "buildcraft.core.robots.AIRobotBreak");
|
||||||
RobotManager.registerAIRobot(AIRobotCraftAssemblyTable.class, "aiRobotCraftAssemblyTable", "buildcraft.core.robots.AIRobotCraftAssemblyTable");
|
RobotManager.registerAIRobot(AIRobotCraftAssemblyTable.class, "aiRobotCraftAssemblyTable", "buildcraft.core.robots.AIRobotCraftAssemblyTable");
|
||||||
|
|
|
@ -65,6 +65,7 @@ import buildcraft.robots.boards.BoardRobotPickerNBT;
|
||||||
import buildcraft.robots.boards.BoardRobotPlanterNBT;
|
import buildcraft.robots.boards.BoardRobotPlanterNBT;
|
||||||
import buildcraft.robots.boards.BoardRobotPumpNBT;
|
import buildcraft.robots.boards.BoardRobotPumpNBT;
|
||||||
import buildcraft.robots.boards.BoardRobotShovelmanNBT;
|
import buildcraft.robots.boards.BoardRobotShovelmanNBT;
|
||||||
|
import buildcraft.robots.boards.BoardRobotStripesNBT;
|
||||||
import buildcraft.robots.statements.ActionRobotFilter;
|
import buildcraft.robots.statements.ActionRobotFilter;
|
||||||
import buildcraft.robots.statements.ActionRobotFilterTool;
|
import buildcraft.robots.statements.ActionRobotFilterTool;
|
||||||
import buildcraft.robots.statements.ActionRobotGotoStation;
|
import buildcraft.robots.statements.ActionRobotGotoStation;
|
||||||
|
@ -197,6 +198,7 @@ public class BuildCraftSilicon extends BuildCraftMod {
|
||||||
RedstoneBoardRegistry.instance.registerBoardClass(BoardRobotBomberNBT.instance, 1);
|
RedstoneBoardRegistry.instance.registerBoardClass(BoardRobotBomberNBT.instance, 1);
|
||||||
|
|
||||||
RedstoneBoardRegistry.instance.registerBoardClass(BoardRobotBuilderNBT.instance, 0.5F);
|
RedstoneBoardRegistry.instance.registerBoardClass(BoardRobotBuilderNBT.instance, 0.5F);
|
||||||
|
RedstoneBoardRegistry.instance.registerBoardClass(BoardRobotStripesNBT.instance, 0.5F);
|
||||||
|
|
||||||
StatementManager.registerActionProvider(new RobotsActionProvider());
|
StatementManager.registerActionProvider(new RobotsActionProvider());
|
||||||
StatementManager.registerTriggerProvider(new RobotsTriggerProvider());
|
StatementManager.registerTriggerProvider(new RobotsTriggerProvider());
|
||||||
|
|
|
@ -363,9 +363,9 @@ public class Box implements IBox, ISerializable {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockIndex getRandomBlockIndex(Random rand) {
|
public BlockIndex getRandomBlockIndex(Random rand) {
|
||||||
int x = xMin + rand.nextInt(xMax - xMin);
|
int x = (xMax > xMin) ? xMin + rand.nextInt(xMax - xMin) : xMin;
|
||||||
int y = (yMax > yMin) ? yMin + rand.nextInt(yMax - yMin) : yMin;
|
int y = (yMax > yMin) ? yMin + rand.nextInt(yMax - yMin) : yMin;
|
||||||
int z = zMin + rand.nextInt(zMax - zMin);
|
int z = (zMax > zMin) ? zMin + rand.nextInt(zMax - zMin) : zMin;
|
||||||
|
|
||||||
return new BlockIndex(x, y, z);
|
return new BlockIndex(x, y, z);
|
||||||
|
|
||||||
|
|
|
@ -212,6 +212,20 @@ public class ItemMapLocation extends ItemBuildCraft {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IBox getPointBox(ItemStack item) {
|
||||||
|
NBTTagCompound cpt = NBTUtils.getItemData(item);
|
||||||
|
|
||||||
|
if (cpt.hasKey("kind") && cpt.getByte("kind") == 0) {
|
||||||
|
int x = cpt.getInteger("x");
|
||||||
|
int y = cpt.getInteger("y");
|
||||||
|
int z = cpt.getInteger("z");
|
||||||
|
|
||||||
|
return new Box(x, y, z, x, y, z);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static ForgeDirection getSide(ItemStack item) {
|
public static ForgeDirection getSide(ItemStack item) {
|
||||||
NBTTagCompound cpt = NBTUtils.getItemData(item);
|
NBTTagCompound cpt = NBTUtils.getItemData(item);
|
||||||
|
|
||||||
|
@ -232,6 +246,8 @@ public class ItemMapLocation extends ItemBuildCraft {
|
||||||
return plan;
|
return plan;
|
||||||
} else if (cpt.hasKey("kind") && cpt.getByte("kind") == 1) {
|
} else if (cpt.hasKey("kind") && cpt.getByte("kind") == 1) {
|
||||||
return getBox(item);
|
return getBox(item);
|
||||||
|
} else if (cpt.hasKey("kind") && cpt.getByte("kind") == 0) {
|
||||||
|
return getPointBox(item);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import net.minecraft.nbt.NBTTagList;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.DamageSource;
|
import net.minecraft.util.DamageSource;
|
||||||
import net.minecraft.util.EntityDamageSource;
|
import net.minecraft.util.EntityDamageSource;
|
||||||
|
import net.minecraft.util.IIcon;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.Vec3;
|
import net.minecraft.util.Vec3;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -1115,4 +1116,15 @@ public class EntityRobot extends EntityRobotBase implements
|
||||||
return new FluidTankInfo[] {new FluidTankInfo(tank, maxFluid)};
|
return new FluidTankInfo[] {new FluidTankInfo(tank, maxFluid)};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public IIcon getItemIcon(ItemStack stack, int renderPass) {
|
||||||
|
IIcon iicon = super.getItemIcon(stack, renderPass);
|
||||||
|
|
||||||
|
if (iicon == null) {
|
||||||
|
iicon = stack.getItem().getIcon(stack, renderPass, null, itemInUse, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return iicon;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
114
common/buildcraft/robots/ai/AIRobotStripesHandler.java
Normal file
114
common/buildcraft/robots/ai/AIRobotStripesHandler.java
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
|
||||||
|
* http://www.mod-buildcraft.com
|
||||||
|
*
|
||||||
|
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||||
|
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||||
|
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||||
|
*/
|
||||||
|
package buildcraft.robots.ai;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.world.WorldServer;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import buildcraft.api.core.BlockIndex;
|
||||||
|
import buildcraft.api.core.Position;
|
||||||
|
import buildcraft.api.robots.AIRobot;
|
||||||
|
import buildcraft.api.robots.EntityRobotBase;
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
|
import buildcraft.api.transport.IStripesHandler.StripesHandlerType;
|
||||||
|
import buildcraft.api.transport.PipeManager;
|
||||||
|
import buildcraft.core.inventory.InvUtils;
|
||||||
|
import buildcraft.core.proxy.CoreProxy;
|
||||||
|
import buildcraft.transport.stripes.StripesHandlerDefault;
|
||||||
|
|
||||||
|
public class AIRobotStripesHandler extends AIRobot implements IStripesActivator {
|
||||||
|
|
||||||
|
private static IStripesHandler defaultItemsHandler = new StripesHandlerDefault();
|
||||||
|
|
||||||
|
private BlockIndex useToBlock;
|
||||||
|
private int useCycles = 0;
|
||||||
|
|
||||||
|
public AIRobotStripesHandler(EntityRobotBase iRobot) {
|
||||||
|
super(iRobot);
|
||||||
|
}
|
||||||
|
|
||||||
|
public AIRobotStripesHandler(EntityRobotBase iRobot, BlockIndex index) {
|
||||||
|
super(iRobot);
|
||||||
|
|
||||||
|
useToBlock = index;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start() {
|
||||||
|
robot.aimItemAt(useToBlock.x, useToBlock.y, useToBlock.z);
|
||||||
|
robot.setItemActive(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
useCycles++;
|
||||||
|
|
||||||
|
if (useCycles > 60) {
|
||||||
|
ItemStack stack = robot.getHeldItem();
|
||||||
|
|
||||||
|
ForgeDirection direction = ForgeDirection.NORTH;
|
||||||
|
|
||||||
|
Position p = new Position(useToBlock.x, useToBlock.y, useToBlock.z);
|
||||||
|
|
||||||
|
EntityPlayer player = CoreProxy.proxy.getBuildCraftPlayer(
|
||||||
|
(WorldServer) robot.worldObj, (int) p.x, (int) p.y,
|
||||||
|
(int) p.z).get();
|
||||||
|
player.rotationPitch = 0;
|
||||||
|
player.rotationYaw = 180;
|
||||||
|
|
||||||
|
for (IStripesHandler handler : PipeManager.stripesHandlers) {
|
||||||
|
if (handler.getType() == StripesHandlerType.ITEM_USE
|
||||||
|
&& handler.shouldHandle(stack)) {
|
||||||
|
if (handler.handle(robot.worldObj, (int) p.x, (int) p.y,
|
||||||
|
(int) p.z, direction, stack, player, this)) {
|
||||||
|
robot.setItemInUse(null);
|
||||||
|
terminate();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defaultItemsHandler.handle(robot.worldObj, (int) p.x, (int) p.y,
|
||||||
|
(int) p.z, direction, stack, player, this)) {
|
||||||
|
robot.setItemInUse(null);
|
||||||
|
}
|
||||||
|
terminate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ForgeDirection getDirection() {
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void end() {
|
||||||
|
robot.setItemActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEnergyCost() {
|
||||||
|
return 70;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendItem(ItemStack stack, ForgeDirection direction) {
|
||||||
|
InvUtils.dropItems(robot.worldObj, stack, (int) Math.floor(robot.posX),
|
||||||
|
(int) Math.floor(robot.posY), (int) Math.floor(robot.posZ));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dropItem(ItemStack stack, ForgeDirection direction) {
|
||||||
|
sendItem(stack, direction);
|
||||||
|
}
|
||||||
|
}
|
129
common/buildcraft/robots/boards/BoardRobotStripes.java
Normal file
129
common/buildcraft/robots/boards/BoardRobotStripes.java
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
|
||||||
|
* http://www.mod-buildcraft.com
|
||||||
|
*
|
||||||
|
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||||
|
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||||
|
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||||
|
*/
|
||||||
|
package buildcraft.robots.boards;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import buildcraft.api.boards.RedstoneBoardRobot;
|
||||||
|
import buildcraft.api.boards.RedstoneBoardRobotNBT;
|
||||||
|
import buildcraft.api.core.BlockIndex;
|
||||||
|
import buildcraft.api.robots.AIRobot;
|
||||||
|
import buildcraft.api.robots.EntityRobotBase;
|
||||||
|
import buildcraft.core.inventory.filters.IStackFilter;
|
||||||
|
import buildcraft.core.utils.IBlockFilter;
|
||||||
|
import buildcraft.robots.ResourceIdBlock;
|
||||||
|
import buildcraft.robots.RobotRegistry;
|
||||||
|
import buildcraft.robots.ai.AIRobotFetchAndEquipItemStack;
|
||||||
|
import buildcraft.robots.ai.AIRobotGotoBlock;
|
||||||
|
import buildcraft.robots.ai.AIRobotGotoSleep;
|
||||||
|
import buildcraft.robots.ai.AIRobotSearchRandomBlock;
|
||||||
|
import buildcraft.robots.ai.AIRobotStripesHandler;
|
||||||
|
|
||||||
|
public class BoardRobotStripes extends RedstoneBoardRobot {
|
||||||
|
|
||||||
|
private BlockIndex blockFound;
|
||||||
|
|
||||||
|
public BoardRobotStripes(EntityRobotBase iRobot) {
|
||||||
|
super(iRobot);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RedstoneBoardRobotNBT getNBTHandler() {
|
||||||
|
return BoardRobotStripesNBT.instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
if (robot.getHeldItem() == null) {
|
||||||
|
startDelegateAI(new AIRobotFetchAndEquipItemStack(robot, new IStackFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean matches(ItemStack stack) {
|
||||||
|
return stack != null;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
startDelegateAI(new AIRobotSearchRandomBlock(robot, new IBlockFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean matches(World world, int x, int y, int z) {
|
||||||
|
return world.getBlock(x, y, z).isAir(world, x, y, z)
|
||||||
|
&& !robot.getRegistry().isTaken(new ResourceIdBlock(x, y, z));
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delegateAIEnded(AIRobot ai) {
|
||||||
|
if (ai instanceof AIRobotSearchRandomBlock) {
|
||||||
|
AIRobotSearchRandomBlock searchAI = (AIRobotSearchRandomBlock) ai;
|
||||||
|
|
||||||
|
if (searchAI.blockFound != null
|
||||||
|
&& RobotRegistry.getRegistry(robot.worldObj).take(
|
||||||
|
new ResourceIdBlock(searchAI.blockFound), robot)) {
|
||||||
|
searchAI.unreserve();
|
||||||
|
|
||||||
|
if (blockFound != null) {
|
||||||
|
robot.getRegistry().release(new ResourceIdBlock(blockFound));
|
||||||
|
}
|
||||||
|
|
||||||
|
blockFound = searchAI.blockFound;
|
||||||
|
startDelegateAI(new AIRobotGotoBlock(robot, searchAI.path));
|
||||||
|
} else {
|
||||||
|
if (searchAI.blockFound != null) {
|
||||||
|
searchAI.unreserve();
|
||||||
|
}
|
||||||
|
startDelegateAI(new AIRobotGotoSleep(robot));
|
||||||
|
}
|
||||||
|
} else if (ai instanceof AIRobotGotoBlock) {
|
||||||
|
startDelegateAI(new AIRobotStripesHandler(robot, blockFound));
|
||||||
|
} else if (ai instanceof AIRobotFetchAndEquipItemStack) {
|
||||||
|
if (robot.getHeldItem() == null) {
|
||||||
|
startDelegateAI(new AIRobotGotoSleep(robot));
|
||||||
|
}
|
||||||
|
} else if (ai instanceof AIRobotStripesHandler) {
|
||||||
|
robot.getRegistry().release(new ResourceIdBlock(blockFound));
|
||||||
|
blockFound = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void end() {
|
||||||
|
if (blockFound != null) {
|
||||||
|
robot.getRegistry().release(new ResourceIdBlock(blockFound));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeSelfToNBT(NBTTagCompound nbt) {
|
||||||
|
super.writeSelfToNBT(nbt);
|
||||||
|
|
||||||
|
if (blockFound != null) {
|
||||||
|
NBTTagCompound sub = new NBTTagCompound();
|
||||||
|
blockFound.writeTo(sub);
|
||||||
|
nbt.setTag("blockFound", sub);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadSelfFromNBT(NBTTagCompound nbt) {
|
||||||
|
super.loadSelfFromNBT(nbt);
|
||||||
|
|
||||||
|
if (nbt.hasKey("blockFound")) {
|
||||||
|
blockFound = new BlockIndex(nbt.getCompoundTag("blockFound"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isAirAbove(World world, int x, int y, int z) {
|
||||||
|
synchronized (world) {
|
||||||
|
return world.isAirBlock(x, y + 1, z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
64
common/buildcraft/robots/boards/BoardRobotStripesNBT.java
Normal file
64
common/buildcraft/robots/boards/BoardRobotStripesNBT.java
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
|
||||||
|
* http://www.mod-buildcraft.com
|
||||||
|
*
|
||||||
|
* BuildCraft is distributed under the terms of the Minecraft Mod Public
|
||||||
|
* License 1.0, or MMPL. Please check the contents of the license located in
|
||||||
|
* http://www.mod-buildcraft.com/MMPL-1.0.txt
|
||||||
|
*/
|
||||||
|
package buildcraft.robots.boards;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.util.IIcon;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
import buildcraft.api.boards.RedstoneBoardRobot;
|
||||||
|
import buildcraft.api.boards.RedstoneBoardRobotNBT;
|
||||||
|
import buildcraft.api.robots.EntityRobotBase;
|
||||||
|
import buildcraft.core.DefaultProps;
|
||||||
|
import buildcraft.core.utils.StringUtils;
|
||||||
|
|
||||||
|
public final class BoardRobotStripesNBT extends RedstoneBoardRobotNBT {
|
||||||
|
|
||||||
|
public static BoardRobotStripesNBT instance = new BoardRobotStripesNBT();
|
||||||
|
|
||||||
|
private static final ResourceLocation TEXTURE = new ResourceLocation("buildcraft",
|
||||||
|
DefaultProps.TEXTURE_PATH_ENTITIES + "/robot_stripes.png");
|
||||||
|
|
||||||
|
private IIcon icon;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RedstoneBoardRobot create(NBTTagCompound nbt, EntityRobotBase robot) {
|
||||||
|
return new BoardRobotStripes(robot);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResourceLocation getRobotTexture() {
|
||||||
|
return TEXTURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getID() {
|
||||||
|
return "buildcraft:boardRobotStripes";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) {
|
||||||
|
list.add(StringUtils.localize("buildcraft.boardRobotStripes"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerIcons(IIconRegister iconRegister) {
|
||||||
|
icon = iconRegister.registerIcon("buildcraft:board_yellow");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IIcon getIcon(NBTTagCompound nbt) {
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
}
|
|
@ -41,7 +41,7 @@ import buildcraft.transport.utils.TransportUtils;
|
||||||
|
|
||||||
public class PipeItemsStripes extends Pipe<PipeTransportItems> implements IEnergyHandler, IStripesPipe {
|
public class PipeItemsStripes extends Pipe<PipeTransportItems> implements IEnergyHandler, IStripesPipe {
|
||||||
|
|
||||||
private IStripesHandler defaultItemsHandler = new StripesHandlerDefault();
|
private static IStripesHandler defaultItemsHandler = new StripesHandlerDefault();
|
||||||
|
|
||||||
public PipeItemsStripes(Item item) {
|
public PipeItemsStripes(Item item) {
|
||||||
super(new PipeTransportItems(), item);
|
super(new PipeTransportItems(), item);
|
||||||
|
|
|
@ -8,8 +8,8 @@ import net.minecraft.world.World;
|
||||||
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
|
|
||||||
public class StripesHandlerArrow implements IStripesHandler {
|
public class StripesHandlerArrow implements IStripesHandler {
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ public class StripesHandlerArrow implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
|
|
||||||
EntityArrow entityArrow = new EntityArrow(world, player, 0);
|
EntityArrow entityArrow = new EntityArrow(world, player, 0);
|
||||||
entityArrow.setPosition(x + 0.5d, y + 0.5d, z + 0.5d);
|
entityArrow.setPosition(x + 0.5d, y + 0.5d, z + 0.5d);
|
||||||
|
@ -39,7 +39,7 @@ public class StripesHandlerArrow implements IStripesHandler {
|
||||||
|
|
||||||
stack.stackSize--;
|
stack.stackSize--;
|
||||||
if (stack.stackSize > 0) {
|
if (stack.stackSize > 0) {
|
||||||
pipe.sendItem(stack, direction.getOpposite());
|
activator.sendItem(stack, direction.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -14,8 +14,8 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fluids.IFluidBlock;
|
import net.minecraftforge.fluids.IFluidBlock;
|
||||||
|
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
|
|
||||||
public class StripesHandlerBucket implements IStripesHandler {
|
public class StripesHandlerBucket implements IStripesHandler {
|
||||||
private static final ItemStack emptyBucket = new ItemStack(Items.bucket, 1);
|
private static final ItemStack emptyBucket = new ItemStack(Items.bucket, 1);
|
||||||
|
@ -33,16 +33,16 @@ public class StripesHandlerBucket implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
Block block = world.getBlock(x, y, z);
|
Block block = world.getBlock(x, y, z);
|
||||||
if (block == Blocks.air) {
|
if (block == Blocks.air) {
|
||||||
Block underblock = world.getBlock(x, y - 1, z);
|
Block underblock = world.getBlock(x, y - 1, z);
|
||||||
|
|
||||||
if (((ItemBucket) stack.getItem()).tryPlaceContainedLiquid(world, x, y - 1, z)) {
|
if (((ItemBucket) stack.getItem()).tryPlaceContainedLiquid(world, x, y - 1, z)) {
|
||||||
pipe.sendItem(emptyBucket, direction.getOpposite());
|
activator.sendItem(emptyBucket, direction.getOpposite());
|
||||||
stack.stackSize--;
|
stack.stackSize--;
|
||||||
if (stack.stackSize > 0) {
|
if (stack.stackSize > 0) {
|
||||||
pipe.sendItem(stack, direction.getOpposite());
|
activator.sendItem(stack, direction.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -66,10 +66,10 @@ public class StripesHandlerBucket implements IStripesHandler {
|
||||||
if (filledBucket != null) {
|
if (filledBucket != null) {
|
||||||
world.setBlockToAir(x, y - 1, z);
|
world.setBlockToAir(x, y - 1, z);
|
||||||
|
|
||||||
pipe.sendItem(filledBucket, direction.getOpposite());
|
activator.sendItem(filledBucket, direction.getOpposite());
|
||||||
stack.stackSize--;
|
stack.stackSize--;
|
||||||
if (stack.stackSize > 0) {
|
if (stack.stackSize > 0) {
|
||||||
pipe.sendItem(stack, direction.getOpposite());
|
activator.sendItem(stack, direction.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -14,8 +14,8 @@ import net.minecraft.world.World;
|
||||||
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
|
|
||||||
public class StripesHandlerDefault implements IStripesHandler {
|
public class StripesHandlerDefault implements IStripesHandler {
|
||||||
|
|
||||||
|
@ -32,14 +32,14 @@ public class StripesHandlerDefault implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
if (!world.isAirBlock(x, y, z)) {
|
if (!world.isAirBlock(x, y, z)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!stack.tryPlaceItemIntoWorld(player, world, x, y - 1, z, 1, 0.0f, 0.0f, 0.0f)) {
|
if (!stack.tryPlaceItemIntoWorld(player, world, x, y - 1, z, 1, 0.0f, 0.0f, 0.0f)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
pipe.sendItem(stack, direction.getOpposite());
|
activator.sendItem(stack, direction.getOpposite());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@ import net.minecraft.world.World;
|
||||||
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
|
|
||||||
public class StripesHandlerEntityInteract implements IStripesHandler {
|
public class StripesHandlerEntityInteract implements IStripesHandler {
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ public class StripesHandlerEntityInteract implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
|
|
||||||
AxisAlignedBB box = AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
|
AxisAlignedBB box = AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1);
|
||||||
List entities = world.getEntitiesWithinAABBExcludingEntity(null, box);
|
List entities = world.getEntitiesWithinAABBExcludingEntity(null, box);
|
||||||
|
@ -64,21 +64,21 @@ public class StripesHandlerEntityInteract implements IStripesHandler {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
successful = true;
|
successful = true;
|
||||||
dropItemsExcept(stack, player, pipe, direction);
|
dropItemsExcept(stack, player, activator, direction);
|
||||||
}
|
}
|
||||||
if (stack.stackSize > 0) {
|
if (stack.stackSize > 0) {
|
||||||
pipe.sendItem(stack, direction.getOpposite());
|
activator.sendItem(stack, direction.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
return successful;
|
return successful;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dropItemsExcept(ItemStack stack, EntityPlayer player, IStripesPipe pipe, ForgeDirection direction) {
|
private void dropItemsExcept(ItemStack stack, EntityPlayer player, IStripesActivator activator, ForgeDirection direction) {
|
||||||
for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
|
for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
|
||||||
ItemStack invStack = player.inventory.getStackInSlot(i);
|
ItemStack invStack = player.inventory.getStackInSlot(i);
|
||||||
if (invStack != null && invStack != stack) {
|
if (invStack != null && invStack != stack) {
|
||||||
player.inventory.setInventorySlotContents(i, null);
|
player.inventory.setInventorySlotContents(i, null);
|
||||||
pipe.sendItem(invStack, direction.getOpposite());
|
activator.sendItem(invStack, direction.getOpposite());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,8 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
import buildcraft.BuildCraftTransport;
|
import buildcraft.BuildCraftTransport;
|
||||||
import buildcraft.api.core.Position;
|
import buildcraft.api.core.Position;
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
import buildcraft.transport.BlockGenericPipe;
|
import buildcraft.transport.BlockGenericPipe;
|
||||||
import buildcraft.transport.ItemPipe;
|
import buildcraft.transport.ItemPipe;
|
||||||
import buildcraft.transport.Pipe;
|
import buildcraft.transport.Pipe;
|
||||||
|
@ -41,7 +41,7 @@ public class StripesHandlerPipes implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
|
|
||||||
if (!(stack.getItem() instanceof ItemPipe) || (stack.getItem() == BuildCraftTransport.pipeItemsStripes)) {
|
if (!(stack.getItem() instanceof ItemPipe) || (stack.getItem() == BuildCraftTransport.pipeItemsStripes)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -15,8 +15,8 @@ import net.minecraft.world.World;
|
||||||
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
|
|
||||||
public class StripesHandlerPlaceBlock implements IStripesHandler {
|
public class StripesHandlerPlaceBlock implements IStripesHandler {
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ public class StripesHandlerPlaceBlock implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
if (!world.isAirBlock(x, y, z)) {
|
if (!world.isAirBlock(x, y, z)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,8 @@ import net.minecraft.world.World;
|
||||||
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
|
|
||||||
public class StripesHandlerRightClick implements IStripesHandler {
|
public class StripesHandlerRightClick implements IStripesHandler {
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ public class StripesHandlerRightClick implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
ItemStack remainingStack = stack.getItem().onItemRightClick(stack, world, player);
|
ItemStack remainingStack = stack.getItem().onItemRightClick(stack, world, player);
|
||||||
pipe.sendItem(remainingStack, direction.getOpposite());
|
activator.sendItem(remainingStack, direction.getOpposite());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@ import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.IShearable;
|
import net.minecraftforge.common.IShearable;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
import buildcraft.api.transport.IStripesActivator;
|
||||||
import buildcraft.api.transport.IStripesHandler;
|
import buildcraft.api.transport.IStripesHandler;
|
||||||
import buildcraft.api.transport.IStripesPipe;
|
|
||||||
|
|
||||||
public class StripesHandlerShears implements IStripesHandler {
|
public class StripesHandlerShears implements IStripesHandler {
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ public class StripesHandlerShears implements IStripesHandler {
|
||||||
@Override
|
@Override
|
||||||
public boolean handle(World world, int x, int y, int z,
|
public boolean handle(World world, int x, int y, int z,
|
||||||
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
ForgeDirection direction, ItemStack stack, EntityPlayer player,
|
||||||
IStripesPipe pipe) {
|
IStripesActivator activator) {
|
||||||
Block block = world.getBlock(x, y, z);
|
Block block = world.getBlock(x, y, z);
|
||||||
|
|
||||||
if (block instanceof IShearable) {
|
if (block instanceof IShearable) {
|
||||||
|
@ -42,9 +42,9 @@ public class StripesHandlerShears implements IStripesHandler {
|
||||||
EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, stack));
|
EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, stack));
|
||||||
world.setBlockToAir(x, y, z);
|
world.setBlockToAir(x, y, z);
|
||||||
stack.damageItem(1, player);
|
stack.damageItem(1, player);
|
||||||
pipe.sendItem(stack, direction.getOpposite());
|
activator.sendItem(stack, direction.getOpposite());
|
||||||
for (ItemStack dropStack : drops) {
|
for (ItemStack dropStack : drops) {
|
||||||
pipe.sendItem(dropStack, direction.getOpposite());
|
activator.sendItem(dropStack, direction.getOpposite());
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue