Added transporter (redesign with fresh reimplementation) wip

This commit is contained in:
Unknown 2018-02-17 17:06:14 +01:00 committed by LemADEC
parent 0180bdd40b
commit d835480ac5
6 changed files with 919 additions and 493 deletions

View file

@ -48,12 +48,9 @@ public class BlockTransporter extends BlockAbstractContainer {
return iconBuffer[2]; return iconBuffer[2];
} }
/**
* Called upon block activation (right click on the block.)
*/
@Override @Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ) { public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer entityPlayer,
final int side, final float hitX, final float hitY, final float hitZ) {
if (world.isRemote) { if (world.isRemote) {
return false; return false;
} }
@ -66,6 +63,6 @@ public class BlockTransporter extends BlockAbstractContainer {
} }
} }
return false; return super.onBlockActivated(world, x, y, z, entityPlayer, side, hitX, hitY, hitZ);
} }
} }

View file

@ -48,6 +48,7 @@ public class Dictionary {
public static HashSet<Block> BLOCKS_STOPMINING = null; public static HashSet<Block> BLOCKS_STOPMINING = null;
public static HashMap<Block, Integer> BLOCKS_PLACE = null; public static HashMap<Block, Integer> BLOCKS_PLACE = null;
public static HashSet<Block> BLOCKS_NOCAMOUFLAGE = null; public static HashSet<Block> BLOCKS_NOCAMOUFLAGE = null;
public static HashSet<Block> BLOCKS_NOBLINK = null;
// Entities dictionary // Entities dictionary
public static HashSet<String> ENTITIES_ANCHOR = null; public static HashSet<String> ENTITIES_ANCHOR = null;
@ -80,13 +81,14 @@ public class Dictionary {
+ "- Expandable: this block will be squished/ignored in case of collision.\n" + "- Expandable: this block will be squished/ignored in case of collision.\n"
+ "- Mining: this block is mineable (default: all 'ore' blocks from the ore dictionary).\n" + "- Mining: this block is mineable (default: all 'ore' blocks from the ore dictionary).\n"
+ "- SkipMining: this block is ignored from mining (default: bedrock).\n" + "- SkipMining: this block is ignored from mining (default: bedrock).\n"
+ "- StopMining: this block will prevent mining through it (default: forcefields).\n" + "- StopMining: this block will prevent mining through it (default: command/creative, bedrock, force fields).\n"
+ "- PlaceEarliest: this block will be removed last and placed first (default: ship hull and projectors).\n" + "- PlaceEarliest: this block will be removed last and placed first (default: ship hull and projectors).\n"
+ "- PlaceEarlier: this block will be placed fairly soon (default: forcefield blocks).\n" + "- PlaceEarlier: this block will be placed fairly soon (default: forcefield blocks).\n"
+ "- PlaceNormal: this block will be removed and placed with non-tile entities.\n" + "- PlaceNormal: this block will be removed and placed with non-tile entities.\n"
+ "- PlaceLater: this block will be placed fairly late (default: IC2 Reactor core).\n" + "- PlaceLater: this block will be placed fairly late (default: IC2 Reactor core).\n"
+ "- PlaceLatest: this block will be removed first and placed last (default: IC2 Reactor chamber).\n" + "- PlaceLatest: this block will be removed first and placed last (default: IC2 Reactor chamber).\n"
+ "- NoCamouflage: this block isn't valid for camouflage."); + "- NoCamouflage: this block isn't valid for camouflage.\n"
+ "- NoBlink: this block will prevent teleportation through it (default: bedrock, force fields)");
ConfigCategory categoryBlockTags = config.getCategory("block_tags"); ConfigCategory categoryBlockTags = config.getCategory("block_tags");
String[] taggedBlocksName = categoryBlockTags.getValues().keySet().toArray(new String[0]); String[] taggedBlocksName = categoryBlockTags.getValues().keySet().toArray(new String[0]);
@ -103,17 +105,17 @@ public class Dictionary {
config.get("block_tags", "TConstruct:slime.leaves" , "Leaf").getString(); config.get("block_tags", "TConstruct:slime.leaves" , "Leaf").getString();
// anchors // anchors
config.get("block_tags", "minecraft:bedrock" , "Anchor SkipMining").getString(); config.get("block_tags", "minecraft:bedrock" , "Anchor SkipMining NoBlink").getString();
config.get("block_tags", "minecraft:command_block" , "Anchor StopMining").getString(); config.get("block_tags", "minecraft:command_block" , "Anchor StopMining").getString();
config.get("block_tags", "minecraft:end_portal_frame" , "Anchor StopMining").getString(); config.get("block_tags", "minecraft:end_portal_frame" , "Anchor StopMining").getString();
config.get("block_tags", "minecraft:end_portal" , "Anchor StopMining").getString(); config.get("block_tags", "minecraft:end_portal" , "Anchor StopMining").getString();
config.get("block_tags", "Artifacts:invisible_bedrock" , "Anchor StopMining").getString(); config.get("block_tags", "Artifacts:invisible_bedrock" , "Anchor StopMining NoBlink").getString();
config.get("block_tags", "Artifacts:anti_anti_builder_stone" , "Anchor StopMining").getString(); config.get("block_tags", "Artifacts:anti_anti_builder_stone" , "Anchor StopMining").getString();
config.get("block_tags", "Artifacts:anti_builder" , "Anchor StopMining").getString(); config.get("block_tags", "Artifacts:anti_builder" , "Anchor StopMining").getString();
config.get("block_tags", "ComputerCraft:command_computer" , "Anchor SkipMining").getString(); config.get("block_tags", "ComputerCraft:command_computer" , "Anchor SkipMining").getString();
config.get("block_tags", "IC2:blockPersonal" , "Anchor SkipMining").getString(); config.get("block_tags", "IC2:blockPersonal" , "Anchor SkipMining").getString();
config.get("block_tags", "malisisdoors:rustyHatch" , "Anchor").getString(); config.get("block_tags", "malisisdoors:rustyHatch" , "Anchor").getString();
config.get("block_tags", "WarpDrive:blockBedrockGlass" , "Anchor SkipMining").getString(); config.get("block_tags", "WarpDrive:blockBedrockGlass" , "Anchor SkipMining NoBlink").getString();
// placement priorities // placement priorities
config.get("block_tags", "minecraft:lever" , "PlaceLatest").getString(); config.get("block_tags", "minecraft:lever" , "PlaceLatest").getString();
@ -130,8 +132,8 @@ public class Dictionary {
config.get("block_tags", "IC2:blockAlloy" , "PlaceEarliest StopMining").getString(); config.get("block_tags", "IC2:blockAlloy" , "PlaceEarliest StopMining").getString();
config.get("block_tags", "IC2:blockAlloyGlass" , "PlaceEarliest StopMining").getString(); config.get("block_tags", "IC2:blockAlloyGlass" , "PlaceEarliest StopMining").getString();
config.get("block_tags", "minecraft:obsidian" , "PlaceEarliest Mining").getString(); config.get("block_tags", "minecraft:obsidian" , "PlaceEarliest Mining").getString();
config.get("block_tags", "AdvancedRepulsionSystems:field" , "PlaceEarlier StopMining").getString(); config.get("block_tags", "AdvancedRepulsionSystems:field" , "PlaceEarlier StopMining NoBlink").getString();
// config.get("block_tags", "MFFS:field" , "PlaceEarlier StopMining" ).getString(); // config.get("block_tags", "MFFS:field" , "PlaceEarlier StopMining NoBlink").getString();
config.get("block_tags", "IC2:blockGenerator" , "PlaceLater").getString(); config.get("block_tags", "IC2:blockGenerator" , "PlaceLater").getString();
config.get("block_tags", "IC2:blockReactorChamber" , "PlaceLatest").getString(); config.get("block_tags", "IC2:blockReactorChamber" , "PlaceLatest").getString();
config.get("block_tags", "ImmersiveEngineering:metalDevice" , "PlaceLatest").getString(); // FIXME: need to fine tune at metadata level config.get("block_tags", "ImmersiveEngineering:metalDevice" , "PlaceLatest").getString(); // FIXME: need to fine tune at metadata level
@ -143,19 +145,19 @@ public class Dictionary {
config.get("block_tags", "CarpentersBlocks:blockCarpentersLever" , "PlaceLatest").getString(); config.get("block_tags", "CarpentersBlocks:blockCarpentersLever" , "PlaceLatest").getString();
config.get("block_tags", "CarpentersBlocks:blockCarpentersPressurePlate" , "PlaceLatest").getString(); config.get("block_tags", "CarpentersBlocks:blockCarpentersPressurePlate" , "PlaceLatest").getString();
config.get("block_tags", "CarpentersBlocks:blockCarpentersTorch" , "PlaceLatest").getString(); config.get("block_tags", "CarpentersBlocks:blockCarpentersTorch" , "PlaceLatest").getString();
// config.get("block_tags", "SGCraft:stargateBase" , "PlaceEarliest").getString(); // config.get("block_tags", "SGCraft:stargateBase" , "PlaceEarliest").getString();
// config.get("block_tags", "SGCraft:stargateBase" , "PlaceEarliest").getString(); // config.get("block_tags", "SGCraft:stargateBase" , "PlaceEarliest").getString();
// config.get("block_tags", "SGCraft:stargateRing" , "PlaceEarlier").getString(); // config.get("block_tags", "SGCraft:stargateRing" , "PlaceEarlier").getString();
// config.get("block_tags", "SGCraft:stargateController" , "PlaceLatest").getString(); // config.get("block_tags", "SGCraft:stargateController" , "PlaceLatest").getString();
config.get("block_tags", "OpenComputers:case1" , "PlaceLatest").getString(); config.get("block_tags", "OpenComputers:case1" , "PlaceLatest").getString();
config.get("block_tags", "OpenComputers:case2" , "PlaceLatest").getString(); config.get("block_tags", "OpenComputers:case2" , "PlaceLatest").getString();
config.get("block_tags", "OpenComputers:case3" , "PlaceLatest").getString(); config.get("block_tags", "OpenComputers:case3" , "PlaceLatest").getString();
config.get("block_tags", "OpenComputers:caseCreative" , "PlaceLatest").getString(); config.get("block_tags", "OpenComputers:caseCreative" , "PlaceLatest").getString();
config.get("block_tags", "OpenComputers:keyboard" , "PlaceLatest").getString(); config.get("block_tags", "OpenComputers:keyboard" , "PlaceLatest").getString();
config.get("block_tags", "PneumaticCraft:pressureChamberValve" , "PlaceEarlier").getString(); config.get("block_tags", "PneumaticCraft:pressureChamberValve" , "PlaceEarlier").getString();
config.get("block_tags", "StargateTech2:block.shieldEmitter" , "PlaceLater StopMining").getString(); config.get("block_tags", "StargateTech2:block.shieldEmitter" , "PlaceLater StopMining NoBlink").getString();
config.get("block_tags", "StargateTech2:block.shieldController" , "PlaceNormal StopMining").getString(); config.get("block_tags", "StargateTech2:block.shieldController" , "PlaceNormal StopMining NoBlink").getString();
config.get("block_tags", "StargateTech2:block.shield" , "PlaceNormal StopMining").getString(); config.get("block_tags", "StargateTech2:block.shield" , "PlaceNormal StopMining NoBlink").getString();
config.get("block_tags", "StargateTech2:block.busAdapter" , "PlaceLatest StopMining").getString(); config.get("block_tags", "StargateTech2:block.busAdapter" , "PlaceLatest StopMining").getString();
config.get("block_tags", "StargateTech2:block.busCable" , "PlaceNormal StopMining").getString(); config.get("block_tags", "StargateTech2:block.busCable" , "PlaceNormal StopMining").getString();
@ -176,26 +178,26 @@ public class Dictionary {
config.get("block_tags", "minecraft:redstone_block" , "Mining").getString(); config.get("block_tags", "minecraft:redstone_block" , "Mining").getString();
// mining an 'end' moon // mining an 'end' moon
config.get("block_tags", "WarpDrive:blockIridium" , "Mining").getString(); // stronger than obsidian but can still be mined (see ender moon) config.get("block_tags", "WarpDrive:blockIridium" , "Mining").getString(); // stronger than obsidian but can still be mined (see ender moon)
// force field camouflage blacklisting // force field camouflage blacklisting
config.get("block_tags", "deepresonance:energyCollectorBlock" , "NoCamouflage").getString(); config.get("block_tags", "deepresonance:energyCollectorBlock" , "NoCamouflage").getString();
config.get("block_tags", "deepresonance:resonatingCrystalBlock" , "NoCamouflage").getString(); config.get("block_tags", "deepresonance:resonatingCrystalBlock" , "NoCamouflage").getString();
config.get("block_tags", "evilcraft:bloodInfuser" , "NoCamouflage").getString(); config.get("block_tags", "evilcraft:bloodInfuser" , "NoCamouflage").getString();
config.get("block_tags", "evilcraft:darkOre" , "NoCamouflage").getString(); config.get("block_tags", "evilcraft:darkOre" , "NoCamouflage").getString();
config.get("block_tags", "evilcraft:sanguinaryEnvironmentalAccumulator", "NoCamouflage").getString(); config.get("block_tags", "evilcraft:sanguinaryEnvironmentalAccumulator" , "NoCamouflage").getString();
config.get("block_tags", "evilcraft:spiritReanimator" , "NoCamouflage").getString(); config.get("block_tags", "evilcraft:spiritReanimator" , "NoCamouflage").getString();
config.get("block_tags", "openmodularturrets:baseTierWood" , "NoCamouflage").getString(); config.get("block_tags", "openmodularturrets:baseTierWood" , "NoCamouflage").getString();
config.get("block_tags", "openmodularturrets:baseTierOneBlock" , "NoCamouflage").getString(); config.get("block_tags", "openmodularturrets:baseTierOneBlock" , "NoCamouflage").getString();
config.get("block_tags", "openmodularturrets:baseTierTwoBlock" , "NoCamouflage").getString(); config.get("block_tags", "openmodularturrets:baseTierTwoBlock" , "NoCamouflage").getString();
config.get("block_tags", "openmodularturrets:baseTierThreeBlock" , "NoCamouflage").getString(); config.get("block_tags", "openmodularturrets:baseTierThreeBlock" , "NoCamouflage").getString();
config.get("block_tags", "openmodularturrets:baseTierFourBlock" , "NoCamouflage").getString(); config.get("block_tags", "openmodularturrets:baseTierFourBlock" , "NoCamouflage").getString();
config.get("block_tags", "Thaumcraft:blockCustomPlant" , "NoCamouflage").getString(); config.get("block_tags", "Thaumcraft:blockCustomPlant" , "NoCamouflage").getString();
config.get("block_tags", "ThermalExpansion:Cache" , "NoCamouflage").getString(); config.get("block_tags", "ThermalExpansion:Cache" , "NoCamouflage").getString();
config.get("block_tags", "ThermalExpansion:Device" , "NoCamouflage").getString(); config.get("block_tags", "ThermalExpansion:Device" , "NoCamouflage").getString();
config.get("block_tags", "ThermalExpansion:Machine" , "NoCamouflage").getString(); config.get("block_tags", "ThermalExpansion:Machine" , "NoCamouflage").getString();
config.get("block_tags", "ThermalExpansion:Sponge" , "NoCamouflage").getString(); config.get("block_tags", "ThermalExpansion:Sponge" , "NoCamouflage").getString();
config.get("block_tags", "witchery:leechchest" , "NoCamouflage").getString(); config.get("block_tags", "witchery:leechchest" , "NoCamouflage").getString();
taggedBlocksName = categoryBlockTags.getValues().keySet().toArray(new String[0]); taggedBlocksName = categoryBlockTags.getValues().keySet().toArray(new String[0]);
} }
@ -361,6 +363,7 @@ public class Dictionary {
BLOCKS_STOPMINING = new HashSet<>(taggedBlocks.size()); BLOCKS_STOPMINING = new HashSet<>(taggedBlocks.size());
BLOCKS_PLACE = new HashMap<>(taggedBlocks.size()); BLOCKS_PLACE = new HashMap<>(taggedBlocks.size());
BLOCKS_NOCAMOUFLAGE = new HashSet<>(taggedBlocks.size()); BLOCKS_NOCAMOUFLAGE = new HashSet<>(taggedBlocks.size());
BLOCKS_NOBLINK = new HashSet<>(taggedBlocks.size());
for (final Entry<String, String> taggedBlock : taggedBlocks.entrySet()) { for (final Entry<String, String> taggedBlock : taggedBlocks.entrySet()) {
final Block block = Block.getBlockFromName(taggedBlock.getKey()); final Block block = Block.getBlockFromName(taggedBlock.getKey());
if (block == null) { if (block == null) {
@ -385,6 +388,7 @@ public class Dictionary {
case "PlaceLater" : BLOCKS_PLACE.put(block, 3); break; case "PlaceLater" : BLOCKS_PLACE.put(block, 3); break;
case "PlaceLatest" : BLOCKS_PLACE.put(block, 4); break; case "PlaceLatest" : BLOCKS_PLACE.put(block, 4); break;
case "NoCamouflage" : BLOCKS_NOCAMOUFLAGE.add(block); break; case "NoCamouflage" : BLOCKS_NOCAMOUFLAGE.add(block); break;
case "NoBlink" : BLOCKS_NOBLINK.add(block); break;
default: default:
WarpDrive.logger.error("Unsupported tag '" + tag + "' for block " + block); WarpDrive.logger.error("Unsupported tag '" + tag + "' for block " + block);
break; break;

View file

@ -356,10 +356,39 @@ public class WarpDriveConfig {
public static int IC2_REACTOR_COOLING_INTERVAL_TICKS = 10; public static int IC2_REACTOR_COOLING_INTERVAL_TICKS = 10;
// Transporter // Transporter
public static int TRANSPORTER_MAX_ENERGY_STORED = 1000000; public static int TRANSPORTER_MAX_ENERGY_STORED = 2000000;
public static boolean TRANSPORTER_USE_RELATIVE_COORDS = true; public static int TRANSPORTER_ENERGY_STORED_UPGRADE_BONUS = TRANSPORTER_MAX_ENERGY_STORED / 2;
public static double TRANSPORTER_ENERGY_PER_BLOCK = 100.0; public static int TRANSPORTER_ENERGY_STORED_UPGRADE_MAX_QUANTITY = 8;
public static double TRANSPORTER_MAX_BOOST_MUL = 4.0; public static int TRANSPORTER_RANGE_BASE_BLOCKS = 128;
public static int TRANSPORTER_RANGE_UPGRADE_BLOCKS = 16;
public static int TRANSPORTER_RANGE_UPGRADE_MAX_QUANTITY = 8;
public static double TRANSPORTER_ACQUIRING_ENERGY_FACTOR = 0.02D;
public static int TRANSPORTER_JAMMED_COOLDOWN_TICKS = 2 * 20;
public static int TRANSPORTER_TRANSFER_ENERGY_AT_MIN_RANGE = 100000;
public static int TRANSPORTER_TRANSFER_ENERGY_AT_MAX_RANGE = 1000000;
public static double TRANSPORTER_TRANSFER_ENERGY_FACTOR_MAX = 10.0D;
public static int TRANSPORTER_TRANSFER_FAILURE_MAX_DAMAGE = 5;
public static double TRANSPORTER_TRANSFER_SUCCESS_LOCK_BONUS = 0.20D;
public static int TRANSPORTER_TRANSFER_SUCCESS_MAX_DAMAGE = 100;
public static double TRANSPORTER_TRANSFER_LOCKING_LOST = 0.5D;
public static int TRANSPORTER_TRANSFER_WARMUP_TICKS = 3 * 20;
public static int TRANSPORTER_TRANSFER_RELEASE_TICKS = 2 * 20;
public static int TRANSPORTER_TRANSFER_COOLDOWN_TICKS = 10 * 20;
public static double TRANSPORTER_ENTITY_MOVEMENT_TOLERANCE_BLOCKS = 1.0D;
public static int TRANSPORTER_ENTITY_GRAB_RADIUS_BLOCKS = 2;
public static int TRANSPORTER_FOCUS_SEARCH_RADIUS_BLOCKS = 2;
public static double TRANSPORTER_LOCKING_STRENGTH_FACTOR_PER_TICK = 0.999D; // natural decay
public static double TRANSPORTER_LOCKING_STRENGTH_IN_WILDERNESS = 0.25D;
public static double TRANSPORTER_LOCKING_STRENGTH_AT_FOCUS = 0.5D;
public static double TRANSPORTER_LOCKING_STRENGTH_AT_TRANSPORTER = 1.0D;
public static double TRANSPORTER_LOCKING_STRENGTH_BONUS_AT_MAX_ENERGY_FACTOR = 0.5D;
public static double TRANSPORTER_LOCKING_STRENGTH_UPGRADE = 0.15D;
public static double TRANSPORTER_LOCKING_SPEED_IN_WILDERNESS = 0.25D;
public static double TRANSPORTER_LOCKING_SPEED_AT_FOCUS = 0.75D;
public static double TRANSPORTER_LOCKING_SPEED_AT_TRANSPORTER = 1.0D;
public static double TRANSPORTER_LOCKING_SPEED_UPGRADE = 0.25D;
public static int TRANSPORTER_LOCKING_SPEED_OPTIMAL_TICKS = 5 * 20;
public static int TRANSPORTER_LOCKING_UPGRADE_MAX_QUANTITY = 2;
// Enantiomorphic power reactor // Enantiomorphic power reactor
public static int ENAN_REACTOR_MAX_ENERGY_STORED = 100000000; public static int ENAN_REACTOR_MAX_ENERGY_STORED = 100000000;
@ -942,11 +971,10 @@ public class WarpDriveConfig {
// Transporter // Transporter
TRANSPORTER_MAX_ENERGY_STORED = Commons.clamp(1, Integer.MAX_VALUE, TRANSPORTER_MAX_ENERGY_STORED = Commons.clamp(1, Integer.MAX_VALUE,
config.get("transporter", "max_energy_stored", TRANSPORTER_MAX_ENERGY_STORED, "Maximum energy stored").getInt()); config.get("transporter", "max_energy_stored", TRANSPORTER_MAX_ENERGY_STORED, "Maximum energy stored").getInt());
TRANSPORTER_USE_RELATIVE_COORDS = config.get("transporter", "use_relative_coords", TRANSPORTER_USE_RELATIVE_COORDS, "Should transporter use relative coordinates?").getBoolean(true); // TRANSPORTER_ENERGY_PER_BLOCK = Commons.clamp(1.0D, TRANSPORTER_MAX_ENERGY_STORED / 10.0D,
TRANSPORTER_ENERGY_PER_BLOCK = Commons.clamp(1.0D, TRANSPORTER_MAX_ENERGY_STORED / 10.0D, // config.get("transporter", "energy_per_block", TRANSPORTER_ENERGY_PER_BLOCK, "Energy cost per block distance").getDouble(100.0D));
config.get("transporter", "energy_per_block", TRANSPORTER_ENERGY_PER_BLOCK, "Energy cost per block distance").getDouble(100.0D)); // TRANSPORTER_MAX_BOOST_MUL = Commons.clamp(1.0D, 1000.0D,
TRANSPORTER_MAX_BOOST_MUL = Commons.clamp(1.0D, 1000.0D, // config.get("transporter", "max_boost", TRANSPORTER_MAX_BOOST_MUL, "Maximum energy boost allowed").getDouble(4.0));
config.get("transporter", "max_boost", TRANSPORTER_MAX_BOOST_MUL, "Maximum energy boost allowed").getDouble(4.0));
// Enantiomorphic reactor // Enantiomorphic reactor
ENAN_REACTOR_MAX_ENERGY_STORED = Commons.clamp(1, Integer.MAX_VALUE, ENAN_REACTOR_MAX_ENERGY_STORED = Commons.clamp(1, Integer.MAX_VALUE,

View file

@ -0,0 +1,45 @@
package cr0s.warpdrive.data;
import cr0s.warpdrive.api.IStringSerializable;
import javax.annotation.Nonnull;
import java.util.HashMap;
public enum EnumTransporterState implements IStringSerializable {
DISABLED (0, "disabled"), // disabled
IDLE (1, "idle"), // enabling, waiting for lock
ACQUIRING (2, "acquiring"), // acquiring lock
ENERGIZING (3, "energizing"); // transferring entities
private final int metadata;
private final String unlocalizedName;
// cached values
public static final int length;
private static final HashMap<Integer, EnumTransporterState> ID_MAP = new HashMap<>();
static {
length = EnumTransporterState.values().length;
for (final EnumTransporterState transporterState : values()) {
ID_MAP.put(transporterState.ordinal(), transporterState);
}
}
EnumTransporterState(final int metadata, final String unlocalizedName) {
this.metadata = metadata;
this.unlocalizedName = unlocalizedName;
}
public int getMetadata() {
return metadata;
}
public static EnumTransporterState get(final int id) {
return ID_MAP.get(id);
}
@Nonnull
@Override
public String getName() { return unlocalizedName; }
}

View file

@ -8,13 +8,11 @@ import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChunkCoordinates; import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.world.WorldServer; import net.minecraft.world.WorldServer;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.gen.ChunkProviderServer;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.common.util.ForgeDirection;
@ -209,6 +207,13 @@ public class VectorI implements Cloneable {
return this; return this;
} }
public VectorI translate(final EnumFacing side) {
x += side.getFrontOffsetX();
y += side.getFrontOffsetY();
z += side.getFrontOffsetZ();
return this;
}
// return a new vector adding both parts // return a new vector adding both parts
public static VectorI add(final VectorI vector1, final VectorI vector2) { public static VectorI add(final VectorI vector1, final VectorI vector2) {
return new VectorI(vector1.x + vector2.x, vector1.y + vector2.y, vector1.z + vector2.z); return new VectorI(vector1.x + vector2.x, vector1.y + vector2.y, vector1.z + vector2.z);
@ -279,13 +284,13 @@ public class VectorI implements Cloneable {
return vector; return vector;
} }
public void readFromNBT(NBTTagCompound nbtTagCompound) { public void readFromNBT(final NBTTagCompound nbtTagCompound) {
x = nbtTagCompound.getInteger("x"); x = nbtTagCompound.getInteger("x");
y = nbtTagCompound.getInteger("y"); y = nbtTagCompound.getInteger("y");
z = nbtTagCompound.getInteger("z"); z = nbtTagCompound.getInteger("z");
} }
public NBTTagCompound writeToNBT(NBTTagCompound nbtTagCompound) { public NBTTagCompound writeToNBT(final NBTTagCompound nbtTagCompound) {
nbtTagCompound.setInteger("x", x); nbtTagCompound.setInteger("x", x);
nbtTagCompound.setInteger("y", y); nbtTagCompound.setInteger("y", y);
nbtTagCompound.setInteger("z", z); nbtTagCompound.setInteger("z", z);
@ -308,11 +313,11 @@ public class VectorI implements Cloneable {
return (newX * newX + newY * newY + newZ * newZ); return (newX * newX + newY * newY + newZ * newZ);
} }
public int distance2To(final Entity entity) { public double distance2To(final Entity entity) {
int newX = (int) (Math.round(entity.posX)) - x; final double newX = entity.posX - x;
int newY = (int) (Math.round(entity.posY)) - y; final double newY = entity.posY - y;
int newZ = (int) (Math.round(entity.posZ)) - z; final double newZ = entity.posZ - z;
return (newX * newX + newY * newY + newZ * newZ); return newX * newX + newY * newY + newZ * newZ;
} }
public int distance2To(final TileEntity tileEntity) { public int distance2To(final TileEntity tileEntity) {