bump minimum Forge version to 1236, add place/break events for Builder, Filler and Quarry frame building, try to fix #2476
This commit is contained in:
parent
0c6761ee03
commit
71d7d96c25
4 changed files with 46 additions and 23 deletions
|
@ -186,7 +186,7 @@ import buildcraft.robots.boards.BoardRobotPump;
|
||||||
import buildcraft.robots.boards.BoardRobotShovelman;
|
import buildcraft.robots.boards.BoardRobotShovelman;
|
||||||
import buildcraft.robots.boards.BoardRobotStripes;
|
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.1236,)")
|
||||||
public class BuildCraftCore extends BuildCraftMod {
|
public class BuildCraftCore extends BuildCraftMod {
|
||||||
|
|
||||||
@Mod.Instance("BuildCraft|Core")
|
@Mod.Instance("BuildCraft|Core")
|
||||||
|
|
|
@ -359,7 +359,6 @@ public class BuildCraftEnergy extends BuildCraftMod {
|
||||||
|
|
||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
public void postInit(FMLPostInitializationEvent evt) {
|
public void postInit(FMLPostInitializationEvent evt) {
|
||||||
|
|
||||||
if (BuildCraftCore.modifyWorld) {
|
if (BuildCraftCore.modifyWorld) {
|
||||||
MinecraftForge.EVENT_BUS.register(OilPopulate.INSTANCE);
|
MinecraftForge.EVENT_BUS.register(OilPopulate.INSTANCE);
|
||||||
MinecraftForge.TERRAIN_GEN_BUS.register(new BiomeInitializer());
|
MinecraftForge.TERRAIN_GEN_BUS.register(new BiomeInitializer());
|
||||||
|
|
|
@ -18,6 +18,7 @@ import java.util.LinkedList;
|
||||||
import java.util.ListIterator;
|
import java.util.ListIterator;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
|
@ -25,9 +26,13 @@ import net.minecraft.item.ItemBlock;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.WorldServer;
|
||||||
import net.minecraft.world.WorldSettings.GameType;
|
import net.minecraft.world.WorldSettings.GameType;
|
||||||
|
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.common.util.BlockSnapshot;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
import net.minecraftforge.event.world.BlockEvent;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
import net.minecraftforge.fluids.Fluid;
|
||||||
import net.minecraftforge.fluids.FluidContainerRegistry;
|
import net.minecraftforge.fluids.FluidContainerRegistry;
|
||||||
import net.minecraftforge.fluids.FluidRegistry;
|
import net.minecraftforge.fluids.FluidRegistry;
|
||||||
|
@ -36,6 +41,7 @@ import net.minecraftforge.fluids.FluidStack;
|
||||||
import buildcraft.api.blueprints.BuilderAPI;
|
import buildcraft.api.blueprints.BuilderAPI;
|
||||||
import buildcraft.api.blueprints.Schematic;
|
import buildcraft.api.blueprints.Schematic;
|
||||||
import buildcraft.api.blueprints.SchematicBlock;
|
import buildcraft.api.blueprints.SchematicBlock;
|
||||||
|
import buildcraft.api.blueprints.SchematicBlockBase;
|
||||||
import buildcraft.api.blueprints.SchematicEntity;
|
import buildcraft.api.blueprints.SchematicEntity;
|
||||||
import buildcraft.api.core.BCLog;
|
import buildcraft.api.core.BCLog;
|
||||||
import buildcraft.api.core.BlockIndex;
|
import buildcraft.api.core.BlockIndex;
|
||||||
|
@ -53,6 +59,7 @@ import buildcraft.core.builders.TileAbstractBuilder;
|
||||||
import buildcraft.core.inventory.InventoryCopy;
|
import buildcraft.core.inventory.InventoryCopy;
|
||||||
import buildcraft.core.inventory.InventoryIterator;
|
import buildcraft.core.inventory.InventoryIterator;
|
||||||
import buildcraft.core.inventory.StackHelper;
|
import buildcraft.core.inventory.StackHelper;
|
||||||
|
import buildcraft.core.proxy.CoreProxy;
|
||||||
import buildcraft.core.utils.BlockUtils;
|
import buildcraft.core.utils.BlockUtils;
|
||||||
|
|
||||||
public class BptBuilderBlueprint extends BptBuilderBase {
|
public class BptBuilderBlueprint extends BptBuilderBase {
|
||||||
|
@ -159,6 +166,7 @@ public class BptBuilderBlueprint extends BptBuilderBase {
|
||||||
tmpExpanding.add(b);
|
tmpExpanding.add(b);
|
||||||
b.buildStage = 3;
|
b.buildStage = 3;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
postProcessing.add(b);
|
postProcessing.add(b);
|
||||||
|
@ -277,27 +285,16 @@ public class BptBuilderBlueprint extends BptBuilderBase {
|
||||||
if (buildList.size() != 0) {
|
if (buildList.size() != 0) {
|
||||||
BuildingSlot slot = internalGetNextBlock(world, inv);
|
BuildingSlot slot = internalGetNextBlock(world, inv);
|
||||||
checkDone();
|
checkDone();
|
||||||
|
return slot;
|
||||||
if (slot != null) {
|
|
||||||
return slot;
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityList.size() != 0) {
|
if (entityList.size() != 0) {
|
||||||
BuildingSlot slot = internalGetNextEntity(world, inv);
|
BuildingSlot slot = internalGetNextEntity(world, inv);
|
||||||
checkDone ();
|
checkDone();
|
||||||
|
return slot;
|
||||||
if (slot != null) {
|
|
||||||
return slot;
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
checkDone();
|
checkDone();
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -348,7 +345,8 @@ public class BptBuilderBlueprint extends BptBuilderBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (BlockUtils.isUnbreakableBlock(world, slot.x, slot.y, slot.z)) {
|
if (BlockUtils.isUnbreakableBlock(world, slot.x, slot.y, slot.z)
|
||||||
|
|| isBlockBreakCanceled(world, slot.x, slot.y, slot.z)) {
|
||||||
// if the block can't be broken, just forget this iterator
|
// if the block can't be broken, just forget this iterator
|
||||||
iterator.remove();
|
iterator.remove();
|
||||||
|
|
||||||
|
@ -383,6 +381,12 @@ public class BptBuilderBlueprint extends BptBuilderBase {
|
||||||
} else if (!slot.schematic.doNotBuild()) {
|
} else if (!slot.schematic.doNotBuild()) {
|
||||||
if (builder == null) {
|
if (builder == null) {
|
||||||
return slot;
|
return slot;
|
||||||
|
} else if (isBlockPlaceCanceled(world, x, y, z, slot.schematic)) {
|
||||||
|
// Forge does not allow us to place a block in
|
||||||
|
// this position.
|
||||||
|
iterator.remove();
|
||||||
|
builtLocations.add(new BlockIndex(slot.x,
|
||||||
|
slot.y, slot.z));
|
||||||
} else if (checkRequirements(builder, slot.schematic)) {
|
} else if (checkRequirements(builder, slot.schematic)) {
|
||||||
// At this stage, regardless of the fact that the
|
// At this stage, regardless of the fact that the
|
||||||
// block can actually be built or not, we'll try.
|
// block can actually be built or not, we'll try.
|
||||||
|
@ -426,6 +430,32 @@ public class BptBuilderBlueprint extends BptBuilderBase {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isBlockBreakCanceled(World world, int x, int y, int z) {
|
||||||
|
if (!world.isAirBlock(x, y, z)) {
|
||||||
|
BlockEvent.BreakEvent breakEvent = new BlockEvent.BreakEvent(x, y, z, world, world.getBlock(x, y, z),
|
||||||
|
world.getBlockMetadata(x, y, z),
|
||||||
|
CoreProxy.proxy.getBuildCraftPlayer((WorldServer) world).get());
|
||||||
|
MinecraftForge.EVENT_BUS.post(breakEvent);
|
||||||
|
return breakEvent.isCanceled();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isBlockPlaceCanceled(World world, int x, int y, int z, SchematicBlockBase schematic) {
|
||||||
|
Block block = schematic instanceof SchematicBlock ? ((SchematicBlock) schematic).block : Blocks.stone;
|
||||||
|
int meta = schematic instanceof SchematicBlock ? ((SchematicBlock) schematic).meta : 0;
|
||||||
|
|
||||||
|
BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(
|
||||||
|
new BlockSnapshot(world, x, y, z, block, meta),
|
||||||
|
Blocks.air,
|
||||||
|
CoreProxy.proxy.getBuildCraftPlayer((WorldServer) world, x, y, z).get()
|
||||||
|
);
|
||||||
|
|
||||||
|
MinecraftForge.EVENT_BUS.post(placeEvent);
|
||||||
|
return placeEvent.isCanceled();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private BuildingSlot internalGetNextEntity(World world, TileAbstractBuilder builder) {
|
private BuildingSlot internalGetNextEntity(World world, TileAbstractBuilder builder) {
|
||||||
Iterator<BuildingSlotEntity> it = entityList.iterator();
|
Iterator<BuildingSlotEntity> it = entityList.iterator();
|
||||||
|
|
||||||
|
|
|
@ -11,17 +11,11 @@ package buildcraft.core.blueprints;
|
||||||
import buildcraft.api.core.BCLog;
|
import buildcraft.api.core.BCLog;
|
||||||
|
|
||||||
public class BptError extends Exception {
|
public class BptError extends Exception {
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static final long serialVersionUID = 3579188081467555542L;
|
private static final long serialVersionUID = 3579188081467555542L;
|
||||||
|
|
||||||
public BptError(String str) {
|
public BptError(String str) {
|
||||||
super(str);
|
super(str);
|
||||||
|
|
||||||
BCLog.logger.debug("BLUEPRINT ERROR:" + str);
|
BCLog.logger.debug("BLUEPRINT ERROR:" + str);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue