From f0e6d400cbecb75f05a46434067f2f8f16e701b9 Mon Sep 17 00:00:00 2001 From: Anus Date: Fri, 23 Aug 2013 15:47:20 +0400 Subject: [PATCH] Bugfixes + config Fixed: * TE duplication and overclocking after jump Added: * Configuration file --- src/cr0s/WarpDrive/CamRegistry.java | 2 +- src/cr0s/WarpDrive/EntityCamera.java | 2 +- src/cr0s/WarpDrive/EntityJump.java | 69 ++++++-- src/cr0s/WarpDrive/EntitySphereGen.java | 4 +- src/cr0s/WarpDrive/HyperSpaceProvider.java | 4 +- src/cr0s/WarpDrive/SpaceEventHandler.java | 3 +- src/cr0s/WarpDrive/SpaceWorldGenerator.java | 4 +- .../WarpDrive/TileEntityAirGenerator.java | 12 +- src/cr0s/WarpDrive/TileEntityLaser.java | 4 +- src/cr0s/WarpDrive/TileEntityMiningLaser.java | 19 +- src/cr0s/WarpDrive/TileEntityReactor.java | 2 +- src/cr0s/WarpDrive/WarpCoresRegistry.java | 6 +- src/cr0s/WarpDrive/WarpDrive.java | 165 +++++++++--------- src/cr0s/WarpDrive/WarpDriveConfig.java | 68 ++++++++ src/cr0s/WarpDrive/WorldGenSmallShip.java | 8 +- 15 files changed, 251 insertions(+), 121 deletions(-) create mode 100644 src/cr0s/WarpDrive/WarpDriveConfig.java diff --git a/src/cr0s/WarpDrive/CamRegistry.java b/src/cr0s/WarpDrive/CamRegistry.java index a6fad70e..708d43e3 100644 --- a/src/cr0s/WarpDrive/CamRegistry.java +++ b/src/cr0s/WarpDrive/CamRegistry.java @@ -25,7 +25,7 @@ public class CamRegistry { public boolean isCamAlive(CamRegistryItem i) { if (i.worldObj != null) { - if (i.worldObj.getBlockId(i.camPos.x, i.camPos.y, i.camPos.z) != WarpDrive.instance.CAMERA_BLOCKID && i.worldObj.getBlockId(i.camPos.x, i.camPos.y, i.camPos.z) != WarpDrive.instance.LASER_BLOCKCAM_BLOCKID) { + if (i.worldObj.getBlockId(i.camPos.x, i.camPos.y, i.camPos.z) != WarpDrive.instance.config.camID && i.worldObj.getBlockId(i.camPos.x, i.camPos.y, i.camPos.z) != WarpDrive.instance.config.laserCamID) { return false; } diff --git a/src/cr0s/WarpDrive/EntityCamera.java b/src/cr0s/WarpDrive/EntityCamera.java index 5c5104c1..8a09a539 100644 --- a/src/cr0s/WarpDrive/EntityCamera.java +++ b/src/cr0s/WarpDrive/EntityCamera.java @@ -90,7 +90,7 @@ public final class EntityCamera extends EntityLivingBase { } else if (Keyboard.isKeyDown(Keyboard.KEY_SPACE) && fireWaitTicks-- == 0) { fireWaitTicks = 2; // Make a shoot with camera-laser - if (worldObj.getBlockId(xCoord, yCoord, zCoord) == WarpDrive.LASER_BLOCKCAM_BLOCKID) { + if (worldObj.getBlockId(xCoord, yCoord, zCoord) == WarpDrive.instance.config.laserCamID) { sendTargetPacket(); } } else { diff --git a/src/cr0s/WarpDrive/EntityJump.java b/src/cr0s/WarpDrive/EntityJump.java index 6747ce77..b3f1c674 100644 --- a/src/cr0s/WarpDrive/EntityJump.java +++ b/src/cr0s/WarpDrive/EntityJump.java @@ -7,10 +7,15 @@ import dan200.computer.api.IPeripheral; import dan200.turtle.api.ITurtleAccess; import dan200.turtle.api.TurtleSide; import ic2.api.energy.tile.IEnergyTile; +import ic2.api.network.NetworkHelper; import java.lang.reflect.Method; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; import java.util.List; +import java.util.Set; +import java.util.TreeSet; import net.minecraft.block.Block; import net.minecraft.entity.Entity; @@ -397,7 +402,20 @@ public class EntityJump extends Entity { public void finishJump() { System.out.println("[JE] Finished. Jump took " + ((System.currentTimeMillis() - msCounter) / 1000F) + " seconds"); - // Прыжок окончен + //FIXME TileEntity duplication workaround + System.out.println("Removing TE duplicates. Size before: " + targetWorld.loadedTileEntityList.size()); + LocalProfiler.start("EntityJump.removeDuplicates()"); + + try { + targetWorld.loadedTileEntityList = this.removeDuplicates(targetWorld.loadedTileEntityList); + } catch (Exception e) { + System.out.println("TE Duplicates removing exception: " + e.getMessage()); + } + + LocalProfiler.stop(); + + System.out.println("Removing TE duplicates. Size after: " + targetWorld.loadedTileEntityList.size()); + killEntity(""); } @@ -452,9 +470,9 @@ public class EntityJump extends Entity { method = c.getDeclaredMethod ("onLoaded", new Class[0]); method.invoke (te, new Object[0]); } catch (Exception e) { - e.printStackTrace(); + //e.printStackTrace(); } - } else // Machine + } else // Machine/Generator if (c.getName().equals("ic2.core.block.TileEntityBlock") || c.getName().contains("ic2.core.block.generator")) { try { Method method; @@ -465,9 +483,17 @@ public class EntityJump extends Entity { method = c.getDeclaredMethod ("onLoaded", new Class[0]); method.invoke (te, new Object[0]); } catch (Exception e) { - e.printStackTrace(); + //e.printStackTrace(); } } + + te.updateContainingBlockInfo(); + + try { + NetworkHelper.updateTileEntityField(te, "facing"); + } catch (Exception e) { + //e.printStackTrace(); + } } } @@ -502,7 +528,7 @@ public class EntityJump extends Entity { for(int z = z1; z <= z2; z++) { int blockID = worldObj.getBlockId(x, y, z); // Skip air blocks - if (blockID == 0 || blockID == WarpDrive.GAS_BLOCKID) { + if (blockID == 0 || blockID == WarpDrive.instance.config.gasID) { continue; } @@ -583,7 +609,7 @@ public class EntityJump extends Entity { int blockID = worldObj.getBlockId(x, y, z); // Skipping air blocks - if (blockID == 0 || blockID == WarpDrive.GAS_BLOCKID) { + if (blockID == 0 || blockID == WarpDrive.instance.config.gasID) { continue; } @@ -786,7 +812,7 @@ public class EntityJump extends Entity { return false; } - if (blockOnShipID != 0 && blockID != 0 && blockID != WarpDrive.AIR_BLOCKID && blockID != WarpDrive.GAS_BLOCKID && blockID != 18) { + if (blockOnShipID != 0 && blockID != 0 && blockID != WarpDrive.instance.config.airID && blockID != WarpDrive.instance.config.gasID && blockID != 18) { blowX = x; blowY = y; blowZ = z; @@ -843,7 +869,7 @@ public class EntityJump extends Entity { for (int z = minZ; z <= maxZ; z++) { for (int y = minY; y <= maxY; y++) { int blockID = worldObj.getBlockId(x, y, z); - if (blockID == 0 || blockID == WarpDrive.AIR_BLOCKID || blockID == WarpDrive.GAS_BLOCKID) { + if (blockID == 0 || blockID == WarpDrive.instance.config.airID || blockID == WarpDrive.instance.config.gasID) { continue; } @@ -867,12 +893,6 @@ public class EntityJump extends Entity { } - /** - * Перемещение одиночного блока на новое место - * - * @param indexInShip индекс блока в сохранённом в памяти корабле - * @return состояние перемещения - */ public boolean moveBlockSimple(int indexInShip) { try { JumpBlock shipBlock = ship[indexInShip]; @@ -894,7 +914,7 @@ public class EntityJump extends Entity { mySetBlock(targetWorld, newX, newY, newZ, blockID, blockMeta, 2); // Re-schedule air blocks update - if (blockID == WarpDrive.AIR_BLOCKID) { + if (blockID == WarpDrive.instance.config.airID) { targetWorld.markBlockForUpdate(newX, newY, newZ); targetWorld.scheduleBlockUpdate(newX, newY, newZ, blockID, 40 + targetWorld.rand.nextInt(20)); } @@ -930,6 +950,7 @@ public class EntityJump extends Entity { newTileEntity.validate(); worldObj.removeBlockTileEntity(oldX, oldY, oldZ); + targetWorld.setBlockTileEntity(newX, newY, newZ, newTileEntity); } } catch (Exception exception) { @@ -940,6 +961,24 @@ public class EntityJump extends Entity { return true; } + public ArrayList removeDuplicates(List l) { + Set s = new TreeSet(new Comparator() { + + @Override + public int compare(TileEntity o1, TileEntity o2) { + if (o1.xCoord == o2.xCoord && o1.yCoord == o2.yCoord && o1.zCoord == o2.zCoord) { + System.out.println("Removed duplicated TE: " + o1 + ", " + o2); + return 0; + } else { + return 1; + } + } + }); + + s.addAll(l); + return new ArrayList(Arrays.asList(s.toArray())); + } + @Override protected void readEntityFromNBT(NBTTagCompound nbttagcompound) { //System.out.println("[JE@"+this+"] readEntityFromNBT()"); diff --git a/src/cr0s/WarpDrive/EntitySphereGen.java b/src/cr0s/WarpDrive/EntitySphereGen.java index 21f5d4c7..b7d0c1b1 100644 --- a/src/cr0s/WarpDrive/EntitySphereGen.java +++ b/src/cr0s/WarpDrive/EntitySphereGen.java @@ -6,9 +6,11 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import cr0s.WarpDrive.JumpBlock; import cr0s.WarpDrive.LocalProfiler; + import java.util.ArrayList; import java.util.List; import java.util.Random; + import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; @@ -239,7 +241,7 @@ public final class EntitySphereGen extends Entity { } else if (random.nextInt(1000) == 1) { _blockID = Block.bedrock.blockID; } else if (random.nextInt(10000) == 42) { - _blockID = WarpDrive.IRIDIUM_BLOCKID; + _blockID = WarpDrive.instance.config.iridiumID; } return _blockID; diff --git a/src/cr0s/WarpDrive/HyperSpaceProvider.java b/src/cr0s/WarpDrive/HyperSpaceProvider.java index b5cef846..f239b26d 100644 --- a/src/cr0s/WarpDrive/HyperSpaceProvider.java +++ b/src/cr0s/WarpDrive/HyperSpaceProvider.java @@ -187,8 +187,8 @@ public class HyperSpaceProvider extends WorldProvider { worldObj.setBlock(var5.posX, var5.posY + 3, var5.posZ, Block.glass.blockID, 0, 2); - worldObj.setBlock(var5.posX, var5.posY, var5.posZ, WarpDrive.AIR_BLOCKID, 15, 2); - worldObj.setBlock(var5.posX, var5.posY + 1, var5.posZ, WarpDrive.AIR_BLOCKID, 15, 2); + worldObj.setBlock(var5.posX, var5.posY, var5.posZ, WarpDrive.instance.config.airID, 15, 2); + worldObj.setBlock(var5.posX, var5.posY + 1, var5.posZ, WarpDrive.instance.config.airID, 15, 2); } return var5; } diff --git a/src/cr0s/WarpDrive/SpaceEventHandler.java b/src/cr0s/WarpDrive/SpaceEventHandler.java index c46681ad..71a21242 100644 --- a/src/cr0s/WarpDrive/SpaceEventHandler.java +++ b/src/cr0s/WarpDrive/SpaceEventHandler.java @@ -1,6 +1,7 @@ package cr0s.WarpDrive; import java.util.HashMap; + import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayerMP; @@ -101,7 +102,7 @@ public class SpaceEventHandler { int id1 = e.worldObj.getBlockId(x, y, z); int id2 = e.worldObj.getBlockId(x, y + 1, z); - if (id1 == WarpDrive.AIR_BLOCKID || id2 == WarpDrive.AIR_BLOCKID) { + if (id1 == WarpDrive.instance.config.airID || id2 == WarpDrive.instance.config.airID) { return false; } diff --git a/src/cr0s/WarpDrive/SpaceWorldGenerator.java b/src/cr0s/WarpDrive/SpaceWorldGenerator.java index c69edd2c..6bc236d9 100644 --- a/src/cr0s/WarpDrive/SpaceWorldGenerator.java +++ b/src/cr0s/WarpDrive/SpaceWorldGenerator.java @@ -210,7 +210,7 @@ public class SpaceWorldGenerator implements IWorldGenerator { } private void generateGasSphereEntity(World world, int x, int y, int z, int radius, boolean hollow, int color) { - EntitySphereGen esg = new EntitySphereGen(world, x, y, z, radius, WarpDrive.GAS_BLOCKID, color, hollow, true, false); + EntitySphereGen esg = new EntitySphereGen(world, x, y, z, radius, WarpDrive.instance.config.gasID, color, hollow, true, false); esg.xCoord = x; esg.yCoord = y; esg.zCoord = z; @@ -514,7 +514,7 @@ public class SpaceWorldGenerator implements IWorldGenerator { else if (random.nextInt(500) == 1) { blockID = Block.oreDiamond.blockID; } else if (random.nextInt(10000) == 42) { - blockID = WarpDrive.IRIDIUM_BLOCKID; + blockID = WarpDrive.instance.config.iridiumID; } return blockID; diff --git a/src/cr0s/WarpDrive/TileEntityAirGenerator.java b/src/cr0s/WarpDrive/TileEntityAirGenerator.java index 968abe50..5e7ea59e 100644 --- a/src/cr0s/WarpDrive/TileEntityAirGenerator.java +++ b/src/cr0s/WarpDrive/TileEntityAirGenerator.java @@ -57,32 +57,32 @@ public class TileEntityAirGenerator extends TileEntity implements IEnergySink { private void releaseAir() { if (worldObj.isAirBlock(xCoord + 1, yCoord, zCoord) && (currentEnergyValue - EU_PER_AIRBLOCK >= 0)) { - worldObj.setBlock(xCoord + 1, yCoord, zCoord, WarpDrive.AIR_BLOCKID, START_CONCENTRATION_VALUE, 2); + worldObj.setBlock(xCoord + 1, yCoord, zCoord, WarpDrive.instance.config.airID, START_CONCENTRATION_VALUE, 2); currentEnergyValue -= EU_PER_AIRBLOCK; } if (worldObj.isAirBlock(xCoord - 1, yCoord, zCoord) && (currentEnergyValue - EU_PER_AIRBLOCK >= 0)) { - worldObj.setBlock(xCoord - 1, yCoord, zCoord, WarpDrive.AIR_BLOCKID, START_CONCENTRATION_VALUE, 2); + worldObj.setBlock(xCoord - 1, yCoord, zCoord, WarpDrive.instance.config.airID, START_CONCENTRATION_VALUE, 2); currentEnergyValue -= EU_PER_AIRBLOCK; } if (worldObj.isAirBlock(xCoord, yCoord + 1, zCoord) && (currentEnergyValue - EU_PER_AIRBLOCK >= 0)) { - worldObj.setBlock(xCoord, yCoord + 1, zCoord, WarpDrive.AIR_BLOCKID, START_CONCENTRATION_VALUE, 2); + worldObj.setBlock(xCoord, yCoord + 1, zCoord, WarpDrive.instance.config.airID, START_CONCENTRATION_VALUE, 2); currentEnergyValue -= EU_PER_AIRBLOCK; } if (worldObj.isAirBlock(xCoord, yCoord - 1, zCoord) && (currentEnergyValue - EU_PER_AIRBLOCK >= 0)) { - worldObj.setBlock(xCoord, yCoord - 1, zCoord, WarpDrive.AIR_BLOCKID, START_CONCENTRATION_VALUE, 2); + worldObj.setBlock(xCoord, yCoord - 1, zCoord, WarpDrive.instance.config.airID, START_CONCENTRATION_VALUE, 2); currentEnergyValue -= EU_PER_AIRBLOCK; } if (worldObj.isAirBlock(xCoord, yCoord, zCoord + 1) && (currentEnergyValue - EU_PER_AIRBLOCK >= 0)) { - worldObj.setBlock(xCoord, yCoord, zCoord + 1, WarpDrive.AIR_BLOCKID, START_CONCENTRATION_VALUE, 2); + worldObj.setBlock(xCoord, yCoord, zCoord + 1, WarpDrive.instance.config.airID, START_CONCENTRATION_VALUE, 2); currentEnergyValue -= EU_PER_AIRBLOCK; } if (worldObj.isAirBlock(xCoord, yCoord, zCoord - 1) && (currentEnergyValue - EU_PER_AIRBLOCK >= 0)) { - worldObj.setBlock(xCoord, yCoord, zCoord - 1, WarpDrive.AIR_BLOCKID, START_CONCENTRATION_VALUE, 2); + worldObj.setBlock(xCoord, yCoord, zCoord - 1, WarpDrive.instance.config.airID, START_CONCENTRATION_VALUE, 2); currentEnergyValue -= EU_PER_AIRBLOCK; } } diff --git a/src/cr0s/WarpDrive/TileEntityLaser.java b/src/cr0s/WarpDrive/TileEntityLaser.java index 8c2f4ba8..a39b8eed 100644 --- a/src/cr0s/WarpDrive/TileEntityLaser.java +++ b/src/cr0s/WarpDrive/TileEntityLaser.java @@ -226,7 +226,7 @@ public class TileEntityLaser extends TileEntity implements IPeripheral{ } // Hit is a laser head - if (blockID == WarpDrive.instance.LASER_BLOCK_BLOCKID || blockID == WarpDrive.instance.LASER_BLOCKCAM_BLOCKID) { + if (blockID == WarpDrive.instance.config.laserID || blockID == WarpDrive.instance.config.laserCamID) { // Compare frequencies TileEntityLaser tel = (TileEntityLaser)worldObj.getBlockTileEntity(hit.blockX, hit.blockY, hit.blockZ); if (tel != null && tel.getFrequency() == frequency) { @@ -310,7 +310,7 @@ public class TileEntityLaser extends TileEntity implements IPeripheral{ } public boolean isWithCamera() { - return (worldObj.getBlockId(xCoord, yCoord, zCoord) == WarpDrive.LASER_BLOCKCAM_BLOCKID); + return (worldObj.getBlockId(xCoord, yCoord, zCoord) == WarpDrive.instance.config.laserCamID); } public int getFrequency() { diff --git a/src/cr0s/WarpDrive/TileEntityMiningLaser.java b/src/cr0s/WarpDrive/TileEntityMiningLaser.java index ac33f3bc..14c5720b 100644 --- a/src/cr0s/WarpDrive/TileEntityMiningLaser.java +++ b/src/cr0s/WarpDrive/TileEntityMiningLaser.java @@ -61,9 +61,9 @@ public class TileEntityMiningLaser extends TileEntity implements IPeripheral{ Block.oreRedstoneGlowing.blockID, Block.oreRedstone.blockID, Block.oreNetherQuartz.blockID, - 247, // IC - 248, // IC - 249, // IC + Items.getItem("uraniumOre").itemID, // IC + Items.getItem("copperOre").itemID, // IC + Items.getItem("tinOre").itemID, // IC 4095 // AS uranus )); @@ -99,16 +99,25 @@ public class TileEntityMiningLaser extends TileEntity implements IPeripheral{ private int layerOffset = 1; private Vector3 minerVector; - private long uid = 0; + //private long uid = 0; TileEntityParticleBooster booster = null; private final int MFFS_FIELD_BLOCKID = 1681; private boolean isOnEarth = false; - + //int t = 20; @Override public void updateEntity() { + /*if (uid == 0) { + uid = worldObj.rand.nextInt(99999); + } + if (--t == 0) { + t = 20; + System.out.println("[MINER] Ticked: " + uid + " | " + xCoord + "; " + yCoord + "; " + zCoord); + }*/ + + isOnEarth = (worldObj.provider.dimensionId == 0); if (isMining) { diff --git a/src/cr0s/WarpDrive/TileEntityReactor.java b/src/cr0s/WarpDrive/TileEntityReactor.java index 3ecd5fbe..cf945ddc 100644 --- a/src/cr0s/WarpDrive/TileEntityReactor.java +++ b/src/cr0s/WarpDrive/TileEntityReactor.java @@ -263,7 +263,7 @@ public class TileEntityReactor extends TileEntity implements IEnergySink { for (int y = ymin; y <= ymax; y++) { for (int x = xmin; x <= xmax; x++) { for (int z = zmin; z <= zmax; z++) { - if (worldObj.getBlockId(x, y, z) == WarpDrive.ISOLATION_BLOCKID) { + if (worldObj.getBlockId(x, y, z) == WarpDrive.instance.config.isolationID) { this.isolationBlocksCount++; } } diff --git a/src/cr0s/WarpDrive/WarpCoresRegistry.java b/src/cr0s/WarpDrive/WarpCoresRegistry.java index 8db91d89..39b892c4 100644 --- a/src/cr0s/WarpDrive/WarpCoresRegistry.java +++ b/src/cr0s/WarpDrive/WarpCoresRegistry.java @@ -101,6 +101,8 @@ public class WarpCoresRegistry { public boolean isWarpCoreIntersectsWithOthers(TileEntityReactor core) { AxisAlignedBB aabb1, aabb2; + removeDeadCores(); + for (TileEntityReactor c : registry) { // Skip cores in other worlds if (c.worldObj != core.worldObj) { @@ -143,10 +145,11 @@ public class WarpCoresRegistry { } public void removeDeadCores() { + LocalProfiler.start("WCR.removeDeadCores()"); ArrayList oldRegistry = (ArrayList) registry.clone(); for (TileEntityReactor c : registry) { - if (c != null && c.worldObj != null && (c.worldObj.getBlockId(c.xCoord, c.yCoord, c.zCoord) != WarpDrive.WARP_CORE_BLOCKID || (c.worldObj.getBlockTileEntity(c.xCoord, c.yCoord, c.zCoord) != null && c.worldObj.getBlockTileEntity(c.xCoord, c.yCoord, c.zCoord).isInvalid()))) { + if (c != null && c.worldObj != null && (c.worldObj.getBlockId(c.xCoord, c.yCoord, c.zCoord) != WarpDrive.instance.config.coreID|| (c.worldObj.getBlockTileEntity(c.xCoord, c.yCoord, c.zCoord) != null && c.worldObj.getBlockTileEntity(c.xCoord, c.yCoord, c.zCoord).isInvalid()))) { oldRegistry.remove(c); return; } @@ -154,6 +157,7 @@ public class WarpCoresRegistry { // Update old registry to new witout dead cores this.registry = (ArrayList) oldRegistry.clone(); + LocalProfiler.stop(); } // TODO: fix it to normal work in client diff --git a/src/cr0s/WarpDrive/WarpDrive.java b/src/cr0s/WarpDrive/WarpDrive.java index 15bd849a..2382c4f4 100644 --- a/src/cr0s/WarpDrive/WarpDrive.java +++ b/src/cr0s/WarpDrive/WarpDrive.java @@ -2,6 +2,7 @@ package cr0s.WarpDrive; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PostInit; @@ -19,6 +20,7 @@ import ic2.api.item.Items; import java.util.List; +import shipmod.ShipModConfig; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.Minecraft; @@ -27,6 +29,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; +import net.minecraftforge.common.Configuration; import net.minecraftforge.common.DimensionManager; import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.ForgeChunkManager.LoadingCallback; @@ -39,83 +42,26 @@ import net.minecraftforge.common.MinecraftForge; * @author Cr0s */ public class WarpDrive implements LoadingCallback { - - public final static int WARP_CORE_BLOCKID = 500; - public final static int PROTOCOL_BLOCK_BLOCKID = 501; - public final static int RADAR_BLOCK_BLOCKID = 502; - public final static int ISOLATION_BLOCKID = 503; - public final static int AIR_BLOCKID = 504; - public final static int AIRGEN_BLOCKID = 505; - public final static int GAS_BLOCKID = 506; - - public final static int LASER_BLOCK_BLOCKID = 507; - public final static int MINING_LASER_BLOCK_BLOCKID = 508; - public final static int PARTICLE_BOOSTER_BLOCKID = 509; - public final static int LIFT_BLOCKID = 510; - - public final static int LASER_BLOCKCAM_BLOCKID = 512; - public final static int CAMERA_BLOCKID = 513; - public final static int MONITOR_BLOCKID = 514; - - public final static int IRIDIUM_BLOCKID = 515; - // World limits public final static int WORLD_LIMIT_BLOCKS = 100000; - public final static Block warpCore = new BlockReactor(WARP_CORE_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Warp Core"); + public static Block warpCore; + public static Block protocolBlock; + public static Block radarBlock; + public static Block isolationBlock; + public static Block airgenBlock; + public static Block laserBlock; + public static Block laserCamBlock; + public static Block cameraBlock; + public static Block monitorBlock; + public static Block boosterBlock; + public static Block miningLaserBlock; + public static Block liftBlock; - public final static Block protocolBlock = new BlockProtocol(PROTOCOL_BLOCK_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Warp Controller"); + public static Block airBlock; + public static Block gasBlock; - public final static Block radarBlock = new BlockRadar(RADAR_BLOCK_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("W-Radar"); - - public final static Block isolationBlock = new BlockWarpIsolation(ISOLATION_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Warp-Field Isolation Block"); - - public final static Block airgenBlock = new BlockAirGenerator(AIRGEN_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Air Generator"); - - public final static Block laserBlock = new BlockLaser(LASER_BLOCK_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Laser Emitter"); - - public final static Block laserCamBlock = new BlockLaserCam(LASER_BLOCKCAM_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Laser Emitter + Camera"); - - public final static Block cameraBlock = new BlockCamera(CAMERA_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Camera block"); - - public final static Block monitorBlock = new BlockMonitor(MONITOR_BLOCKID) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Monitor"); - - public final static Block boosterBlock = new BlockParticleBooster(PARTICLE_BOOSTER_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Particle Booster"); - - public final static Block miningLaserBlock = new BlockMiningLaser(MINING_LASER_BLOCK_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Mining Laser"); - - public final static Block liftBlock = new BlockLift(LIFT_BLOCKID, 0, Material.rock) - .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Laser lift"); - - public final static Block airBlock = (new BlockAir(AIR_BLOCKID)).setHardness(0.0F).setUnlocalizedName("Air block"); - public final static Block gasBlock = (new BlockGas(GAS_BLOCKID)).setHardness(0.0F).setUnlocalizedName("Gas block"); - - public final static Block iridiumBlock = new BlockIridium(IRIDIUM_BLOCKID) - .setHardness(0.8F).setResistance(150 * 4).setStepSound(Block.soundMetalFootstep) - .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Block of Iridium"); + public static Block iridiumBlock; public static BiomeGenBase spaceBiome; public World space; @@ -140,8 +86,14 @@ public class WarpDrive implements LoadingCallback { public boolean isOverlayEnabled = false; public int overlayType = 0; - @PreInit + public WarpDriveConfig config; + + @EventHandler + //@PreInit public void preInit(FMLPreInitializationEvent event) { + this.config = new WarpDriveConfig(new Configuration(event.getSuggestedConfigurationFile())); + this.config.loadAndSave(); + if(FMLCommonHandler.instance().getSide().isClient()) { System.out.println("[WarpDrive] Registering sounds event handler..."); @@ -151,59 +103,114 @@ public class WarpDrive implements LoadingCallback { @Init public void load(FMLInitializationEvent event) { - + // WARP CORE + this.warpCore = new BlockReactor(this.config.coreID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Warp Core"); LanguageRegistry.addName(warpCore, "Warp Core"); GameRegistry.registerBlock(warpCore, "warpCore"); GameRegistry.registerTileEntity(TileEntityReactor.class, "warpCore"); + // CORE CONTROLLER + this.protocolBlock = new BlockProtocol(config.controllerID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Warp Controller"); LanguageRegistry.addName(protocolBlock, "Warp Controller"); GameRegistry.registerBlock(protocolBlock, "protocolBlock"); GameRegistry.registerTileEntity(TileEntityProtocol.class, "protocolBlock"); + // WARP RADAR + this.radarBlock = new BlockRadar(config.radarID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("W-Radar"); LanguageRegistry.addName(radarBlock, "W-Radar"); GameRegistry.registerBlock(radarBlock, "radarBlock"); GameRegistry.registerTileEntity(TileEntityRadar.class, "radarBlock"); + // WARP ISOLATION + this.isolationBlock = new BlockWarpIsolation(config.isolationID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Warp-Field Isolation Block"); LanguageRegistry.addName(isolationBlock, "Warp-Field Isolation Block"); GameRegistry.registerBlock(isolationBlock, "isolationBlock"); + // AIR GENERATOR + this.airgenBlock = new BlockAirGenerator(config.airgenID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Air Generator"); + LanguageRegistry.addName(airgenBlock, "Air Generator"); + GameRegistry.registerBlock(airgenBlock, "airgenBlock"); + GameRegistry.registerTileEntity(TileEntityAirGenerator.class, "airgenBlock"); + + // AIR BLOCK + this.airBlock = (new BlockAir(config.airID)).setHardness(0.0F).setUnlocalizedName("Air block"); LanguageRegistry.addName(airBlock, "Air block"); GameRegistry.registerBlock(airBlock, "airBlock"); + // GAS BLOCK + this.gasBlock = (new BlockGas(config.gasID)).setHardness(0.0F).setUnlocalizedName("Gas block"); LanguageRegistry.addName(gasBlock, "Gas block"); - GameRegistry.registerBlock(gasBlock, "gasBlock"); - - LanguageRegistry.addName(airgenBlock, "Air Generator"); - GameRegistry.registerBlock(airgenBlock, "airgenBlock"); - GameRegistry.registerTileEntity(TileEntityAirGenerator.class, "airgenBlock"); + GameRegistry.registerBlock(gasBlock, "gasBlock"); + // LASER EMITTER + this.laserBlock = new BlockLaser(config.laserID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Laser Emitter"); LanguageRegistry.addName(laserBlock, "Laser Emitter"); GameRegistry.registerBlock(laserBlock, "laserBlock"); GameRegistry.registerTileEntity(TileEntityLaser.class, "laserBlock"); + // LASER EMITTER WITH CAMERA + this.laserCamBlock = new BlockLaserCam(config.laserCamID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Laser Emitter + Camera"); LanguageRegistry.addName(laserCamBlock, "Laser Emitter + Camera"); GameRegistry.registerBlock(laserCamBlock, "laserCamBlock"); + // CAMERA + this.cameraBlock = new BlockCamera(config.camID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Camera block"); LanguageRegistry.addName(cameraBlock, "Camera"); GameRegistry.registerBlock(cameraBlock, "cameraBlock"); GameRegistry.registerTileEntity(TileEntityCamera.class, "cameraBlock"); + // MONITOR + this.monitorBlock = new BlockMonitor(config.monitorID) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Monitor"); LanguageRegistry.addName(monitorBlock, "Monitor"); GameRegistry.registerBlock(monitorBlock, "monitorBlock"); GameRegistry.registerTileEntity(TileEntityMonitor.class, "monitorBlock"); + // MINING LASER + this.miningLaserBlock = new BlockMiningLaser(config.miningLaserID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Mining Laser"); LanguageRegistry.addName(miningLaserBlock, "Mining Laser"); GameRegistry.registerBlock(miningLaserBlock, "miningLaserBlock"); GameRegistry.registerTileEntity(TileEntityMiningLaser.class, "miningLaserBlock"); + // PARTICLE BOOSTER + this.boosterBlock = new BlockParticleBooster(config.particleBoosterID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Particle Booster"); LanguageRegistry.addName(boosterBlock, "Particle Booster"); GameRegistry.registerBlock(boosterBlock, "boosterBlock"); GameRegistry.registerTileEntity(TileEntityParticleBooster.class, "boosterBlock"); + // RAY LIFT + this.liftBlock = new BlockLift(config.liftID, 0, Material.rock) + .setHardness(0.5F).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Laser lift"); LanguageRegistry.addName(liftBlock, "Laser lift"); GameRegistry.registerBlock(liftBlock, "liftBlock"); GameRegistry.registerTileEntity(TileEntityLift.class, "liftBlock"); + // IRIDIUM BLOCK + this.iridiumBlock = new BlockIridium(config.iridiumID) + .setHardness(0.8F).setResistance(150 * 4).setStepSound(Block.soundMetalFootstep) + .setCreativeTab(CreativeTabs.tabRedstone).setUnlocalizedName("Block of Iridium"); LanguageRegistry.addName(iridiumBlock, "Block of Iridium"); GameRegistry.registerBlock(iridiumBlock, "iridiumBlock"); diff --git a/src/cr0s/WarpDrive/WarpDriveConfig.java b/src/cr0s/WarpDrive/WarpDriveConfig.java new file mode 100644 index 00000000..b79e1c95 --- /dev/null +++ b/src/cr0s/WarpDrive/WarpDriveConfig.java @@ -0,0 +1,68 @@ +package cr0s.WarpDrive; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraftforge.common.Configuration; + +public class WarpDriveConfig { + private Configuration config; + + public Set valuableOres; + public Set minerValuables; + + public int coreID, controllerID, radarID, isolationID, airID, airgenID, gasID, laserID, miningLaserID, particleBoosterID, liftID, laserCamID, camID, monitorID, iridiumID; + /* + * public final static int WARP_CORE_BLOCKID = 500; + public final static int PROTOCOL_BLOCK_BLOCKID = 501; + public final static int RADAR_BLOCK_BLOCKID = 502; + public final static int ISOLATION_BLOCKID = 503; + public final static int AIR_BLOCKID = 504; + public final static int AIRGEN_BLOCKID = 505; + public final static int GAS_BLOCKID = 506; + + public final static int LASER_BLOCK_BLOCKID = 507; + public final static int MINING_LASER_BLOCK_BLOCKID = 508; + public final static int PARTICLE_BOOSTER_BLOCKID = 509; + public final static int LIFT_BLOCKID = 510; + + public final static int LASER_BLOCKCAM_BLOCKID = 512; + public final static int CAMERA_BLOCKID = 513; + public final static int MONITOR_BLOCKID = 514; + + public final static int IRIDIUM_BLOCKID = 515; + */ + public WarpDriveConfig(Configuration config) { + this.config = config; + + this.valuableOres = new HashSet(); + this.minerValuables = new HashSet(); + } + + public void loadAndSave() { + this.config.load(); + + this.coreID = this.config.getBlock("core", 500).getInt(); + this.controllerID = this.config.getBlock("controller", 501).getInt(); + + this.radarID = this.config.getBlock("radar", 502).getInt(); + this.isolationID = this.config.getBlock("isolation", 503).getInt(); + + this.airID = this.config.getBlock("air", 504).getInt(); + this.airgenID = this.config.getBlock("airgen", 505).getInt(); + this.gasID = this.config.getBlock("gas", 506).getInt(); + + this.laserID = this.config.getBlock("laser", 507).getInt(); + this.miningLaserID = this.config.getBlock("mininglaser", 508).getInt(); + this.particleBoosterID = this.config.getBlock("particlebooster", 509).getInt(); + this.liftID = this.config.getBlock("lift", 510).getInt(); + + this.laserCamID = this.config.getBlock("lasercam", 512).getInt(); + this.camID = this.config.getBlock("camera", 513).getInt(); + this.monitorID = this.config.getBlock("monitor", 514).getInt(); + + this.iridiumID = this.config.getBlock("iridium", 515).getInt(); + + this.config.save(); + } +} diff --git a/src/cr0s/WarpDrive/WorldGenSmallShip.java b/src/cr0s/WarpDrive/WorldGenSmallShip.java index 26c218bf..6d5a1301 100644 --- a/src/cr0s/WarpDrive/WorldGenSmallShip.java +++ b/src/cr0s/WarpDrive/WorldGenSmallShip.java @@ -296,7 +296,7 @@ public class WorldGenSmallShip extends WorldGenerator world.setBlock(i + 9, j + 6, k + 6, cableType.itemID, cableType.getItemDamage(), 0); world.setBlock(i + 9, j + 6, k + 7, ADV_SOLAR_BLOCKID, solarType, 0); // Placing air generator - world.setBlock(i + 9, j + 5, k + 7, WarpDrive.AIRGEN_BLOCKID, 0, 0); + world.setBlock(i + 9, j + 5, k + 7, WarpDrive.instance.config.airgenID, 0, 0); world.setBlock(i + 9, j + 6, k + 10, WorldGenStructure.getStoneBlock(corrupted, rand)); world.setBlock(i + 9, j + 6, k + 11, WorldGenStructure.getStoneBlock(corrupted, rand)); @@ -338,7 +338,7 @@ public class WorldGenSmallShip extends WorldGenerator world.setBlock(i + 10, j + 6, k + 7, ADV_SOLAR_BLOCKID, solarType, 0); // Placing air generator - world.setBlock(i + 10, j + 5, k + 7, WarpDrive.AIRGEN_BLOCKID, 0, 0); + world.setBlock(i + 10, j + 5, k + 7, WarpDrive.instance.config.airgenID, 0, 0); world.setBlock(i + 10, j + 6, k + 10, WorldGenStructure.getStoneBlock(corrupted, rand)); world.setBlock(i + 10, j + 6, k + 11, WorldGenStructure.getStoneBlock(corrupted, rand)); @@ -372,7 +372,7 @@ public class WorldGenSmallShip extends WorldGenerator // Place warp-controller if (rand.nextBoolean()) { - world.setBlock(i + 11, j + 3, k + 7, WarpDrive.PROTOCOL_BLOCK_BLOCKID); + world.setBlock(i + 11, j + 3, k + 7, WarpDrive.instance.config.controllerID); } world.setBlock(i + 11, j + 3, k + 8, WorldGenStructure.getGlassBlock(corrupted, rand)); @@ -427,7 +427,7 @@ public class WorldGenSmallShip extends WorldGenerator // Place warp-core if (rand.nextBoolean()) { - world.setBlock(i + 12, j + 3, k + 7, WarpDrive.WARP_CORE_BLOCKID); + world.setBlock(i + 12, j + 3, k + 7, WarpDrive.instance.config.coreID); } world.setBlock(i + 12, j + 3, k + 8, WorldGenStructure.getGlassBlock(corrupted, rand));