Merging MC1.7 into MC1.10
This commit is contained in:
commit
07c2a001d7
301 changed files with 6874 additions and 3175 deletions
build.gradle
eclipse/mods
libs
src/main/java/cr0s/warpdrive
CommonProxy.javaCommons.javaGravityManager.javaLocalProfiler.javaWarpDrive.javaWarpDrivePeripheralHandler.java
api
IAirCanister.javaIBeamFrequency.javaIBlockBase.javaIBlockUpdateDetector.javaIBreathingHelmet.javaIControlChannel.javaIDamageReceiver.javaIForceFieldShape.javaIParticleContainerItem.javaIStarMapRegistryTileEntity.javaIVideoChannel.javaIWarpTool.javaParticle.javaParticleRegistry.javaParticleStack.java
block
BlockAbstractContainer.javaBlockLaser.javaBlockLaserMedium.javaItemBlockAbstractBase.javaTileEntityAbstractBase.javaTileEntityAbstractChunkLoading.javaTileEntityAbstractEnergy.javaTileEntityAbstractInterfaced.javaTileEntityAbstractLaser.javaTileEntityChunkLoader.javaTileEntityLaser.javaTileEntityLaserMedium.java
atomic
BlockAbstractAccelerator.javaBlockAcceleratorControlPoint.javaBlockChiller.javaBlockParticlesInjector.javaTileEntityAcceleratorControlPoint.java
breathing
building
collection
BlockLaserTreeFarm.javaBlockMiningLaser.javaTileEntityAbstractMiner.javaTileEntityLaserTreeFarm.javaTileEntityMiningLaser.java
decoration
detection
BlockCamera.javaBlockCloakingCoil.javaBlockCloakingCore.javaBlockMonitor.javaBlockRadar.javaBlockSiren.javaBlockWarpIsolation.javaTileEntityCamera.javaTileEntityCloakingCore.javaTileEntityMonitor.javaTileEntityRadar.javaTileEntitySiren.java
energy
BlockEnanReactorCore.javaBlockEnanReactorLaser.javaBlockEnergyBank.javaBlockIC2reactorLaserMonitor.javaTileEntityEnanReactorCore.javaTileEntityEnanReactorLaser.javaTileEntityEnergyBank.javaTileEntityIC2reactorLaserMonitor.java
forcefield
BlockAbstractForceField.javaBlockForceField.javaBlockForceFieldProjector.javaBlockForceFieldRelay.javaItemBlockForceFieldProjector.javaItemBlockForceFieldRelay.javaTileEntityAbstractForceField.javaTileEntityForceField.javaTileEntityForceFieldProjector.javaTileEntityForceFieldRelay.java
hull
movement
BlockLift.javaBlockShipController.javaBlockShipCore.javaBlockTransporter.javaTileEntityLift.javaTileEntityShipController.javaTileEntityShipCore.javaTileEntityTransporter.java
passive
weapon
16
build.gradle
16
build.gradle
|
@ -90,7 +90,11 @@ dependencies {
|
|||
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
|
||||
// http://www.gradle.org/docs/current/userguide/dependency_management.html
|
||||
|
||||
<<<<<<< HEAD
|
||||
compileOnly "blusunrize:ImmersiveEngineering:0.10-+:deobf"
|
||||
=======
|
||||
compileOnly "blusunrize:ImmersiveEngineering:0.10-+:deobf"
|
||||
>>>>>>> MC1.7-2017-03-12
|
||||
// compileOnly "mezz.jei:jei_1.10.2:3.13.+"
|
||||
// compileOnly "mcp.mobius.waila:Waila:1.7.0-B3_1.9.4"
|
||||
// compileOnly "slimeknights.mantle:Mantle:1.10.2-1.+"
|
||||
|
@ -105,11 +109,15 @@ processResources {
|
|||
// this will ensure that this task is redone when the versions change.
|
||||
inputs.property "version", project.version
|
||||
inputs.property "mcversion", project.minecraft.version
|
||||
|
||||
// skip source assets
|
||||
|
||||
// skip source assets
|
||||
exclude '**/*.pdn'
|
||||
exclude '**/*.psd'
|
||||
<<<<<<< HEAD
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> MC1.7-2017-03-12
|
||||
// replace stuff in mcmod.info, nothing else
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include 'mcmod.info'
|
||||
|
@ -126,7 +134,11 @@ processResources {
|
|||
|
||||
jar {
|
||||
manifest {
|
||||
<<<<<<< HEAD
|
||||
attributes FMLAT: "warpdrive_at.cfg"
|
||||
=======
|
||||
attributes FMLAT: "warpdrive_at.cfg"
|
||||
>>>>>>> MC1.7-2017-03-12
|
||||
attributes FMLCorePlugin: "cr0s.warpdrive.core.FMLLoadingPlugin"
|
||||
attributes FMLCorePluginContainsFMLMod: "true"
|
||||
}
|
||||
|
|
Binary file not shown.
BIN
libs/industrialcraft-2-2.6.173-ex110-api.jar
Normal file
BIN
libs/industrialcraft-2-2.6.173-ex110-api.jar
Normal file
Binary file not shown.
|
@ -1,40 +1,62 @@
|
|||
package cr0s.warpdrive;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.GameType;
|
||||
import net.minecraftforge.client.model.obj.OBJLoader;
|
||||
import net.minecraftforge.fml.common.registry.EntityRegistry;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.entity.EntityParticleBunch;
|
||||
import cr0s.warpdrive.render.EntityCamera;
|
||||
import cr0s.warpdrive.world.EntitySphereGen;
|
||||
import cr0s.warpdrive.world.EntityStarCore;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.UUID;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.GameType;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.client.model.obj.OBJLoader;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.BlockSnapshot;
|
||||
import net.minecraftforge.common.util.FakePlayerFactory;
|
||||
import net.minecraftforge.event.world.BlockEvent;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.WeakHashMap;
|
||||
import net.minecraftforge.fml.common.registry.EntityRegistry;
|
||||
|
||||
import static cr0s.warpdrive.WarpDrive.MODID;
|
||||
|
||||
public class CommonProxy {
|
||||
|
||||
private static final WeakHashMap<GameProfile, WeakReference<EntityPlayer>> fakePlayers = new WeakHashMap<>(100);
|
||||
|
||||
void registerEntities() {
|
||||
EntityRegistry.registerModEntity(EntitySphereGen.class, "EntitySphereGenerator", WarpDriveConfig.G_ENTITY_SPHERE_GENERATOR_ID, WarpDrive.instance, 200, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityStarCore.class , "EntityStarCore" , WarpDriveConfig.G_ENTITY_STAR_CORE_ID , WarpDrive.instance, 300, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityCamera.class , "EntityCamera" , WarpDriveConfig.G_ENTITY_CAMERA_ID , WarpDrive.instance, 300, 1, false);
|
||||
EntityRegistry.registerModEntity(EntitySphereGen.class , "EntitySphereGenerator", WarpDriveConfig.G_ENTITY_SPHERE_GENERATOR_ID, WarpDrive.instance, 200, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityStarCore.class , "EntityStarCore" , WarpDriveConfig.G_ENTITY_STAR_CORE_ID , WarpDrive.instance, 300, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityCamera.class , "EntityCamera" , WarpDriveConfig.G_ENTITY_CAMERA_ID , WarpDrive.instance, 300, 1, false);
|
||||
EntityRegistry.registerModEntity(EntityParticleBunch.class, "EntityParticleBunch" , WarpDriveConfig.G_ENTITY_PARTICLE_BUNCH_ID , WarpDrive.instance, 300, 1, false);
|
||||
}
|
||||
|
||||
private EntityPlayer getFakePlayer(EntityPlayer entityPlayer, WorldServer world, BlockPos blockPos) {
|
||||
public void registerRendering() {
|
||||
// client side only
|
||||
}
|
||||
|
||||
private static EntityPlayerMP getPlayer(WorldServer world, final UUID uuidPlayer) {
|
||||
for (Object object : world.getMinecraftServer().getPlayerList().getPlayerList()) {
|
||||
if (object instanceof EntityPlayerMP) {
|
||||
EntityPlayerMP entityPlayerMP = (EntityPlayerMP) object;
|
||||
if (entityPlayerMP.getUniqueID() == uuidPlayer) {
|
||||
return entityPlayerMP;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static EntityPlayer getFakePlayer(final UUID uuidPlayer, WorldServer world, BlockPos blockPos) {
|
||||
EntityPlayer entityPlayer = uuidPlayer == null ? null : getPlayer(world, uuidPlayer);
|
||||
GameProfile gameProfile = entityPlayer == null ? WarpDrive.gameProfile : entityPlayer.getGameProfile();
|
||||
WeakReference<EntityPlayer> weakFakePlayer = fakePlayers.get(gameProfile);
|
||||
EntityPlayer entityFakePlayer = (weakFakePlayer == null) ? null : weakFakePlayer.get();
|
||||
|
@ -53,22 +75,28 @@ public class CommonProxy {
|
|||
return entityFakePlayer;
|
||||
}
|
||||
|
||||
public boolean isBlockBreakCanceled(EntityPlayer entityPlayer, BlockPos blockPosSource,
|
||||
World world, BlockPos blockPosEvent) {
|
||||
if (world.isRemote) {
|
||||
public static EntityPlayer getFakePlayer(final UUID uuidPlayer, World world, final double x, final double y, final double z) {
|
||||
if (world.isRemote || !(world instanceof WorldServer)) {
|
||||
return null;
|
||||
}
|
||||
return getFakePlayer(uuidPlayer, world, x, y, z);
|
||||
}
|
||||
|
||||
public static boolean isBlockBreakCanceled(final UUID uuidPlayer, BlockPos blockPosSource, World world, BlockPos blockPosEvent) {
|
||||
if (world.isRemote || !(world instanceof WorldServer)) {
|
||||
return false;
|
||||
}
|
||||
if (WarpDriveConfig.LOGGING_BREAK_PLACE) {
|
||||
WarpDrive.logger.info("isBlockBreakCanceled by " + entityPlayer
|
||||
+ " at " + blockPosSource.getX() + " " + blockPosSource.getY() + " " + blockPosSource.getZ()
|
||||
+ " to " + world.provider.getDimensionType().getName() + " " + blockPosEvent.getX() + " " + blockPosEvent.getY() + " " + blockPosEvent.getZ());
|
||||
WarpDrive.logger.info("isBlockBreakCanceled by " + uuidPlayer
|
||||
+ " at " + blockPosSource.getX() + " " + blockPosSource.getY() + " " + blockPosSource.getZ()
|
||||
+ " to " + world.provider.getDimensionType().getName() + " " + blockPosEvent.getX() + " " + blockPosEvent.getY() + " " + blockPosEvent.getZ());
|
||||
}
|
||||
|
||||
IBlockState blockState = world.getBlockState(blockPosEvent);
|
||||
if (!blockState.getBlock().isAir(blockState, world, blockPosEvent)) {
|
||||
BlockEvent.BreakEvent breakEvent = new BlockEvent.BreakEvent(
|
||||
world, blockPosEvent, world.getBlockState(blockPosEvent),
|
||||
WarpDrive.proxy.getFakePlayer(entityPlayer, (WorldServer) world, blockPosSource));
|
||||
WarpDrive.proxy.getFakePlayer(uuidPlayer, (WorldServer) world, blockPosSource));
|
||||
MinecraftForge.EVENT_BUS.post(breakEvent);
|
||||
if (WarpDriveConfig.LOGGING_BREAK_PLACE) {
|
||||
WarpDrive.logger.info("isBlockBreakCanceled player " + breakEvent.getPlayer()
|
||||
|
@ -79,20 +107,19 @@ public class CommonProxy {
|
|||
return false;
|
||||
}
|
||||
|
||||
public boolean isBlockPlaceCanceled(EntityPlayer entityPlayer, BlockPos blockPosSource,
|
||||
World world, BlockPos blockPosEvent, IBlockState blockState) {
|
||||
if (world.isRemote) {
|
||||
public static boolean isBlockPlaceCanceled(final UUID uuidPlayer, BlockPos blockPosSource, World world, BlockPos blockPosEvent, IBlockState blockState) {
|
||||
if (world.isRemote || !(world instanceof WorldServer)) {
|
||||
return false;
|
||||
}
|
||||
if (WarpDriveConfig.LOGGING_BREAK_PLACE) {
|
||||
WarpDrive.logger.info("isBlockPlaceCanceled by " + entityPlayer
|
||||
+ " at " + blockPosSource.getX() + " " + blockPosSource.getY() + " " + blockPosSource.getZ()
|
||||
+ " to " + world.provider.getDimensionType().getName() + " " + blockPosEvent.getX() + " " + blockPosEvent.getY() + " " + blockPosEvent.getZ()
|
||||
+ " of " + blockState);
|
||||
WarpDrive.logger.info("isBlockPlaceCanceled by " + uuidPlayer
|
||||
+ " at " + blockPosSource.getX() + " " + blockPosSource.getY() + " " + blockPosSource.getZ()
|
||||
+ " to " + world.provider.getDimensionType().getName() + " " + blockPosEvent.getX() + " " + blockPosEvent.getY() + " " + blockPosEvent.getZ()
|
||||
+ " of " + blockState);
|
||||
}
|
||||
BlockEvent.PlaceEvent placeEvent = new BlockEvent.PlaceEvent(
|
||||
new BlockSnapshot(world, blockPosEvent, blockState), Blocks.AIR.getDefaultState(),
|
||||
WarpDrive.proxy.getFakePlayer(entityPlayer, (WorldServer) world, blockPosSource) );
|
||||
WarpDrive.proxy.getFakePlayer(uuidPlayer, (WorldServer) world, blockPosSource) );
|
||||
|
||||
MinecraftForge.EVENT_BUS.post(placeEvent);
|
||||
if (WarpDriveConfig.LOGGING_BREAK_PLACE) {
|
||||
|
@ -100,7 +127,7 @@ public class CommonProxy {
|
|||
}
|
||||
return placeEvent.isCanceled();
|
||||
}
|
||||
|
||||
|
||||
public void onForgePreInitialisation() {
|
||||
OBJLoader.INSTANCE.addDomain(MODID);
|
||||
}
|
||||
|
|
279
src/main/java/cr0s/warpdrive/Commons.java
Normal file
279
src/main/java/cr0s/warpdrive/Commons.java
Normal file
|
@ -0,0 +1,279 @@
|
|||
package cr0s.warpdrive;
|
||||
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.command.ICommandSender;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityChest;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Common static methods
|
||||
*/
|
||||
public class Commons {
|
||||
|
||||
public static void addChatMessage(final ICommandSender sender, final ITextComponent textComponent) {
|
||||
if (sender == null) {
|
||||
WarpDrive.logger.error("Unable to send message to NULL sender: " + textComponent.getFormattedText());
|
||||
return;
|
||||
}
|
||||
String[] lines = textComponent.getFormattedText().replace("§", "" + (char)167).replace("\\n", "\n").replaceAll("\u00A0", " ").split("\n");
|
||||
for (String line : lines) {
|
||||
sender.addChatMessage(new TextComponentString(line));
|
||||
}
|
||||
|
||||
// logger.info(message);
|
||||
}
|
||||
|
||||
// add tooltip information with text formatting and line splitting
|
||||
// will ensure it fits on minimum screen width
|
||||
public static void addTooltip(List<String> list, String tooltip) {
|
||||
final String charFormatting = "" + (char)167;
|
||||
tooltip = tooltip.replace("§", charFormatting).replace("\\n", "\n").replace("|", "\n");
|
||||
tooltip = tooltip.replace(charFormatting + "r", charFormatting + "7");
|
||||
|
||||
String[] split = tooltip.split("\n");
|
||||
for (String line : split) {
|
||||
String lineRemaining = line;
|
||||
String formatNextLine = "";
|
||||
while (!lineRemaining.isEmpty()) {
|
||||
int indexToCut = formatNextLine.length();
|
||||
int displayLength = 0;
|
||||
int length = lineRemaining.length();
|
||||
while (indexToCut < length && displayLength <= 38) {
|
||||
if (lineRemaining.charAt(indexToCut) == (char)167 && indexToCut + 1 < length) {
|
||||
indexToCut++;
|
||||
} else {
|
||||
displayLength++;
|
||||
}
|
||||
indexToCut++;
|
||||
}
|
||||
if (indexToCut < length) {
|
||||
indexToCut = lineRemaining.substring(0, indexToCut).lastIndexOf(' ');
|
||||
if (indexToCut == -1 || indexToCut == 0) {// no space available, show the whole line 'as is'
|
||||
list.add(lineRemaining);
|
||||
lineRemaining = "";
|
||||
} else {// cut at last space
|
||||
list.add(lineRemaining.substring(0, indexToCut).replaceAll("\u00A0", " "));
|
||||
|
||||
// compute remaining format
|
||||
int index = formatNextLine.length();
|
||||
while (index <= indexToCut) {
|
||||
if (lineRemaining.charAt(index) == (char)167 && index + 1 < indexToCut) {
|
||||
index++;
|
||||
formatNextLine += ("" + (char)167) + lineRemaining.charAt(index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
// cut for next line, recovering current format
|
||||
lineRemaining = formatNextLine + " " + lineRemaining.substring(indexToCut + 1);
|
||||
}
|
||||
} else {
|
||||
list.add(lineRemaining.replaceAll("\u00A0", " "));
|
||||
lineRemaining = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static Field getField(Class<?> clazz, String deobfuscatedName, String obfuscatedName) {
|
||||
Field fieldToReturn = null;
|
||||
|
||||
try {
|
||||
fieldToReturn = clazz.getDeclaredField(deobfuscatedName);
|
||||
} catch (Exception exception1) {
|
||||
try {
|
||||
fieldToReturn = clazz.getDeclaredField(obfuscatedName);
|
||||
} catch (Exception exception2) {
|
||||
exception2.printStackTrace();
|
||||
String map = "";
|
||||
for(Field fieldDeclared : clazz.getDeclaredFields()) {
|
||||
if (!map.isEmpty()) {
|
||||
map += ", ";
|
||||
}
|
||||
map += fieldDeclared.getName();
|
||||
}
|
||||
WarpDrive.logger.error(String.format("Unable to find %1$s field in %2$s class. Available fields are: %3$s",
|
||||
deobfuscatedName, clazz.toString(), map));
|
||||
}
|
||||
}
|
||||
if (fieldToReturn != null) {
|
||||
fieldToReturn.setAccessible(true);
|
||||
}
|
||||
return fieldToReturn;
|
||||
}
|
||||
|
||||
public static String format(final long value) {
|
||||
// alternate: BigDecimal.valueOf(value).setScale(0, RoundingMode.HALF_EVEN).toPlainString(),
|
||||
return String.format("%,d", Math.round(value));
|
||||
}
|
||||
|
||||
public static ItemStack copyWithSize(ItemStack itemStack, int newSize) {
|
||||
ItemStack ret = itemStack.copy();
|
||||
ret.stackSize = newSize;
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static Collection<IInventory> getConnectedInventories(TileEntity tileEntityConnection) {
|
||||
Collection<IInventory> result = new ArrayList<>(6);
|
||||
|
||||
for(EnumFacing side : EnumFacing.VALUES) {
|
||||
TileEntity tileEntity = tileEntityConnection.getWorld().getTileEntity(
|
||||
tileEntityConnection.getPos().offset(side));
|
||||
if (tileEntity != null && (tileEntity instanceof IInventory)) {
|
||||
result.add((IInventory) tileEntity);
|
||||
|
||||
if (tileEntity instanceof TileEntityChest) {
|
||||
TileEntityChest tileEntityChest = (TileEntityChest) tileEntity;
|
||||
tileEntityChest.checkForAdjacentChests();
|
||||
if (tileEntityChest.adjacentChestXNeg != null) {
|
||||
result.add(tileEntityChest.adjacentChestXNeg);
|
||||
} else if (tileEntityChest.adjacentChestXPos != null) {
|
||||
result.add(tileEntityChest.adjacentChestXPos);
|
||||
} else if (tileEntityChest.adjacentChestZNeg != null) {
|
||||
result.add(tileEntityChest.adjacentChestZNeg);
|
||||
} else if (tileEntityChest.adjacentChestZPos != null) {
|
||||
result.add(tileEntityChest.adjacentChestZPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
// searching methods
|
||||
|
||||
public static final EnumFacing[] UP_DIRECTIONS = { EnumFacing.UP, EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.WEST, EnumFacing.EAST };
|
||||
public static final EnumFacing[] HORIZONTAL_DIRECTIONS = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.WEST, EnumFacing.EAST };
|
||||
public static Set<BlockPos> getConnectedBlocks(World world, final BlockPos start, final EnumFacing[] directions, final Set<Block> whitelist, final int maxRange, final BlockPos... ignore) {
|
||||
return getConnectedBlocks(world, Collections.singletonList(start), directions, whitelist, maxRange, ignore);
|
||||
}
|
||||
|
||||
public static Set<BlockPos> getConnectedBlocks(World world, final Collection<BlockPos> start, final EnumFacing[] directions, final Set<Block> whitelist, final int maxRange, final BlockPos... ignore) {
|
||||
Set<BlockPos> toIgnore = new HashSet<>();
|
||||
if (ignore != null) {
|
||||
toIgnore.addAll(Arrays.asList(ignore));
|
||||
}
|
||||
|
||||
Set<BlockPos> toIterate = new HashSet<>();
|
||||
toIterate.addAll(start);
|
||||
|
||||
Set<BlockPos> toIterateNext;
|
||||
|
||||
Set<BlockPos> iterated = new HashSet<>();
|
||||
|
||||
int range = 0;
|
||||
while(!toIterate.isEmpty() && range < maxRange) {
|
||||
toIterateNext = new HashSet<>();
|
||||
for (BlockPos current : toIterate) {
|
||||
if (whitelist.contains(new VectorI(current).getBlockState_noChunkLoading(world).getBlock())) {
|
||||
iterated.add(current);
|
||||
}
|
||||
|
||||
for(EnumFacing direction : directions) {
|
||||
BlockPos next = current.offset(direction);
|
||||
if (!iterated.contains(next) && !toIgnore.contains(next) && !toIterate.contains(next) && !toIterateNext.contains(next)) {
|
||||
if (whitelist.contains(new VectorI(next).getBlockState_noChunkLoading(world).getBlock())) {
|
||||
toIterateNext.add(next);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
toIterate = toIterateNext;
|
||||
range++;
|
||||
}
|
||||
|
||||
return iterated;
|
||||
}
|
||||
|
||||
// data manipulation methods
|
||||
|
||||
public static int toInt(double d) {
|
||||
return (int) Math.round(d);
|
||||
}
|
||||
|
||||
public static int toInt(Object object) {
|
||||
return Commons.toInt(toDouble(object));
|
||||
}
|
||||
|
||||
public static double toDouble(Object object) {
|
||||
assert(!(object instanceof Object[]));
|
||||
return Double.parseDouble(object.toString());
|
||||
}
|
||||
|
||||
public static float toFloat(Object object) {
|
||||
assert(!(object instanceof Object[]));
|
||||
return Float.parseFloat(object.toString());
|
||||
}
|
||||
|
||||
public static boolean toBool(Object object) {
|
||||
if (object == null) {
|
||||
return false;
|
||||
}
|
||||
assert(!(object instanceof Object[]));
|
||||
if (object instanceof Boolean) {
|
||||
return ((Boolean) object);
|
||||
}
|
||||
String string = object.toString();
|
||||
return string.equals("true") || string.equals("1.0") || string.equals("1") || string.equals("y") || string.equals("yes");
|
||||
}
|
||||
|
||||
public static int clamp(final int min, final int max, final int value) {
|
||||
return Math.min(max, Math.max(value, min));
|
||||
}
|
||||
|
||||
public static float clamp(final float min, final float max, final float value) {
|
||||
return Math.min(max, Math.max(value, min));
|
||||
}
|
||||
|
||||
public static double clamp(final double min, final double max, final double value) {
|
||||
return Math.min(max, Math.max(value, min));
|
||||
}
|
||||
|
||||
|
||||
// configurable interpolation
|
||||
|
||||
public static double interpolate(final double[] xValues, final double[] yValues, final double xInput) {
|
||||
if (WarpDrive.isDev) {
|
||||
assert(xValues.length == yValues.length);
|
||||
assert(xValues.length > 1);
|
||||
}
|
||||
|
||||
// clamp to minimum
|
||||
if (xInput < xValues[0]) {
|
||||
return yValues[0];
|
||||
}
|
||||
|
||||
for(int index = 0; index < xValues.length - 1; index++) {
|
||||
if (xInput < xValues[index + 1]) {
|
||||
return interpolate(xValues[index], yValues[index], xValues[index + 1], yValues[index + 1], xInput);
|
||||
}
|
||||
}
|
||||
|
||||
// clamp to maximum
|
||||
return yValues[yValues.length - 1];
|
||||
}
|
||||
|
||||
private static double interpolate(final double xMin, final double yMin, final double xMax, final double yMax, final double x) {
|
||||
return yMin + (x - xMin) * (yMax - yMin) / (xMax - xMin);
|
||||
}
|
||||
}
|
|
@ -2,6 +2,8 @@ package cr0s.warpdrive;
|
|||
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.StarMapRegistry;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
@ -23,23 +25,20 @@ public class GravityManager {
|
|||
private static final double SPACE_VOID_GRAVITY_RAW_SNEAK = 0.005D; // 0.001 = no mvt
|
||||
|
||||
public static double getGravityForEntity(Entity entity) {
|
||||
// Is entity in space or hyper-space?
|
||||
boolean inSpace = entity.worldObj.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID;
|
||||
boolean inHyperspace = entity.worldObj.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID;
|
||||
|
||||
if (inSpace || inHyperspace) {
|
||||
boolean insideGravField = isEntityInGraviField(entity);
|
||||
final double gravity = StarMapRegistry.getGravity(entity);
|
||||
if (gravity < 1.0D) {
|
||||
// Is entity in hyper-space?
|
||||
boolean inHyperspace = gravity > 0.4D;
|
||||
|
||||
if (insideGravField) {
|
||||
if (inSpace) {
|
||||
return SPACE_FIELD_ENTITY_GRAVITY;
|
||||
} else {
|
||||
if (isEntityInGraviField(entity)) {
|
||||
if (inHyperspace) {
|
||||
return HYPERSPACE_FIELD_ENTITY_GRAVITY;
|
||||
} else {
|
||||
return SPACE_FIELD_ENTITY_GRAVITY;
|
||||
}
|
||||
} else {
|
||||
double jitter = (entity.worldObj.rand.nextDouble() - 0.5D) * 2.0D * HYPERSPACE_VOID_ENTITY_JITTER;
|
||||
if (inSpace)
|
||||
jitter = 0.0D;
|
||||
double jitter = inHyperspace ? (entity.worldObj.rand.nextDouble() - 0.5D) * 2.0D * HYPERSPACE_VOID_ENTITY_JITTER : 0.0D;
|
||||
if (entity instanceof EntityPlayer) {
|
||||
EntityPlayer player = (EntityPlayer) entity;
|
||||
|
||||
|
@ -65,8 +64,8 @@ public class GravityManager {
|
|||
}
|
||||
|
||||
public static double getItemGravity(EntityItem entity) {
|
||||
if ( entity.worldObj.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID
|
||||
|| entity.worldObj.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID) {
|
||||
final double gravity = StarMapRegistry.getGravity(entity);
|
||||
if (gravity < 1.0D) {
|
||||
if (isEntityInGraviField(entity)) {
|
||||
return SPACE_FIELD_ITEM_GRAVITY;
|
||||
} else {
|
||||
|
@ -78,8 +77,8 @@ public class GravityManager {
|
|||
}
|
||||
|
||||
public static double getItemGravity2(EntityItem entity) {
|
||||
if ( entity.worldObj.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID
|
||||
|| entity.worldObj.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID) {
|
||||
final double gravity = StarMapRegistry.getGravity(entity);
|
||||
if (gravity < 1.0D) {
|
||||
if (isEntityInGraviField(entity)) {
|
||||
return SPACE_FIELD_ITEM_GRAVITY2;
|
||||
} else {
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
package cr0s.warpdrive;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
public class LocalProfiler {
|
||||
private static class StackElement {
|
||||
public long start;
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
package cr0s.warpdrive;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import cr0s.warpdrive.api.IBlockBase;
|
||||
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import cr0s.warpdrive.block.BlockChunkLoader;
|
||||
import cr0s.warpdrive.block.BlockLaser;
|
||||
import cr0s.warpdrive.block.BlockLaserMedium;
|
||||
import cr0s.warpdrive.block.ItemBlockAbstractBase;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractChunkLoading;
|
||||
import cr0s.warpdrive.block.TileEntityChunkLoader;
|
||||
import cr0s.warpdrive.block.TileEntityLaser;
|
||||
import cr0s.warpdrive.block.TileEntityLaserMedium;
|
||||
import cr0s.warpdrive.block.atomic.BlockAcceleratorControlPoint;
|
||||
// import cr0s.warpdrive.block.atomic.BlockAcceleratorController;
|
||||
import cr0s.warpdrive.block.atomic.BlockChiller;
|
||||
import cr0s.warpdrive.block.atomic.BlockElectromagnetGlass;
|
||||
import cr0s.warpdrive.block.atomic.BlockElectromagnetPlain;
|
||||
|
@ -18,6 +20,9 @@ import cr0s.warpdrive.block.atomic.BlockParticlesCollider;
|
|||
import cr0s.warpdrive.block.atomic.BlockParticlesInjector;
|
||||
import cr0s.warpdrive.block.atomic.BlockVoidShellGlass;
|
||||
import cr0s.warpdrive.block.atomic.BlockVoidShellPlain;
|
||||
import cr0s.warpdrive.block.atomic.TileEntityAcceleratorControlPoint;
|
||||
// import cr0s.warpdrive.block.atomic.TileEntityAcceleratorController;
|
||||
import cr0s.warpdrive.block.atomic.TileEntityParticlesInjector;
|
||||
import cr0s.warpdrive.block.breathing.BlockAir;
|
||||
import cr0s.warpdrive.block.breathing.BlockAirGenerator;
|
||||
import cr0s.warpdrive.block.decoration.BlockDecorative;
|
||||
|
@ -98,12 +103,49 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
|||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import cr0s.warpdrive.api.IBlockBase;
|
||||
|
||||
import cr0s.warpdrive.block.building.BlockShipScanner;
|
||||
import cr0s.warpdrive.block.collection.BlockLaserTreeFarm;
|
||||
import cr0s.warpdrive.block.collection.BlockMiningLaser;
|
||||
import cr0s.warpdrive.block.collection.TileEntityLaserTreeFarm;
|
||||
import cr0s.warpdrive.block.collection.TileEntityMiningLaser;
|
||||
import cr0s.warpdrive.block.detection.BlockCamera;
|
||||
import cr0s.warpdrive.block.detection.BlockCloakingCoil;
|
||||
import cr0s.warpdrive.block.detection.BlockCloakingCore;
|
||||
import cr0s.warpdrive.block.detection.BlockMonitor;
|
||||
import cr0s.warpdrive.block.detection.BlockRadar;
|
||||
import cr0s.warpdrive.block.detection.BlockSiren;
|
||||
import cr0s.warpdrive.block.detection.BlockWarpIsolation;
|
||||
import cr0s.warpdrive.block.detection.TileEntityCamera;
|
||||
import cr0s.warpdrive.block.detection.TileEntityCloakingCore;
|
||||
import cr0s.warpdrive.block.detection.TileEntityMonitor;
|
||||
import cr0s.warpdrive.block.detection.TileEntityRadar;
|
||||
import cr0s.warpdrive.block.detection.TileEntitySiren;
|
||||
import cr0s.warpdrive.block.energy.BlockEnanReactorCore;
|
||||
import cr0s.warpdrive.block.energy.BlockEnanReactorLaser;
|
||||
import cr0s.warpdrive.block.energy.BlockEnergyBank;
|
||||
import cr0s.warpdrive.block.energy.BlockIC2reactorLaserMonitor;
|
||||
import cr0s.warpdrive.block.energy.TileEntityEnanReactorCore;
|
||||
import cr0s.warpdrive.block.energy.TileEntityEnanReactorLaser;
|
||||
import cr0s.warpdrive.block.energy.TileEntityEnergyBank;
|
||||
import cr0s.warpdrive.block.energy.TileEntityIC2reactorLaserMonitor;
|
||||
import cr0s.warpdrive.block.forcefield.BlockForceField;
|
||||
import cr0s.warpdrive.block.forcefield.BlockForceFieldProjector;
|
||||
import cr0s.warpdrive.block.forcefield.BlockForceFieldRelay;
|
||||
import cr0s.warpdrive.block.forcefield.ItemBlockForceFieldProjector;
|
||||
import cr0s.warpdrive.block.forcefield.ItemBlockForceFieldRelay;
|
||||
import cr0s.warpdrive.block.forcefield.TileEntityForceField;
|
||||
import cr0s.warpdrive.block.forcefield.TileEntityForceFieldProjector;
|
||||
import cr0s.warpdrive.block.forcefield.TileEntityForceFieldRelay;
|
||||
import cr0s.warpdrive.block.hull.BlockHullGlass;
|
||||
import cr0s.warpdrive.block.hull.BlockHullPlain;
|
||||
import cr0s.warpdrive.block.hull.BlockHullStairs;
|
||||
import cr0s.warpdrive.block.hull.ItemBlockHull;
|
||||
import cr0s.warpdrive.block.movement.BlockLift;
|
||||
import cr0s.warpdrive.block.movement.BlockTransporter;
|
||||
import cr0s.warpdrive.block.weapon.BlockLaserCamera;
|
||||
|
@ -114,21 +156,46 @@ import cr0s.warpdrive.command.CommandGenerate;
|
|||
import cr0s.warpdrive.command.CommandInvisible;
|
||||
import cr0s.warpdrive.command.CommandJumpgates;
|
||||
import cr0s.warpdrive.command.CommandSpace;
|
||||
import cr0s.warpdrive.config.RecipeParticleShapedOre;
|
||||
import cr0s.warpdrive.config.RecipeTuningDriver;
|
||||
import cr0s.warpdrive.config.Recipes;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.damage.DamageAsphyxia;
|
||||
import cr0s.warpdrive.damage.DamageCold;
|
||||
import cr0s.warpdrive.damage.DamageIrradiation;
|
||||
import cr0s.warpdrive.damage.DamageLaser;
|
||||
import cr0s.warpdrive.damage.DamageShock;
|
||||
import cr0s.warpdrive.damage.DamageTeleportation;
|
||||
import cr0s.warpdrive.damage.DamageWarm;
|
||||
import cr0s.warpdrive.data.CamerasRegistry;
|
||||
import cr0s.warpdrive.data.CelestialObject;
|
||||
import cr0s.warpdrive.data.CloakManager;
|
||||
import cr0s.warpdrive.data.JumpgatesRegistry;
|
||||
import cr0s.warpdrive.data.StarMapRegistry;
|
||||
import cr0s.warpdrive.event.ClientHandler;
|
||||
import cr0s.warpdrive.event.LivingHandler;
|
||||
import cr0s.warpdrive.event.WorldHandler;
|
||||
import cr0s.warpdrive.item.ItemAirCanisterFull;
|
||||
import cr0s.warpdrive.item.ItemComponent;
|
||||
import cr0s.warpdrive.item.ItemCrystalToken;
|
||||
import cr0s.warpdrive.item.ItemElectromagneticCell;
|
||||
import cr0s.warpdrive.item.ItemForceFieldShape;
|
||||
import cr0s.warpdrive.item.ItemForceFieldUpgrade;
|
||||
import cr0s.warpdrive.item.ItemIC2reactorLaserFocus;
|
||||
import cr0s.warpdrive.item.ItemTuningDriver;
|
||||
import cr0s.warpdrive.item.ItemTuningFork;
|
||||
import cr0s.warpdrive.item.ItemUpgrade;
|
||||
import cr0s.warpdrive.item.ItemWarpArmor;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import cr0s.warpdrive.render.ClientCameraHandler;
|
||||
import cr0s.warpdrive.render.RenderOverlayCamera;
|
||||
import cr0s.warpdrive.world.BiomeSpace;
|
||||
import cr0s.warpdrive.world.HyperSpaceWorldProvider;
|
||||
import cr0s.warpdrive.world.HyperSpaceWorldGenerator;
|
||||
import cr0s.warpdrive.world.HyperSpaceWorldProvider;
|
||||
import cr0s.warpdrive.world.SpaceWorldGenerator;
|
||||
import cr0s.warpdrive.world.SpaceWorldProvider;
|
||||
|
||||
import net.minecraftforge.oredict.RecipeSorter;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -195,7 +262,8 @@ public class WarpDrive implements LoadingCallback {
|
|||
public static ItemComponent itemComponent;
|
||||
public static ItemCrystalToken itemCrystalToken;
|
||||
public static ItemUpgrade itemUpgrade;
|
||||
public static ItemTuningFork itemTuningRod;
|
||||
public static ItemTuningFork itemTuningFork;
|
||||
public static ItemTuningDriver itemTuningDriver;
|
||||
public static ItemForceFieldShape itemForceFieldShape;
|
||||
public static ItemForceFieldUpgrade itemForceFieldUpgrade;
|
||||
public static ItemElectromagneticCell itemElectromagneticCell;
|
||||
|
@ -206,6 +274,7 @@ public class WarpDrive implements LoadingCallback {
|
|||
|
||||
public static DamageAsphyxia damageAsphyxia;
|
||||
public static DamageCold damageCold;
|
||||
public static DamageIrradiation damageIrradiation;
|
||||
public static DamageLaser damageLaser;
|
||||
public static DamageShock damageShock;
|
||||
public static DamageTeleportation damageTeleportation;
|
||||
|
@ -245,8 +314,11 @@ public class WarpDrive implements LoadingCallback {
|
|||
|
||||
WarpDriveConfig.onFMLpreInitialization(event.getModConfigurationDirectory().getAbsolutePath());
|
||||
|
||||
RecipeSorter.register("warpdrive:particleShaped", RecipeParticleShapedOre.class, RecipeSorter.Category.SHAPED, "before:minecraft:shaped");
|
||||
RecipeSorter.register("warpdrive:tuningDriver", RecipeTuningDriver.class, RecipeSorter.Category.SHAPELESS, "before:minecraft:shapeless");
|
||||
|
||||
// open access to Block.blockHardness
|
||||
fieldBlockHardness = WarpDrive.getField(Block.class, "blockHardness", "field_149782_v");
|
||||
fieldBlockHardness = Commons.getField(Block.class, "blockHardness", "field_149782_v");
|
||||
|
||||
// building blocks
|
||||
blockShipScanner = new BlockShipScanner("blockShipScanner");
|
||||
|
@ -281,13 +353,8 @@ public class WarpDrive implements LoadingCallback {
|
|||
|
||||
// passive blocks
|
||||
blockAir = new BlockAir("blockAir");
|
||||
blockDecorative = new BlockDecorative("blockDecorative");
|
||||
blockGas = new BlockGas("blockGas");
|
||||
blockHighlyAdvancedMachine = new BlockHighlyAdvancedMachine("blockHighlyAdvancedMachine");
|
||||
blockIridium = new BlockIridium("blockIridium");
|
||||
blockLamp_bubble = new BlockLamp_bubble("blockLamp_bubble");
|
||||
blockLamp_flat = new BlockLamp_flat("blockLamp_flat");
|
||||
blockLamp_long = new BlockLamp_long("blockLamp_long");
|
||||
blockTransportBeacon = new BlockTransportBeacon("blockTransportBeacon");
|
||||
|
||||
// weapon blocks
|
||||
|
@ -352,6 +419,10 @@ public class WarpDrive implements LoadingCallback {
|
|||
|
||||
// decorative
|
||||
blockDecorative = new BlockDecorative("blockDecorative");
|
||||
blockGas = new BlockGas("blockGas");
|
||||
blockLamp_bubble = new BlockLamp_bubble("blockLamp_bubble");
|
||||
blockLamp_flat = new BlockLamp_flat("blockLamp_flat");
|
||||
blockLamp_long = new BlockLamp_long("blockLamp_long");
|
||||
|
||||
// hull blocks
|
||||
blockHulls_plain = new Block[3];
|
||||
|
@ -371,11 +442,6 @@ public class WarpDrive implements LoadingCallback {
|
|||
// sirens
|
||||
blockSiren = new BlockSiren("blockSiren");
|
||||
|
||||
// reactor laser focus
|
||||
if (WarpDriveConfig.isIndustrialCraft2Loaded) {
|
||||
itemIC2reactorLaserFocus = new ItemIC2reactorLaserFocus("itemIC2reactorLaserFocus");
|
||||
}
|
||||
|
||||
// component items
|
||||
itemComponent = new ItemComponent("itemComponent");
|
||||
itemCrystalToken = new ItemCrystalToken("itemCrystalToken");
|
||||
|
@ -394,11 +460,8 @@ public class WarpDrive implements LoadingCallback {
|
|||
}
|
||||
|
||||
// tool items
|
||||
itemTuningRod = new ItemTuningFork("itemTuningRod");
|
||||
|
||||
// force field upgrades
|
||||
itemForceFieldShape = new ItemForceFieldShape("itemForceFieldShape");
|
||||
itemForceFieldUpgrade = new ItemForceFieldUpgrade("itemForceFieldUpgrade");
|
||||
itemTuningFork = new ItemTuningFork("itemTuningFork");
|
||||
itemTuningDriver = new ItemTuningDriver("itemTuningDriver");
|
||||
|
||||
// electromagnetic cell
|
||||
itemElectromagneticCell = new ItemElectromagneticCell("itemElectromagneticCell");
|
||||
|
@ -406,6 +469,7 @@ public class WarpDrive implements LoadingCallback {
|
|||
// damage sources
|
||||
damageAsphyxia = new DamageAsphyxia();
|
||||
damageCold = new DamageCold();
|
||||
damageIrradiation = new DamageIrradiation();
|
||||
damageLaser = new DamageLaser();
|
||||
damageShock = new DamageShock();
|
||||
damageTeleportation = new DamageTeleportation();
|
||||
|
@ -413,6 +477,7 @@ public class WarpDrive implements LoadingCallback {
|
|||
|
||||
// entities
|
||||
proxy.registerEntities();
|
||||
proxy.registerRendering();
|
||||
|
||||
// chunk loading
|
||||
ForgeChunkManager.setForcedChunkLoadingCallback(instance, instance);
|
||||
|
@ -426,12 +491,22 @@ public class WarpDrive implements LoadingCallback {
|
|||
Biome.BiomeProperties biomeProperties = new Biome.BiomeProperties("Space").setRainDisabled().setWaterColor(0);
|
||||
spaceBiome = (new BiomeSpace(biomeProperties));
|
||||
BiomeDictionary.registerBiomeType(spaceBiome, BiomeDictionary.Type.DEAD, BiomeDictionary.Type.WASTELAND);
|
||||
|
||||
dimensionTypeSpace = DimensionType.register("Space", "_space", WarpDriveConfig.G_SPACE_PROVIDER_ID, HyperSpaceWorldProvider.class, true);
|
||||
DimensionManager.registerDimension(WarpDriveConfig.G_SPACE_DIMENSION_ID, dimensionTypeSpace);
|
||||
|
||||
dimensionTypeHyperSpace = DimensionType.register("Hyperspace", "_hyperspace", WarpDriveConfig.G_HYPERSPACE_PROVIDER_ID, HyperSpaceWorldProvider.class, true);
|
||||
DimensionManager.registerDimension(WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID, dimensionTypeHyperSpace);
|
||||
|
||||
// only create dimensions if we own them
|
||||
for (CelestialObject celestialObject : WarpDriveConfig.celestialObjects) {
|
||||
if (celestialObject.isWarpDrive) {
|
||||
if (celestialObject.isSpace()) {
|
||||
DimensionManager.registerDimension(celestialObject.dimensionId, dimensionTypeSpace);
|
||||
} else if (celestialObject.isHyperspace()) {
|
||||
DimensionManager.registerDimension(celestialObject.dimensionId, dimensionTypeHyperSpace);
|
||||
} else {
|
||||
WarpDrive.logger.error(String.format("Only space and hyperspace dimensions can be provided by WarpDrive. Dimension %d is not what of those.",
|
||||
celestialObject.dimensionId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proxy.onForgePreInitialisation();
|
||||
|
||||
|
@ -439,12 +514,17 @@ public class WarpDrive implements LoadingCallback {
|
|||
creativeTabWarpDrive.setBackgroundImageName("items.png");
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(new RenderOverlayCamera(Minecraft.getMinecraft()));
|
||||
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(new ClientCameraHandler());
|
||||
|
||||
|
||||
// @TODO MC1.10 force field rendering
|
||||
// RenderBlockForceField.renderId = RenderingRegistry.getNextAvailableRenderId();
|
||||
// RenderingRegistry.registerBlockHandler(RenderBlockForceField.instance);
|
||||
/*
|
||||
RenderBlockStandard.renderId = RenderingRegistry.getNextAvailableRenderId();
|
||||
RenderingRegistry.registerBlockHandler(RenderBlockStandard.instance);
|
||||
|
||||
RenderBlockForceField.renderId = RenderingRegistry.getNextAvailableRenderId();
|
||||
RenderingRegistry.registerBlockHandler(RenderBlockForceField.instance);
|
||||
/**/
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -457,8 +537,12 @@ public class WarpDrive implements LoadingCallback {
|
|||
|
||||
@EventHandler
|
||||
public void onFMLPostInitialization(FMLPostInitializationEvent event) {
|
||||
DimensionManager.getWorld(WarpDriveConfig.G_SPACE_DIMENSION_ID);
|
||||
DimensionManager.getWorld(WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID);
|
||||
// load all owned dimensions at boot
|
||||
for (CelestialObject celestialObject : WarpDriveConfig.celestialObjects) {
|
||||
if (celestialObject.isWarpDrive) {
|
||||
DimensionManager.getWorld(celestialObject.dimensionId);
|
||||
}
|
||||
}
|
||||
|
||||
WarpDriveConfig.onFMLPostInitialization();
|
||||
|
||||
|
@ -561,19 +645,6 @@ public class WarpDrive implements LoadingCallback {
|
|||
}
|
||||
}
|
||||
|
||||
public static void addChatMessage(final ICommandSender sender, final ITextComponent textComponent) {
|
||||
if (sender == null) {
|
||||
logger.error("Unable to send message to NULL sender: " + textComponent.getFormattedText());
|
||||
return;
|
||||
}
|
||||
String[] lines = textComponent.getFormattedText().replace("§", "" + (char)167).replace("\\n", "\n").replaceAll("\u00A0", " ").split("\n");
|
||||
for (String line : lines) {
|
||||
sender.addChatMessage(new TextComponentString(line));
|
||||
}
|
||||
|
||||
// logger.info(message);
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Mod.EventHandler
|
||||
public void onFMLMissingMappings(FMLMissingMappingsEvent event) {
|
||||
|
@ -680,7 +751,11 @@ public class WarpDrive implements LoadingCallback {
|
|||
case "WarpDrive:warpCore":
|
||||
mapping.remap(Item.getItemFromBlock(blockShipCore));
|
||||
break;
|
||||
case "WarpDrive:itemTuningRod":
|
||||
mapping.remap(itemTuningFork);
|
||||
break;
|
||||
}
|
||||
|
||||
} else if (mapping.type == GameRegistry.Type.BLOCK) {
|
||||
switch (mapping.name) {
|
||||
case "WarpDrive:airBlock":
|
||||
|
@ -775,90 +850,6 @@ public class WarpDrive implements LoadingCallback {
|
|||
}
|
||||
}
|
||||
|
||||
// add tooltip information with text formatting and line splitting
|
||||
// will ensure it fits on minimum screen width
|
||||
public static void addTooltip(List<String> list, String tooltip) {
|
||||
final String charFormatting = "" + (char)167;
|
||||
tooltip = tooltip.replace("§", charFormatting).replace("\\n", "\n").replace("|", "\n");
|
||||
tooltip = tooltip.replace(charFormatting + "r", charFormatting + "7");
|
||||
|
||||
String[] split = tooltip.split("\n");
|
||||
for (String line : split) {
|
||||
String lineRemaining = line;
|
||||
String formatNextLine = "";
|
||||
while (!lineRemaining.isEmpty()) {
|
||||
int indexToCut = formatNextLine.length();
|
||||
int displayLength = 0;
|
||||
int length = lineRemaining.length();
|
||||
while (indexToCut < length && displayLength <= 38) {
|
||||
if (lineRemaining.charAt(indexToCut) == (char)167 && indexToCut + 1 < length) {
|
||||
indexToCut++;
|
||||
} else {
|
||||
displayLength++;
|
||||
}
|
||||
indexToCut++;
|
||||
}
|
||||
if (indexToCut < length) {
|
||||
indexToCut = lineRemaining.substring(0, indexToCut).lastIndexOf(' ');
|
||||
if (indexToCut == -1) {// no space available, show the whole line 'as is'
|
||||
list.add(lineRemaining);
|
||||
lineRemaining = "";
|
||||
} else {// cut at last space
|
||||
list.add(lineRemaining.substring(0, indexToCut).replaceAll("\u00A0", " "));
|
||||
|
||||
// compute remaining format
|
||||
int index = formatNextLine.length();
|
||||
while (index <= indexToCut) {
|
||||
if (lineRemaining.charAt(index) == (char)167 && index + 1 < indexToCut) {
|
||||
index++;
|
||||
formatNextLine += ("" + (char)167) + lineRemaining.charAt(index);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
// cut for next line, recovering current format
|
||||
lineRemaining = formatNextLine + " " + lineRemaining.substring(indexToCut + 1);
|
||||
}
|
||||
} else {
|
||||
list.add(lineRemaining.replaceAll("\u00A0", " "));
|
||||
lineRemaining = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Field getField(Class<?> clazz, String deobfuscatedName, String obfuscatedName) {
|
||||
Field fieldToReturn = null;
|
||||
|
||||
try {
|
||||
fieldToReturn = clazz.getDeclaredField(deobfuscatedName);
|
||||
} catch (Exception exception1) {
|
||||
try {
|
||||
fieldToReturn = clazz.getDeclaredField(obfuscatedName);
|
||||
} catch (Exception exception2) {
|
||||
exception2.printStackTrace();
|
||||
String map = "";
|
||||
for(Field fieldDeclared : clazz.getDeclaredFields()) {
|
||||
if (!map.isEmpty()) {
|
||||
map += ", ";
|
||||
}
|
||||
map += fieldDeclared.getName();
|
||||
}
|
||||
WarpDrive.logger.error(String.format("Unable to find %1$s field in %2$s class. Available fields are: %3$s",
|
||||
deobfuscatedName, clazz.toString(), map));
|
||||
}
|
||||
}
|
||||
if (fieldToReturn != null) {
|
||||
fieldToReturn.setAccessible(true);
|
||||
}
|
||||
return fieldToReturn;
|
||||
}
|
||||
|
||||
public static String format(final long value) {
|
||||
// alternate: BigDecimal.valueOf(value).setScale(0, RoundingMode.HALF_EVEN).toPlainString(),
|
||||
return String.format("%,d", Math.round(value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a Block with the default ItemBlock class.
|
||||
*/
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
package cr0s.warpdrive;
|
||||
|
||||
import dan200.computercraft.api.ComputerCraftAPI;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import dan200.computercraft.api.ComputerCraftAPI;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import dan200.computercraft.api.peripheral.IPeripheralProvider;
|
||||
|
||||
@Optional.InterfaceList({
|
||||
@Optional.Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft")
|
||||
|
@ -19,7 +20,6 @@ public class WarpDrivePeripheralHandler implements IPeripheralProvider {
|
|||
|
||||
@Override
|
||||
@Optional.Method(modid = "ComputerCraft")
|
||||
|
||||
public IPeripheral getPeripheral(World world, BlockPos blockPos, EnumFacing side) {
|
||||
TileEntity tileEntity = world.getTileEntity(new BlockPos(blockPos));
|
||||
if (tileEntity instanceof IPeripheral && ((IPeripheral) tileEntity).getType() != null) {
|
||||
|
|
|
@ -5,9 +5,9 @@ import net.minecraft.item.ItemStack;
|
|||
@Deprecated // we should use fluid storage instead here
|
||||
public interface IAirCanister {
|
||||
// Return true if that itemStack is Air compatible (i.e. may or already contains air)
|
||||
public boolean canContainAir(ItemStack itemStack);
|
||||
boolean canContainAir(ItemStack itemStack);
|
||||
|
||||
public boolean containsAir(ItemStack itemStack);
|
||||
public ItemStack emptyDrop(ItemStack itemStack);
|
||||
public ItemStack fullDrop(ItemStack itemStack);
|
||||
boolean containsAir(ItemStack itemStack);
|
||||
ItemStack emptyDrop(ItemStack itemStack);
|
||||
ItemStack fullDrop(ItemStack itemStack);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,9 @@ import cr0s.warpdrive.data.Vector3;
|
|||
|
||||
public interface IBeamFrequency {
|
||||
int BEAM_FREQUENCY_SCANNING = 1420;
|
||||
int BEAM_FREQUENCY_MIN = 0;
|
||||
int BEAM_FREQUENCY_MAX = 65000;
|
||||
String BEAM_FREQUENCY_TAG = "beamFrequency";
|
||||
|
||||
// get beam frequency, return -1 if invalid
|
||||
int getBeamFrequency();
|
||||
|
@ -14,7 +16,7 @@ public interface IBeamFrequency {
|
|||
|
||||
static Vector3 getBeamColor(final int beamFrequency) {
|
||||
float r, g, b;
|
||||
if (beamFrequency <= 0) { // invalid frequency
|
||||
if (beamFrequency <= BEAM_FREQUENCY_MIN) { // invalid frequency
|
||||
r = 1.0F;
|
||||
g = 0.0F;
|
||||
b = 0.0F;
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public interface IBlockBase {
|
||||
|
||||
EnumRarity getRarity(final ItemStack itemStack, final EnumRarity rarity);
|
||||
|
||||
@Nullable
|
||||
ItemBlock createItemBlock();
|
||||
|
||||
|
|
|
@ -2,5 +2,5 @@ package cr0s.warpdrive.api;
|
|||
|
||||
public interface IBlockUpdateDetector
|
||||
{
|
||||
public void updatedNeighbours();
|
||||
void updatedNeighbours();
|
||||
}
|
||||
|
|
|
@ -4,9 +4,9 @@ import net.minecraft.entity.Entity;
|
|||
|
||||
public interface IBreathingHelmet {
|
||||
|
||||
public boolean canBreath(Entity player);
|
||||
boolean canBreath(Entity player);
|
||||
|
||||
public boolean removeAir(Entity player);
|
||||
boolean removeAir(Entity player);
|
||||
|
||||
public int ticksPerCanDamage();
|
||||
int ticksPerCanDamage();
|
||||
}
|
13
src/main/java/cr0s/warpdrive/api/IControlChannel.java
Normal file
13
src/main/java/cr0s/warpdrive/api/IControlChannel.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
public interface IControlChannel {
|
||||
int CONTROL_CHANNEL_MIN = 0;
|
||||
int CONTROL_CHANNEL_MAX = 999999999;
|
||||
String CONTROL_CHANNEL_TAG = "controlChannel";
|
||||
|
||||
// get control channel, return -1 if invalid
|
||||
int getControlChannel();
|
||||
|
||||
// set control channel
|
||||
void setControlChannel(final int controlChannel);
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
|
|
@ -3,7 +3,6 @@ package cr0s.warpdrive.api;
|
|||
import cr0s.warpdrive.data.ForceFieldSetup;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IForceFieldShape {
|
||||
|
|
|
@ -3,14 +3,19 @@ package cr0s.warpdrive.api;
|
|||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface IParticleContainerItem {
|
||||
ParticleStack getParticle(ItemStack container);
|
||||
|
||||
ParticleStack getParticleStack(ItemStack container);
|
||||
|
||||
int getCapacity(ItemStack container);
|
||||
|
||||
boolean isEmpty(ItemStack container);
|
||||
|
||||
// fills the container and return how much could be transferred or 0 if container is empty or contains different particles
|
||||
int fill(ItemStack container, ParticleStack resource, boolean doFill);
|
||||
|
||||
ParticleStack drain(ItemStack container, int maxDrain, boolean doDrain);
|
||||
}
|
||||
// drains the container and return how much could be transferred or null if container is empty or contains different particles
|
||||
ParticleStack drain(ItemStack container, ParticleStack resource, boolean doDrain);
|
||||
|
||||
|
||||
|
||||
// called during recipe match to set amount to consume in next call to getContainerItem
|
||||
void setAmountToConsume(ItemStack container, int amount);
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
public interface IVideoChannel {
|
||||
// get video channel, return -1 if invalid
|
||||
public abstract int getVideoChannel();
|
||||
int VIDEO_CHANNEL_MIN = 0;
|
||||
int VIDEO_CHANNEL_MAX = 999999999;
|
||||
String VIDEO_CHANNEL_TAG = "videoChannel";
|
||||
|
||||
// sets video channel
|
||||
public abstract void setVideoChannel(int videoChannel);
|
||||
// get video channel, return -1 if invalid
|
||||
int getVideoChannel();
|
||||
|
||||
// set video channel
|
||||
void setVideoChannel(final int videoChannel);
|
||||
}
|
||||
|
|
6
src/main/java/cr0s/warpdrive/api/IWarpTool.java
Normal file
6
src/main/java/cr0s/warpdrive/api/IWarpTool.java
Normal file
|
@ -0,0 +1,6 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
// trigger for WarpDrive tool items
|
||||
public interface IWarpTool {
|
||||
|
||||
}
|
|
@ -1,14 +1,14 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import static cr0s.warpdrive.config.WarpDriveConfig.clamp;
|
||||
|
||||
public class Particle {
|
||||
protected final String registryName;
|
||||
|
||||
|
@ -27,17 +27,17 @@ public class Particle {
|
|||
}
|
||||
|
||||
public Particle setColorIndex(final int colorIndex) {
|
||||
this.colorIndex = clamp(0, 4, colorIndex);
|
||||
this.colorIndex = Commons.clamp(0, 4, colorIndex);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Particle setColor(final int colorIndex) {
|
||||
this.color = clamp(0x000000, 0xFFFFFF, color);
|
||||
this.color = Commons.clamp(0x000000, 0xFFFFFF, color);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Particle setColor(final int red, final int green, final int blue) {
|
||||
this.color = (clamp(0, 255, red) << 16) + (clamp(0, 255, green) << 8) + clamp(0, 255, blue);
|
||||
this.color = (Commons.clamp(0, 255, red) << 16) + (Commons.clamp(0, 255, green) << 8) + Commons.clamp(0, 255, blue);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -3,24 +3,26 @@ package cr0s.warpdrive.api;
|
|||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.item.EnumRarity;
|
||||
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.fml.common.FMLLog;
|
||||
import net.minecraftforge.fml.common.Loader;
|
||||
import net.minecraftforge.fml.common.ModContainer;
|
||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class ParticleRegistry {
|
||||
|
||||
private static BiMap<String, Particle> particles = HashBiMap.create();
|
||||
|
||||
public static final Particle ION = new Particle("ion") { }.setColor(0xE5FF54).setRarity(EnumRarity.COMMON);
|
||||
public static final Particle PROTON = new Particle("proton") { }.setColor(0xE5FF54).setRarity(EnumRarity.COMMON);
|
||||
public static final Particle ANTIMATTER = new Particle("antimatter") { }.setColor(0x1C3CAF).setRarity(EnumRarity.UNCOMMON);
|
||||
public static final Particle STRANGE_MATTER = new Particle("strange_matter") { }.setColor(0xE2414C).setRarity(EnumRarity.RARE);
|
||||
// public static final Particle TACHYONS = new Particle("tachyons") { }.setColor(0xE5FF54).setRarity(EnumRarity.epic);
|
||||
public static final Particle ION = new Particle("ion") { }.setColor(0xE5FF54).setRarity(EnumRarity.COMMON).setColorIndex(0);
|
||||
public static final Particle PROTON = new Particle("proton") { }.setColor(0xE5FF54).setRarity(EnumRarity.COMMON).setColorIndex(1);
|
||||
public static final Particle ANTIMATTER = new Particle("antimatter") { }.setColor(0x1C3CAF).setRarity(EnumRarity.UNCOMMON).setColorIndex(2);
|
||||
public static final Particle STRANGE_MATTER = new Particle("strange_matter") { }.setColor(0xE2414C).setRarity(EnumRarity.RARE).setColorIndex(3);
|
||||
// public static final Particle TACHYONS = new Particle("tachyons") { }.setColor(0xE5FF54).setRarity(EnumRarity.EPIC).setColorIndex(4);
|
||||
|
||||
static {
|
||||
registerParticle(ION);
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
package cr0s.warpdrive.api;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.fml.common.FMLLog;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class ParticleStack {
|
||||
public final Particle particle;
|
||||
public int amount;
|
||||
public NBTTagCompound tag;
|
||||
private final Particle particle;
|
||||
private int amount;
|
||||
private NBTTagCompound tag;
|
||||
|
||||
public ParticleStack(@Nonnull final Particle particle, final int amount) {
|
||||
if (!ParticleRegistry.isParticleRegistered(particle)) {
|
||||
|
@ -66,6 +66,16 @@ public class ParticleStack {
|
|||
return particle;
|
||||
}
|
||||
|
||||
public boolean isEmpty() { return particle == null || amount <= 0; }
|
||||
|
||||
public final int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
||||
public final void fill(final int amountAdded) {
|
||||
amount += amountAdded;
|
||||
}
|
||||
|
||||
public String getLocalizedName() {
|
||||
return this.getParticle().getLocalizedName();
|
||||
}
|
||||
|
@ -74,8 +84,11 @@ public class ParticleStack {
|
|||
return this.getParticle().getUnlocalizedName();
|
||||
}
|
||||
|
||||
public ParticleStack copy()
|
||||
{
|
||||
public ParticleStack copy() {
|
||||
return new ParticleStack(getParticle(), amount, tag);
|
||||
}
|
||||
|
||||
public ParticleStack copy(final int amount) {
|
||||
return new ParticleStack(getParticle(), amount, tag);
|
||||
}
|
||||
|
||||
|
@ -105,7 +118,7 @@ public class ParticleStack {
|
|||
}
|
||||
|
||||
if (other.getItem() instanceof IParticleContainerItem) {
|
||||
return isParticleEqual(((IParticleContainerItem) other.getItem()).getParticle(other));
|
||||
return isParticleEqual(((IParticleContainerItem) other.getItem()).getParticleStack(other));
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -1,7 +1,13 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBlockBase;
|
||||
import cr0s.warpdrive.api.IBlockUpdateDetector;
|
||||
import cr0s.warpdrive.client.ClientProxy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import defense.api.IEMPBlock;
|
||||
import defense.api.IExplosion;
|
||||
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.item.Item;
|
||||
|
@ -10,9 +16,6 @@ import net.minecraft.util.EnumBlockRenderType;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import defense.api.IEMPBlock;
|
||||
import defense.api.IExplosion;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
|
@ -23,8 +26,6 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBlockUpdateDetector;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
|
@ -34,7 +35,7 @@ import javax.annotation.Nullable;
|
|||
@Optional.InterfaceList({
|
||||
@Optional.Interface(iface = "defense.api.IEMPBlock", modid = "DefenseTech")
|
||||
})
|
||||
public abstract class BlockAbstractContainer extends BlockContainer implements IEMPBlock, IBlockBase {
|
||||
public abstract class BlockAbstractContainer extends BlockContainer implements IBlockBase, IEMPBlock {
|
||||
protected boolean isRotating = false;
|
||||
protected boolean hasSubBlocks = false; // @TODO: code review
|
||||
|
||||
|
@ -208,7 +209,8 @@ public abstract class BlockAbstractContainer extends BlockContainer implements I
|
|||
return 1;
|
||||
}
|
||||
|
||||
EnumRarity getRarity(final ItemStack itemStack, final EnumRarity rarity) {
|
||||
@Override
|
||||
public EnumRarity getRarity(final ItemStack itemStack, final EnumRarity rarity) {
|
||||
switch (getTier(itemStack)) {
|
||||
case 0: return EnumRarity.EPIC;
|
||||
case 1: return EnumRarity.COMMON;
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
|
@ -11,11 +17,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockLaser extends BlockAbstractContainer {
|
||||
|
||||
|
@ -47,7 +50,7 @@ public class BlockLaser extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityLaser) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityLaser)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityLaser) tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyInteger;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
|
@ -11,11 +17,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockLaserMedium extends BlockAbstractContainer {
|
||||
public static final PropertyInteger LEVEL = PropertyInteger.create("level", 0, 7);
|
||||
|
@ -62,7 +65,7 @@ public class BlockLaserMedium extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityLaserMedium) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityLaserMedium) tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityLaserMedium) tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,26 +1,32 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.client.ClientProxy;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.api.IBlockBase;
|
||||
import cr0s.warpdrive.api.IItemBase;
|
||||
import cr0s.warpdrive.client.ClientProxy;
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.List;
|
||||
|
||||
public class ItemBlockAbstractBase extends ItemBlock implements IItemBase {
|
||||
|
||||
public ItemBlockAbstractBase(Block block) {
|
||||
|
@ -46,13 +52,13 @@ public class ItemBlockAbstractBase extends ItemBlock implements IItemBase {
|
|||
return getUnlocalizedName() + itemStack.getItemDamage();
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack) {
|
||||
if ( itemStack == null
|
||||
|| !(block instanceof BlockAbstractContainer) ) {
|
||||
public EnumRarity getRarity(@Nonnull ItemStack itemStack) {
|
||||
if ( !(block instanceof IBlockBase) ) {
|
||||
return super.getRarity(itemStack);
|
||||
}
|
||||
return ((BlockAbstractContainer) block).getRarity(itemStack, super.getRarity(itemStack));
|
||||
return ((IBlockBase) block).getRarity(itemStack, super.getRarity(itemStack));
|
||||
}
|
||||
|
||||
public ITextComponent getStatus(final NBTTagCompound nbtTagCompound, final IBlockState blockState) {
|
||||
|
@ -80,14 +86,15 @@ public class ItemBlockAbstractBase extends ItemBlock implements IItemBase {
|
|||
|
||||
String tooltipName1 = getUnlocalizedName(itemStack) + ".tooltip";
|
||||
if (I18n.hasKey(tooltipName1)) {
|
||||
WarpDrive.addTooltip(list, new TextComponentTranslation(tooltipName1).getFormattedText());
|
||||
Commons.addTooltip(list, new TextComponentTranslation(tooltipName1).getFormattedText());
|
||||
}
|
||||
|
||||
String tooltipName2 = getUnlocalizedName() + ".tooltip";
|
||||
if ((!tooltipName1.equals(tooltipName2)) && net.minecraft.client.resources.I18n.hasKey(tooltipName2)) {
|
||||
WarpDrive.addTooltip(list, new TextComponentTranslation(tooltipName2).getFormattedText());
|
||||
if ((!tooltipName1.equals(tooltipName2)) && I18n.hasKey(tooltipName2)) {
|
||||
Commons.addTooltip(list, new TextComponentTranslation(tooltipName2).getFormattedText());
|
||||
}
|
||||
|
||||
IBlockState blockState = block.getStateFromMeta(itemStack.getMetadata()); // @TODO: integrate tooltips on tile entities
|
||||
WarpDrive.addTooltip(list, getStatus(itemStack.getTagCompound(), blockState).getFormattedText());
|
||||
Commons.addTooltip(list, getStatus(itemStack.getTagCompound(), blockState).getFormattedText());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +1,21 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.CommonProxy;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBlockUpdateDetector;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.properties.IProperty;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
|
@ -15,8 +27,6 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityChest;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.ITickable;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
|
@ -26,15 +36,6 @@ import net.minecraft.world.World;
|
|||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class TileEntityAbstractBase extends TileEntity implements IBlockUpdateDetector, ITickable {
|
||||
private boolean isFirstTick = true;
|
||||
|
@ -55,10 +56,6 @@ public abstract class TileEntityAbstractBase extends TileEntity implements IBloc
|
|||
public void updatedNeighbours() {
|
||||
}
|
||||
|
||||
protected boolean isOnPlanet() {
|
||||
return worldObj.provider.getDimension() == 0;
|
||||
}
|
||||
|
||||
protected <T extends Comparable<T>, V extends T> void updateBlockState(final IBlockState blockState_in, IProperty<T> property, V value) {
|
||||
IBlockState blockState = blockState_in;
|
||||
if (blockState == null) {
|
||||
|
@ -97,48 +94,14 @@ public abstract class TileEntityAbstractBase extends TileEntity implements IBloc
|
|||
}
|
||||
|
||||
// Inventory management methods
|
||||
|
||||
public static ItemStack copyWithSize(ItemStack itemStack, int newSize) {
|
||||
ItemStack ret = itemStack.copy();
|
||||
ret.stackSize = newSize;
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static Collection<IInventory> getConnectedInventories(TileEntity tileEntityConnection) {
|
||||
Collection<IInventory> result = new ArrayList<>(6);
|
||||
|
||||
for(EnumFacing side : EnumFacing.VALUES) {
|
||||
TileEntity tileEntity = tileEntityConnection.getWorld().getTileEntity(
|
||||
tileEntityConnection.getPos().offset(side));
|
||||
if (tileEntity != null && (tileEntity instanceof IInventory)) {
|
||||
result.add((IInventory) tileEntity);
|
||||
|
||||
if (tileEntity instanceof TileEntityChest) {
|
||||
TileEntityChest tileEntityChest = (TileEntityChest) tileEntity;
|
||||
tileEntityChest.checkForAdjacentChests();
|
||||
if (tileEntityChest.adjacentChestXNeg != null) {
|
||||
result.add(tileEntityChest.adjacentChestXNeg);
|
||||
} else if (tileEntityChest.adjacentChestXPos != null) {
|
||||
result.add(tileEntityChest.adjacentChestXPos);
|
||||
} else if (tileEntityChest.adjacentChestZNeg != null) {
|
||||
result.add(tileEntityChest.adjacentChestZNeg);
|
||||
} else if (tileEntityChest.adjacentChestZPos != null) {
|
||||
result.add(tileEntityChest.adjacentChestZPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
protected boolean addToConnectedInventories(final ItemStack itemStack) {
|
||||
List<ItemStack> itemStacks = new ArrayList<>(1);
|
||||
itemStacks.add(itemStack);
|
||||
return addToInventories(itemStacks, getConnectedInventories(this));
|
||||
return addToInventories(itemStacks, Commons.getConnectedInventories(this));
|
||||
}
|
||||
|
||||
protected boolean addToConnectedInventories(final List<ItemStack> itemStacks) {
|
||||
return addToInventories(itemStacks, getConnectedInventories(this));
|
||||
return addToInventories(itemStacks, Commons.getConnectedInventories(this));
|
||||
}
|
||||
|
||||
protected boolean addToInventories(final List<ItemStack> itemStacks, final Collection<IInventory> inventories) {
|
||||
|
@ -167,7 +130,7 @@ public abstract class TileEntityAbstractBase extends TileEntity implements IBloc
|
|||
int transfer;
|
||||
while (qtyLeft > 0) {
|
||||
transfer = Math.min(qtyLeft, itemStackLeft.getMaxStackSize());
|
||||
ItemStack itemStackDrop = copyWithSize(itemStackLeft, transfer);
|
||||
ItemStack itemStackDrop = Commons.copyWithSize(itemStackLeft, transfer);
|
||||
EntityItem entityItem = new EntityItem(worldObj, pos.getX() + 0.5D, pos.getY() + 1.0D, pos.getZ() + 0.5D, itemStackDrop);
|
||||
worldObj.spawnEntityInWorld(entityItem);
|
||||
qtyLeft -= transfer;
|
||||
|
@ -218,7 +181,7 @@ public abstract class TileEntityAbstractBase extends TileEntity implements IBloc
|
|||
}
|
||||
|
||||
transfer = Math.min(qtyLeft, itemStackSource.getMaxStackSize());
|
||||
ItemStack dest = copyWithSize(itemStackSource, transfer);
|
||||
ItemStack dest = Commons.copyWithSize(itemStackSource, transfer);
|
||||
inventory.setInventorySlotContents(i, dest);
|
||||
qtyLeft -= transfer;
|
||||
|
||||
|
@ -232,102 +195,13 @@ public abstract class TileEntityAbstractBase extends TileEntity implements IBloc
|
|||
}
|
||||
|
||||
|
||||
// searching methods
|
||||
public static final EnumFacing[] UP_DIRECTIONS = { EnumFacing.UP, EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.WEST, EnumFacing.EAST };
|
||||
public static final EnumFacing[] HORIZONTAL_DIRECTIONS = {EnumFacing.NORTH, EnumFacing.SOUTH, EnumFacing.WEST, EnumFacing.EAST };
|
||||
public static Set<BlockPos> getConnectedBlocks(World world, final BlockPos start, final EnumFacing[] directions,final Set<Block> whitelist, final int maxRange, final BlockPos... ignore) {
|
||||
return getConnectedBlocks(world, Arrays.asList(start), directions, whitelist, maxRange, ignore);
|
||||
}
|
||||
protected static Set<BlockPos> getConnectedBlocks(World world, final Collection<BlockPos> start, final EnumFacing[] directions, final Set<Block> whitelist, final int maxRange, final BlockPos... ignore) {
|
||||
Set<BlockPos> toIgnore = new HashSet<>();
|
||||
if (ignore != null) {
|
||||
toIgnore.addAll(Arrays.asList(ignore));
|
||||
}
|
||||
|
||||
Set<BlockPos> toIterate = new HashSet<>();
|
||||
toIterate.addAll(start);
|
||||
|
||||
Set<BlockPos> toIterateNext;
|
||||
|
||||
Set<BlockPos> iterated = new HashSet<>();
|
||||
|
||||
int range = 0;
|
||||
while(!toIterate.isEmpty() && range < maxRange) {
|
||||
toIterateNext = new HashSet<>();
|
||||
for (BlockPos current : toIterate) {
|
||||
if (whitelist.contains(new VectorI(current).getBlockState_noChunkLoading(world).getBlock())) {
|
||||
iterated.add(current);
|
||||
}
|
||||
|
||||
for(EnumFacing direction : directions) {
|
||||
BlockPos next = current.offset(direction);
|
||||
if (!iterated.contains(next) && !toIgnore.contains(next) && !toIterate.contains(next) && !toIterateNext.contains(next)) {
|
||||
if (whitelist.contains(new VectorI(next).getBlockState_noChunkLoading(world).getBlock())) {
|
||||
toIterateNext.add(next);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
toIterate = toIterateNext;
|
||||
range++;
|
||||
}
|
||||
|
||||
return iterated;
|
||||
}
|
||||
|
||||
|
||||
// data manipulation methods
|
||||
|
||||
protected static int toInt(double d) {
|
||||
return (int) Math.round(d);
|
||||
}
|
||||
|
||||
protected static int toInt(Object object) {
|
||||
return toInt(toDouble(object));
|
||||
}
|
||||
|
||||
protected static double toDouble(Object object) {
|
||||
assert(!(object instanceof Object[]));
|
||||
return Double.parseDouble(object.toString());
|
||||
}
|
||||
|
||||
protected static float toFloat(Object object) {
|
||||
assert(!(object instanceof Object[]));
|
||||
return Float.parseFloat(object.toString());
|
||||
}
|
||||
|
||||
protected static boolean toBool(Object object) {
|
||||
if (object == null) {
|
||||
return false;
|
||||
}
|
||||
assert(!(object instanceof Object[]));
|
||||
if (object instanceof Boolean) {
|
||||
return ((Boolean) object);
|
||||
}
|
||||
String string = object.toString();
|
||||
return string.equals("true") || string.equals("1.0") || string.equals("1") || string.equals("y") || string.equals("yes");
|
||||
}
|
||||
|
||||
public static int clamp(final int min, final int max, final int value) {
|
||||
return Math.min(max, Math.max(value, min));
|
||||
}
|
||||
|
||||
public static float clamp(final float min, final float max, final float value) {
|
||||
return Math.min(max, Math.max(value, min));
|
||||
}
|
||||
|
||||
public static double clamp(final double min, final double max, final double value) {
|
||||
return Math.min(max, Math.max(value, min));
|
||||
}
|
||||
|
||||
|
||||
// area protection
|
||||
protected boolean isBlockBreakCanceled(EntityPlayer entityPlayer, World world, BlockPos blockPosEvent) {
|
||||
return WarpDrive.proxy.isBlockBreakCanceled(entityPlayer, pos, world, blockPosEvent);
|
||||
protected boolean isBlockBreakCanceled(final UUID uuidPlayer, World world, BlockPos blockPosEvent) {
|
||||
return CommonProxy.isBlockBreakCanceled(uuidPlayer, pos, world, blockPosEvent);
|
||||
}
|
||||
|
||||
protected boolean isBlockPlaceCanceled(EntityPlayer entityPlayer, World world, BlockPos blockPosEvent, IBlockState blockState) {
|
||||
return WarpDrive.proxy.isBlockPlaceCanceled(entityPlayer, pos, world, blockPosEvent, blockState);
|
||||
protected boolean isBlockPlaceCanceled(final UUID uuidPlayer, World world, BlockPos blockPosEvent, IBlockState blockState) {
|
||||
return CommonProxy.isBlockPlaceCanceled(uuidPlayer, pos, world, blockPosEvent, blockState);
|
||||
}
|
||||
|
||||
// saved properties
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
|
||||
import net.minecraftforge.common.ForgeChunkManager;
|
||||
import net.minecraftforge.common.ForgeChunkManager.Ticket;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
|
||||
public abstract class TileEntityAbstractChunkLoading extends TileEntityAbstractEnergy
|
||||
{
|
||||
private final ArrayList<Ticket> ticketList = new ArrayList<>();
|
||||
|
|
|
@ -1,17 +1,23 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import cofh.api.energy.IEnergyProvider;
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import ic2.api.energy.event.EnergyTileLoadEvent;
|
||||
import ic2.api.energy.event.EnergyTileUnloadEvent;
|
||||
import ic2.api.energy.tile.IEnergyAcceptor;
|
||||
import ic2.api.energy.tile.IEnergyEmitter;
|
||||
import ic2.api.energy.tile.IEnergySink;
|
||||
import ic2.api.energy.tile.IEnergySource;
|
||||
import cofh.api.energy.IEnergyProvider;
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
@ -20,9 +26,6 @@ import net.minecraft.util.text.TextComponentString;
|
|||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
@Optional.InterfaceList({
|
||||
@Optional.Interface(iface = "cofh.api.energy.IEnergyHandler", modid = "CoFHCore"),
|
||||
|
@ -86,7 +89,7 @@ public abstract class TileEntityAbstractEnergy extends TileEntityAbstractInterfa
|
|||
}
|
||||
|
||||
public int energy_getEnergyStored() {
|
||||
return clamp(0, energy_getMaxStorage(), energyStored_internal);
|
||||
return Commons.clamp(0, energy_getMaxStorage(), energyStored_internal);
|
||||
}
|
||||
|
||||
// Methods to override
|
||||
|
@ -155,8 +158,8 @@ public abstract class TileEntityAbstractEnergy extends TileEntityAbstractInterfa
|
|||
return new TextComponentString("");
|
||||
}
|
||||
return new TextComponentTranslation("warpdrive.energy.statusLine",
|
||||
WarpDrive.format((long) convertInternalToEU_floor(energy_getEnergyStored())),
|
||||
WarpDrive.format((long) convertInternalToEU_floor(energy_getMaxStorage())) );
|
||||
Commons.format((long) convertInternalToEU_floor(energy_getEnergyStored())),
|
||||
Commons.format((long) convertInternalToEU_floor(energy_getMaxStorage())) );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.*;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.ComputerCraftAPI;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
import li.cil.oc.api.FileSystem;
|
||||
import li.cil.oc.api.Network;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
|
@ -14,14 +17,17 @@ import li.cil.oc.api.network.ManagedEnvironment;
|
|||
import li.cil.oc.api.network.Message;
|
||||
import li.cil.oc.api.network.Node;
|
||||
import li.cil.oc.api.network.Visibility;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.ComputerCraftAPI;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import dan200.computercraft.api.peripheral.IPeripheral;
|
||||
|
||||
// OpenComputer API: https://github.com/MightyPirates/OpenComputers/tree/master-MC1.7.10/src/main/java/li/cil/oc/api
|
||||
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
// Abstract class to manage laser mediums
|
||||
public abstract class TileEntityAbstractLaser extends TileEntityAbstractInterfaced {
|
||||
|
@ -172,6 +173,7 @@ public abstract class TileEntityAbstractLaser extends TileEntityAbstractInterfac
|
|||
protected Object[] laserMediumCount() {
|
||||
return new Object[] { laserMediumCount };
|
||||
}
|
||||
|
||||
// OpenComputers callback methods
|
||||
@Callback
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.UpgradeType;
|
||||
import cr0s.warpdrive.item.ItemUpgrade;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityChunkLoader extends TileEntityAbstractChunkLoading {
|
||||
|
@ -90,12 +92,12 @@ public class TileEntityChunkLoader extends TileEntityAbstractChunkLoading {
|
|||
Chunk aChunk = worldObj.getChunkFromBlockCoords(pos);
|
||||
myChunk = aChunk.getChunkCoordIntPair();
|
||||
}
|
||||
negDX = - clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, negDX);
|
||||
posDX = clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, posDX);
|
||||
negDZ = - clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, negDZ);
|
||||
posDZ = clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, posDZ);
|
||||
minChunk = new ChunkPos(myChunk.chunkXPos + negDX, myChunk.chunkZPos + negDZ);
|
||||
maxChunk = new ChunkPos(myChunk.chunkXPos + posDX, myChunk.chunkZPos + posDZ);
|
||||
negDX = - Commons.clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, negDX);
|
||||
posDX = Commons.clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, posDX);
|
||||
negDZ = - Commons.clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, negDZ);
|
||||
posDZ = Commons.clamp(0, WarpDriveConfig.CL_MAX_DISTANCE, posDZ);
|
||||
minChunk = new ChunkPos(myChunk.chunkXPos + negDX,myChunk.chunkZPos + negDZ);
|
||||
maxChunk = new ChunkPos(myChunk.chunkXPos + posDX,myChunk.chunkZPos + posDZ);
|
||||
area = (posDX - negDX + 1) * (posDZ - negDZ + 1);
|
||||
refreshLoading(true);
|
||||
}
|
||||
|
@ -133,7 +135,7 @@ public class TileEntityChunkLoader extends TileEntityAbstractChunkLoading {
|
|||
switch (methodName) {
|
||||
case "radius":
|
||||
if (arguments.length == 1) {
|
||||
int dist = toInt(arguments[0]);
|
||||
int dist = Commons.toInt(arguments[0]);
|
||||
negDX = dist;
|
||||
negDZ = dist;
|
||||
posDX = dist;
|
||||
|
@ -144,16 +146,16 @@ public class TileEntityChunkLoader extends TileEntityAbstractChunkLoading {
|
|||
return new Object[]{false};
|
||||
case "bounds":
|
||||
if (arguments.length == 4) {
|
||||
negDX = toInt(arguments[0]);
|
||||
posDX = toInt(arguments[1]);
|
||||
negDZ = toInt(arguments[2]);
|
||||
posDZ = toInt(arguments[3]);
|
||||
negDX = Commons.toInt(arguments[0]);
|
||||
posDX = Commons.toInt(arguments[1]);
|
||||
negDZ = Commons.toInt(arguments[2]);
|
||||
posDZ = Commons.toInt(arguments[3]);
|
||||
changedDistance();
|
||||
}
|
||||
return new Object[]{negDX, posDX, negDZ, posDZ};
|
||||
case "active":
|
||||
if (arguments.length == 1)
|
||||
shouldLoad = toBool(arguments[0]);
|
||||
shouldLoad = Commons.toBool(arguments[0]);
|
||||
return new Object[]{shouldChunkLoad()};
|
||||
case "upgrades":
|
||||
return new Object[] { getUpgradesAsString() };
|
||||
|
|
|
@ -1,14 +1,28 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBeamFrequency;
|
||||
import cr0s.warpdrive.api.IDamageReceiver;
|
||||
import cr0s.warpdrive.api.IVideoChannel;
|
||||
import cr0s.warpdrive.block.weapon.BlockLaserCamera;
|
||||
import cr0s.warpdrive.block.weapon.TileEntityLaserCamera;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityList;
|
||||
|
@ -16,23 +30,17 @@ import net.minecraft.entity.EntityLivingBase;
|
|||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.*;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBeamFrequency;
|
||||
import cr0s.warpdrive.api.IDamageReceiver;
|
||||
import cr0s.warpdrive.block.weapon.BlockLaserCamera;
|
||||
import cr0s.warpdrive.block.weapon.TileEntityLaserCamera;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFrequency {
|
||||
|
||||
|
@ -145,7 +153,7 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
private void emitBeam(int beamEnergy) {
|
||||
int energy = beamEnergy;
|
||||
|
||||
int beamLengthBlocks = clamp(0, WarpDriveConfig.LASER_CANNON_RANGE_MAX, energy / 200);
|
||||
int beamLengthBlocks = Commons.clamp(0, WarpDriveConfig.LASER_CANNON_RANGE_MAX, energy / 200);
|
||||
|
||||
if (energy == 0 || beamFrequency > 65000 || beamFrequency <= 0) {
|
||||
if (WarpDriveConfig.LOGGING_WEAPON) {
|
||||
|
@ -269,7 +277,7 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
// apply effects
|
||||
mopEntity.entityHit.setFire(WarpDriveConfig.LASER_CANNON_ENTITY_HIT_SET_ON_FIRE_SECONDS);
|
||||
if (entity != null) {
|
||||
float damage = (float)clamp(0.0D, WarpDriveConfig.LASER_CANNON_ENTITY_HIT_MAX_DAMAGE,
|
||||
float damage = (float) Commons.clamp(0.0D, WarpDriveConfig.LASER_CANNON_ENTITY_HIT_MAX_DAMAGE,
|
||||
WarpDriveConfig.LASER_CANNON_ENTITY_HIT_BASE_DAMAGE + energy / WarpDriveConfig.LASER_CANNON_ENTITY_HIT_ENERGY_PER_DAMAGE);
|
||||
entity.attackEntityFrom(DamageSource.inFire, damage);
|
||||
} else {
|
||||
|
@ -277,7 +285,7 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
}
|
||||
|
||||
if (energy > WarpDriveConfig.LASER_CANNON_ENTITY_HIT_EXPLOSION_ENERGY_THRESHOLD) {
|
||||
float strength = (float)clamp(0.0D, WarpDriveConfig.LASER_CANNON_ENTITY_HIT_EXPLOSION_MAX_STRENGTH,
|
||||
float strength = (float) Commons.clamp(0.0D, WarpDriveConfig.LASER_CANNON_ENTITY_HIT_EXPLOSION_MAX_STRENGTH,
|
||||
WarpDriveConfig.LASER_CANNON_ENTITY_HIT_EXPLOSION_BASE_STRENGTH + energy / WarpDriveConfig.LASER_CANNON_ENTITY_HIT_EXPLOSION_ENERGY_PER_STRENGTH);
|
||||
worldObj.newExplosion(null, mopEntity.entityHit.posX, mopEntity.entityHit.posY, mopEntity.entityHit.posZ, strength, true, true);
|
||||
}
|
||||
|
@ -342,7 +350,7 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
|
||||
// explode on unbreakable blocks
|
||||
if (hardness < 0.0F) {
|
||||
float strength = (float)clamp(0.0D, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_MAX_STRENGTH,
|
||||
float strength = (float) Commons.clamp(0.0D, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_MAX_STRENGTH,
|
||||
WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_BASE_STRENGTH + energy / WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_ENERGY_PER_STRENGTH);
|
||||
if (WarpDriveConfig.LOGGING_WEAPON) {
|
||||
WarpDrive.logger.info("Explosion triggered with strength " + strength);
|
||||
|
@ -353,9 +361,9 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
}
|
||||
|
||||
// Compute parameters
|
||||
int energyCost = clamp(WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ENERGY_MIN, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ENERGY_MAX,
|
||||
int energyCost = Commons.clamp(WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ENERGY_MIN, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ENERGY_MAX,
|
||||
Math.round(hardness * WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ENERGY_PER_BLOCK_HARDNESS));
|
||||
double absorptionChance = clamp(0.0D, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ABSORPTION_MAX,
|
||||
double absorptionChance = Commons.clamp(0.0D, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ABSORPTION_MAX,
|
||||
hardness * WarpDriveConfig.LASER_CANNON_BLOCK_HIT_ABSORPTION_PER_BLOCK_HARDNESS);
|
||||
|
||||
do {
|
||||
|
@ -393,7 +401,7 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
-0.2D * vDirection.x + 0.05 * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()),
|
||||
-0.2D * vDirection.y + 0.05 * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()),
|
||||
-0.2D * vDirection.z + 0.05 * (worldObj.rand.nextFloat() - worldObj.rand.nextFloat()));
|
||||
PacketHandler.sendSpawnParticlePacket(worldObj, "explode", origin, direction, r, g, b, r, g, b, 96);
|
||||
PacketHandler.sendSpawnParticlePacket(worldObj, "explode", (byte) 5, origin, direction, r, g, b, r, g, b, 96);
|
||||
|
||||
// apply custom damages
|
||||
if (blockState.getBlock() instanceof IDamageReceiver) {
|
||||
|
@ -408,7 +416,7 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
}
|
||||
|
||||
if (hardness >= WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_HARDNESS_THRESHOLD) {
|
||||
float strength = (float)clamp(0.0D, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_MAX_STRENGTH,
|
||||
float strength = (float) Commons.clamp(0.0D, WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_MAX_STRENGTH,
|
||||
WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_BASE_STRENGTH + energy / WarpDriveConfig.LASER_CANNON_BLOCK_HIT_EXPLOSION_ENERGY_PER_STRENGTH);
|
||||
if (WarpDriveConfig.LOGGING_WEAPON) {
|
||||
WarpDrive.logger.info("Explosion triggered with strength " + strength);
|
||||
|
@ -428,13 +436,11 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
if (distance <= 0) {
|
||||
return 1.0D;
|
||||
}
|
||||
boolean isInSpace = (worldObj.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID);
|
||||
boolean isInHyperSpace = (worldObj.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID);
|
||||
double attenuation;
|
||||
if (isInSpace || isInHyperSpace) {
|
||||
attenuation = WarpDriveConfig.LASER_CANNON_ENERGY_ATTENUATION_PER_VOID_BLOCK;
|
||||
} else {
|
||||
if (WarpDrive.starMap.hasAtmosphere(worldObj, pos.getX(), pos.getZ())) {
|
||||
attenuation = WarpDriveConfig.LASER_CANNON_ENERGY_ATTENUATION_PER_AIR_BLOCK;
|
||||
} else {
|
||||
attenuation = WarpDriveConfig.LASER_CANNON_ENERGY_ATTENUATION_PER_VOID_BLOCK;
|
||||
}
|
||||
double transmittance = Math.exp(- attenuation * distance);
|
||||
if (WarpDriveConfig.LOGGING_WEAPON) {
|
||||
|
@ -520,11 +526,11 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
|
||||
protected ITextComponent getBeamFrequencyStatus() {
|
||||
if (beamFrequency == -1) {
|
||||
return new TextComponentTranslation("warpdrive.beamFrequency.statusLine.undefined");
|
||||
return new TextComponentTranslation("warpdrive.beam_frequency.statusLine.undefined");
|
||||
} else if (beamFrequency < 0) {
|
||||
return new TextComponentTranslation("warpdrive.beamFrequency.statusLine.invalid", beamFrequency );
|
||||
return new TextComponentTranslation("warpdrive.beam_frequency.statusLine.invalid", beamFrequency );
|
||||
} else {
|
||||
return new TextComponentTranslation("warpdrive.beamFrequency.statusLine.valid", beamFrequency );
|
||||
return new TextComponentTranslation("warpdrive.beam_frequency.statusLine.valid", beamFrequency );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -551,14 +557,14 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
super.readFromNBT(tag);
|
||||
setBeamFrequency(tag.getInteger("beamFrequency"));
|
||||
legacyVideoChannel = tag.getInteger("cameraFrequency") + tag.getInteger("videoChannel");
|
||||
setBeamFrequency(tag.getInteger(BEAM_FREQUENCY_TAG));
|
||||
legacyVideoChannel = tag.getInteger("cameraFrequency") + tag.getInteger(IVideoChannel.VIDEO_CHANNEL_TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
tag = super.writeToNBT(tag);
|
||||
tag.setInteger("beamFrequency", beamFrequency);
|
||||
tag.setInteger(BEAM_FREQUENCY_TAG, beamFrequency);
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
@ -598,13 +604,13 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
try {
|
||||
float newYaw, newPitch;
|
||||
if (arguments.length == 2) {
|
||||
newYaw = toFloat(arguments[0]);
|
||||
newPitch = toFloat(arguments[1]);
|
||||
newYaw = Commons.toFloat(arguments[0]);
|
||||
newPitch = Commons.toFloat(arguments[1]);
|
||||
initiateBeamEmission(newYaw, newPitch);
|
||||
} else if (arguments.length == 3) {
|
||||
float deltaX = -toFloat(arguments[0]);
|
||||
float deltaY = -toFloat(arguments[1]);
|
||||
float deltaZ = toFloat(arguments[2]);
|
||||
float deltaX = -Commons.toFloat(arguments[0]);
|
||||
float deltaY = -Commons.toFloat(arguments[1]);
|
||||
float deltaZ = Commons.toFloat(arguments[2]);
|
||||
double horizontalDistance = MathHelper.sqrt_double(deltaX * deltaX + deltaZ * deltaZ);
|
||||
//noinspection SuspiciousNameCombination
|
||||
newYaw = (float) (Math.atan2(deltaX, deltaZ) * 180.0D / Math.PI);
|
||||
|
@ -654,7 +660,7 @@ public class TileEntityLaser extends TileEntityAbstractLaser implements IBeamFre
|
|||
|
||||
case "beamFrequency":
|
||||
if (arguments.length == 1) {
|
||||
setBeamFrequency(toInt(arguments[0]));
|
||||
setBeamFrequency(Commons.toInt(arguments[0]));
|
||||
}
|
||||
return new Integer[]{ beamFrequency };
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
package cr0s.warpdrive.block;
|
||||
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
|
||||
public class TileEntityLaserMedium extends TileEntityAbstractEnergy {
|
||||
private int ticks = 0;
|
||||
|
|
|
@ -1,23 +1,32 @@
|
|||
package cr0s.warpdrive.block.atomic;
|
||||
|
||||
import cr0s.warpdrive.api.IBlockBase;
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.EntityLiving.SpawnPlacementType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class BlockAbstractAccelerator extends BlockAbstractBase {
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.EntityLiving.SpawnPlacementType;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class BlockAbstractAccelerator extends BlockAbstractBase implements IBlockBase {
|
||||
|
||||
public final byte tier;
|
||||
|
||||
BlockAbstractAccelerator(final String registryName, final byte tier) {
|
||||
super(registryName, Material.IRON);
|
||||
this.tier = tier;
|
||||
setHardness(WarpDriveConfig.HULL_HARDNESS[tier - 1] / 5);
|
||||
setResistance(WarpDriveConfig.HULL_BLAST_RESISTANCE[tier - 1] / 6 * 5 / 3);
|
||||
setHardness(4 + tier);
|
||||
setResistance((2 + 2 * tier) * 5 / 3);
|
||||
setSoundType(SoundType.METAL);
|
||||
setCreativeTab(WarpDrive.creativeTabWarpDrive);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -25,6 +34,21 @@ public class BlockAbstractAccelerator extends BlockAbstractBase {
|
|||
return 0;
|
||||
}
|
||||
|
||||
public byte getTier(final ItemStack itemStack) {
|
||||
return tier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(final ItemStack itemStack, final EnumRarity rarity) {
|
||||
switch (getTier(itemStack)) {
|
||||
case 0: return EnumRarity.EPIC;
|
||||
case 1: return EnumRarity.COMMON;
|
||||
case 2: return EnumRarity.UNCOMMON;
|
||||
case 3: return EnumRarity.RARE;
|
||||
default: return rarity;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canCreatureSpawn(@Nonnull IBlockState blockState, @Nonnull IBlockAccess world, @Nonnull BlockPos blockPos, SpawnPlacementType type) {
|
||||
return false;
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package cr0s.warpdrive.block.atomic;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
|
||||
import net.minecraft.block.ITileEntityProvider;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
@ -15,13 +17,17 @@ import net.minecraftforge.fml.common.registry.GameRegistry;
|
|||
import javax.annotation.Nonnull;
|
||||
|
||||
public class BlockAcceleratorControlPoint extends BlockAbstractAccelerator implements ITileEntityProvider {
|
||||
|
||||
|
||||
public BlockAcceleratorControlPoint(final String registryName) {
|
||||
super(registryName, (byte) 1);
|
||||
setUnlocalizedName("warpdrive.atomic.accelerator_control_point");
|
||||
GameRegistry.registerTileEntity(TileEntityAcceleratorControlPoint.class, WarpDrive.MODID + ":blockAcceleratorControlPoint");
|
||||
}
|
||||
|
||||
BlockAcceleratorControlPoint(final String registryName, final byte tier) {
|
||||
super(registryName, tier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState blockState, EntityPlayer entityPlayer, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
if (world.isRemote) {
|
||||
|
@ -32,7 +38,7 @@ public class BlockAcceleratorControlPoint extends BlockAbstractAccelerator imple
|
|||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
|
||||
if (tileEntity instanceof TileEntityAcceleratorControlPoint) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityAcceleratorControlPoint) tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityAcceleratorControlPoint) tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,24 +1,28 @@
|
|||
package cr0s.warpdrive.block.atomic;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockChiller extends BlockAbstractAccelerator {
|
||||
|
||||
private static final float BOUNDING_TOLERANCE = 0.05F;
|
||||
|
||||
public BlockChiller(final String registryName, final byte tier) {
|
||||
|
@ -78,7 +82,7 @@ public class BlockChiller extends BlockAbstractAccelerator {
|
|||
|
||||
// visual effect
|
||||
v3Direction.scale(0.20D);
|
||||
PacketHandler.sendSpawnParticlePacket(world, "snowshovel", v3Entity, v3Direction,
|
||||
PacketHandler.sendSpawnParticlePacket(world, "snowshovel", (byte) 5, v3Entity, v3Direction,
|
||||
0.90F + 0.10F * world.rand.nextFloat(), 0.35F + 0.25F * world.rand.nextFloat(), 0.30F + 0.15F * world.rand.nextFloat(),
|
||||
0.0F, 0.0F, 0.0F, 32);
|
||||
}
|
||||
|
@ -86,50 +90,77 @@ public class BlockChiller extends BlockAbstractAccelerator {
|
|||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void randomDisplayTick(IBlockState blockState, World world, BlockPos blockPos, Random rand) {
|
||||
if (world.getBlockState(blockPos) == null) { // @TODO: add proper state handling == 0) {
|
||||
int metadata = this.getMetaFromState(world.getBlockState(blockPos)); // @TODO MC1.10
|
||||
if (metadata == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
double dOffset = 0.0625D;
|
||||
// sound effect
|
||||
int countNearby = 17
|
||||
- (world.getBlockState(blockPos.east() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.west() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.north() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.south() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.east(2) ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.west(2) ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.north(2)).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.south(2)).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.up(2).east() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.up(2).west() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.up(2).north() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.up(2).south() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.down(2).east() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.down(2).west() ).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.down(2).north()).getBlock() == this ? 1 : 0)
|
||||
- (world.getBlockState(blockPos.down(2).south()).getBlock() == this ? 1 : 0);
|
||||
if (world.rand.nextInt(17) < countNearby) {
|
||||
world.playSound(null, blockPos,
|
||||
SoundEvents.CHILLER, SoundCategory.AMBIENT, metadata == 1 ? 1.0F : 0.15F, 1.0F);
|
||||
}
|
||||
|
||||
for (int l = 0; l < 6; ++l) {
|
||||
double dX = (double)((float)blockPos.getX() + rand.nextFloat());
|
||||
double dY = (double)((float)blockPos.getY() + rand.nextFloat());
|
||||
double dZ = (double)((float)blockPos.getZ() + rand.nextFloat());
|
||||
boolean isValidSide = false;
|
||||
// particle effect, loosely based on redstone ore
|
||||
if (world.rand.nextInt(8) != 1) {
|
||||
double dOffset = 0.0625D;
|
||||
|
||||
if (l == 0 && !world.getBlockState(blockPos.up()).isOpaqueCube()) {
|
||||
dY = blockPos.getY() + 1.0D + dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 1 && !world.getBlockState(blockPos.down()).isOpaqueCube()) {
|
||||
dY = blockPos.getY() - dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 2 && !world.getBlockState(blockPos.south()).isOpaqueCube()) {
|
||||
dZ = blockPos.getZ()+ 1.0D + dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 3 && !world.getBlockState(blockPos.north()).isOpaqueCube()) {
|
||||
dZ = blockPos.getZ() - dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 4 && !world.getBlockState(blockPos.east()).isOpaqueCube()) {
|
||||
dX = blockPos.getX() + 1.0D + dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 5 && !world.getBlockState(blockPos.west()).isOpaqueCube()) {
|
||||
dX = blockPos.getX() - dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (isValidSide) {
|
||||
world.spawnParticle(EnumParticleTypes.REDSTONE, dX, dY, dZ, 0.0D, 0.0D, 0.0D);
|
||||
for (int l = 0; l < 6; ++l) {
|
||||
double dX = (double) ((float) blockPos.getX() + rand.nextFloat());
|
||||
double dY = (double) ((float) blockPos.getY() + rand.nextFloat());
|
||||
double dZ = (double) ((float) blockPos.getZ() + rand.nextFloat());
|
||||
boolean isValidSide = false;
|
||||
|
||||
if (l == 0 && !world.getBlockState(blockPos.up()).isOpaqueCube()) {
|
||||
dY = blockPos.getY() + 1.0D + dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 1 && !world.getBlockState(blockPos.down()).isOpaqueCube()) {
|
||||
dY = blockPos.getY() - dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 2 && !world.getBlockState(blockPos.south()).isOpaqueCube()) {
|
||||
dZ = blockPos.getZ() + 1.0D + dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 3 && !world.getBlockState(blockPos.north()).isOpaqueCube()) {
|
||||
dZ = blockPos.getZ() - dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 4 && !world.getBlockState(blockPos.east()).isOpaqueCube()) {
|
||||
dX = blockPos.getX() + 1.0D + dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (l == 5 && !world.getBlockState(blockPos.west()).isOpaqueCube()) {
|
||||
dX = blockPos.getX() - dOffset;
|
||||
isValidSide = true;
|
||||
}
|
||||
|
||||
if (isValidSide) {
|
||||
world.spawnParticle(EnumParticleTypes.REDSTONE, dX, dY, dZ, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,20 +1,26 @@
|
|||
package cr0s.warpdrive.block.atomic;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockParticlesInjector extends BlockAcceleratorControlPoint {
|
||||
// @TODO: add on/off textures and states
|
||||
|
||||
public BlockParticlesInjector(final String registryName) {
|
||||
super(registryName);
|
||||
super(registryName, (byte) 1);
|
||||
setUnlocalizedName("warpdrive.atomic.particles_injector");
|
||||
GameRegistry.registerTileEntity(TileEntityParticlesInjector.class, WarpDrive.MODID + ":blockParticlesInjector");
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int p_149915_2_) {
|
||||
public TileEntity createNewTileEntity(@Nonnull World world, int metadata) {
|
||||
return new TileEntityParticlesInjector();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
package cr0s.warpdrive.block.atomic;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IVideoChannel;
|
||||
import cr0s.warpdrive.api.IControlChannel;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractInterfaced;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.*;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
|
@ -20,15 +20,15 @@ import net.minecraftforge.fml.common.Optional;
|
|||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfaced implements IVideoChannel {
|
||||
public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfaced implements IControlChannel {
|
||||
|
||||
// persistent properties
|
||||
public boolean isEnabled = true;
|
||||
private int videoChannel = -1;
|
||||
private int controlChannel = -1;
|
||||
|
||||
// computed properties
|
||||
private final static int PACKET_SEND_INTERVAL_TICKS = 60 * 20;
|
||||
private int packetSendTicks = 10;
|
||||
private static final int UPDATE_INTERVAL_TICKS = 20;
|
||||
private int updateTicks;
|
||||
|
||||
public TileEntityAcceleratorControlPoint() {
|
||||
super();
|
||||
|
@ -37,7 +37,7 @@ public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfa
|
|||
addMethods(new String[] {
|
||||
"enable",
|
||||
"state",
|
||||
"videoChannel"
|
||||
"controlChannel"
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -54,10 +54,10 @@ public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfa
|
|||
return;
|
||||
}
|
||||
|
||||
packetSendTicks--;
|
||||
if (packetSendTicks <= 0) {
|
||||
packetSendTicks = PACKET_SEND_INTERVAL_TICKS;
|
||||
PacketHandler.sendVideoChannelPacket(worldObj.provider.getDimension(), pos, videoChannel);
|
||||
updateTicks--;
|
||||
if (updateTicks <= 0) {
|
||||
updateTicks = UPDATE_INTERVAL_TICKS;
|
||||
updateMetadata((controlChannel == -1) ? 0 : 1); // @TODO MC1.10
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -68,62 +68,50 @@ public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfa
|
|||
}
|
||||
|
||||
@Override
|
||||
public int getVideoChannel() {
|
||||
return videoChannel;
|
||||
public int getControlChannel() {
|
||||
return controlChannel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVideoChannel(int parVideoChannel) {
|
||||
if (videoChannel != parVideoChannel) {
|
||||
videoChannel = parVideoChannel;
|
||||
public void setControlChannel(int parVideoChannel) {
|
||||
if (controlChannel != parVideoChannel) {
|
||||
controlChannel = parVideoChannel;
|
||||
if (WarpDriveConfig.LOGGING_VIDEO_CHANNEL) {
|
||||
WarpDrive.logger.info(this + " Monitor video channel set to " + videoChannel);
|
||||
WarpDrive.logger.info(this + " Accelerator control point controlChannel channel set to " + controlChannel);
|
||||
}
|
||||
// force update through main thread since CC runs on server as 'client'
|
||||
packetSendTicks = 0;
|
||||
markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
private ITextComponent getVideoChannelStatus() {
|
||||
if (videoChannel == -1) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.undefined");
|
||||
} else if (videoChannel < 0) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.invalid", videoChannel);
|
||||
private ITextComponent getControlChannelStatus() {
|
||||
if (controlChannel == -1) {
|
||||
return new TextComponentTranslation("warpdrive.control_channel.statusLine.undefined");
|
||||
} else if (controlChannel < CONTROL_CHANNEL_MIN || controlChannel > CONTROL_CHANNEL_MAX) {
|
||||
return new TextComponentTranslation("warpdrive.control_channel.statusLine.invalid", controlChannel);
|
||||
} else {
|
||||
CameraRegistryItem camera = WarpDrive.cameras.getCameraByVideoChannel(worldObj, videoChannel);
|
||||
if (camera == null) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.invalidOrNotLoaded", videoChannel);
|
||||
} else if (camera.isTileEntity(this)) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.valid", videoChannel);
|
||||
} else {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.validCamera",
|
||||
videoChannel,
|
||||
camera.position.getX(),
|
||||
camera.position.getY(),
|
||||
camera.position.getZ());
|
||||
}
|
||||
return new TextComponentTranslation("warpdrive.control_channel.statusLine.valid", controlChannel);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ITextComponent getStatus() {
|
||||
return super.getStatus()
|
||||
.appendSibling(getVideoChannelStatus());
|
||||
.appendSibling(getControlChannelStatus());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
super.readFromNBT(tag);
|
||||
isEnabled = tag.getBoolean("isEnabled");
|
||||
videoChannel = tag.getInteger("videoChannel");
|
||||
controlChannel = tag.getInteger(CONTROL_CHANNEL_TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
tag = super.writeToNBT(tag);
|
||||
tag.setBoolean("isEnabled", isEnabled);
|
||||
tag.setInteger("videoChannel", videoChannel);
|
||||
tag.setInteger(CONTROL_CHANNEL_TAG, controlChannel);
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
@ -150,11 +138,11 @@ public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfa
|
|||
|
||||
@Callback
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] videoChannel(Context context, Arguments arguments) {
|
||||
public Object[] controlChannel(Context context, Arguments arguments) {
|
||||
if (arguments.count() == 1) {
|
||||
setVideoChannel(arguments.checkInteger(0));
|
||||
setControlChannel(arguments.checkInteger(0));
|
||||
}
|
||||
return new Integer[] { videoChannel };
|
||||
return new Integer[] { controlChannel };
|
||||
}
|
||||
|
||||
@Callback
|
||||
|
@ -168,7 +156,7 @@ public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfa
|
|||
if (arguments.length == 1) {
|
||||
boolean enable;
|
||||
try {
|
||||
enable = toBool(arguments[0]);
|
||||
enable = Commons.toBool(arguments[0]);
|
||||
} catch (Exception exception) {
|
||||
throw new Exception("Function expects a boolean value");
|
||||
}
|
||||
|
@ -179,7 +167,7 @@ public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfa
|
|||
|
||||
private Object[] state() { // isConnected, isPowered, shape
|
||||
String status = getStatus().getFormattedText();
|
||||
return new Object[] { status, isEnabled, videoChannel };
|
||||
return new Object[] { status, isEnabled, controlChannel };
|
||||
}
|
||||
|
||||
// ComputerCraft IPeripheral methods implementation
|
||||
|
@ -193,11 +181,11 @@ public class TileEntityAcceleratorControlPoint extends TileEntityAbstractInterfa
|
|||
case "enable":
|
||||
return enable(arguments);
|
||||
|
||||
case "videoChannel":
|
||||
case "controlChannel":
|
||||
if (arguments.length == 1) {
|
||||
setVideoChannel(toInt(arguments[0]));
|
||||
setControlChannel(Commons.toInt(arguments[0]));
|
||||
}
|
||||
return new Integer[] { videoChannel };
|
||||
return new Integer[] { controlChannel };
|
||||
|
||||
case "state":
|
||||
return state();
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package cr0s.warpdrive.block.breathing;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
|
@ -8,13 +10,14 @@ import net.minecraft.block.material.EnumPushReaction;
|
|||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
@ -104,10 +107,10 @@ public class BlockAir extends BlockAbstractBase {
|
|||
}
|
||||
|
||||
int concentration = blockState.getBlock().getMetaFromState(blockState);
|
||||
boolean isInSpaceWorld = world.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID || world.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID;
|
||||
boolean hasAtmosphere = WarpDrive.starMap.hasAtmosphere(world, blockPos.getX(), blockPos.getZ());
|
||||
|
||||
// Remove air block to vacuum block
|
||||
if (concentration <= 0 || !isInSpaceWorld) {
|
||||
if (concentration <= 0 || hasAtmosphere) {
|
||||
world.setBlockState(blockPos, Blocks.AIR.getDefaultState(), 3); // replace our air block to vacuum block
|
||||
} else {
|
||||
// Try to spread the air
|
||||
|
@ -359,11 +362,16 @@ public class BlockAir extends BlockAbstractBase {
|
|||
|
||||
@Override
|
||||
public void onBlockAdded(World world, BlockPos blockPos, IBlockState blockState) {
|
||||
if (world.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID || world.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID) {
|
||||
if (!WarpDrive.starMap.hasAtmosphere(world, blockPos.getX(), blockPos.getZ())) {
|
||||
world.scheduleBlockUpdate(blockPos, this, tickRate(world), 0);
|
||||
} else {
|
||||
world.setBlockToAir(blockPos);
|
||||
}
|
||||
super.onBlockAdded(world, blockPos, blockState);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.COMMON;
|
||||
}
|
||||
}
|
|
@ -1,10 +1,18 @@
|
|||
package cr0s.warpdrive.block.breathing;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IAirCanister;
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import cr0s.warpdrive.block.BlockAbstractRotatingContainer;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import cr0s.warpdrive.block.BlockAbstractRotatingContainer;
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
|
@ -19,13 +27,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IAirCanister;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockAirGenerator extends BlockAbstractRotatingContainer {
|
||||
|
||||
|
@ -85,7 +88,7 @@ public class BlockAirGenerator extends BlockAbstractRotatingContainer {
|
|||
if (tileEntity instanceof TileEntityAirGenerator) {
|
||||
TileEntityAirGenerator airGenerator = (TileEntityAirGenerator)tileEntity;
|
||||
if (itemStackHeld == null) {
|
||||
WarpDrive.addChatMessage(entityPlayer, airGenerator.getStatus());
|
||||
Commons.addChatMessage(entityPlayer, airGenerator.getStatus());
|
||||
return true;
|
||||
} else {
|
||||
Item itemHeld = itemStackHeld.getItem();
|
||||
|
|
|
@ -1,18 +1,21 @@
|
|||
package cr0s.warpdrive.block.breathing;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityAirGenerator extends TileEntityAbstractEnergy {
|
||||
|
@ -43,7 +46,7 @@ public class TileEntityAirGenerator extends TileEntityAbstractEnergy {
|
|||
}
|
||||
|
||||
// Air generator works only in space & hyperspace
|
||||
if (worldObj.provider.getDimension() != WarpDriveConfig.G_SPACE_DIMENSION_ID && worldObj.provider.getDimension() != WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID) {
|
||||
if (WarpDrive.starMap.hasAtmosphere(worldObj, pos.getX(), pos.getZ())) {
|
||||
IBlockState blockState = worldObj.getBlockState(pos);
|
||||
if (blockState.getValue(BlockProperties.ACTIVE)) {
|
||||
worldObj.setBlockState(pos, blockState.withProperty(BlockProperties.ACTIVE, false)); // set disabled texture
|
||||
|
@ -63,12 +66,13 @@ public class TileEntityAirGenerator extends TileEntityAbstractEnergy {
|
|||
worldObj.setBlockState(pos, blockState.withProperty(BlockProperties.ACTIVE, false)); // set disabled texture
|
||||
}
|
||||
}
|
||||
releaseAir(pos.add(1, 0, 0));
|
||||
releaseAir(pos.add(-1, 0, 0));
|
||||
releaseAir(pos.add(0, 1, 0));
|
||||
releaseAir(pos.add(0, -1, 0));
|
||||
releaseAir(pos.add(0, 0, 1));
|
||||
releaseAir(pos.add(0, 0, -1));
|
||||
releaseAir(pos.north());
|
||||
releaseAir(pos.south());
|
||||
releaseAir(pos.east());
|
||||
releaseAir(pos.west());
|
||||
releaseAir(pos.up());
|
||||
releaseAir(pos.down());
|
||||
|
||||
|
||||
cooldownTicks = 0;
|
||||
}
|
||||
|
@ -132,7 +136,7 @@ public class TileEntityAirGenerator extends TileEntityAbstractEnergy {
|
|||
|
||||
public Object[] enable(Object[] arguments) {
|
||||
if (arguments.length == 1) {
|
||||
isEnabled = toBool(arguments[0]);
|
||||
isEnabled = Commons.toBool(arguments[0]);
|
||||
}
|
||||
return new Object[]{isEnabled};
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package cr0s.warpdrive.block.building;
|
|||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
@ -11,6 +12,7 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
@ -46,7 +48,7 @@ public class BlockShipScanner extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityShipScanner) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityShipScanner)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityShipScanner)tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,24 @@
|
|||
package cr0s.warpdrive.block.building;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.block.movement.TileEntityShipCore;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.JumpBlock;
|
||||
import cr0s.warpdrive.data.JumpShip;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Transformation;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.item.ItemCrystalToken;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
|
@ -9,11 +28,6 @@ import java.util.Date;
|
|||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import cr0s.warpdrive.data.*;
|
||||
import cr0s.warpdrive.item.ItemCrystalToken;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -27,6 +41,7 @@ import net.minecraft.nbt.NBTTagList;
|
|||
import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
@ -35,17 +50,9 @@ import net.minecraft.util.text.Style;
|
|||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.util.text.TextFormatting;
|
||||
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.block.movement.TileEntityShipCore;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import net.minecraftforge.fml.server.FMLServerHandler;
|
||||
|
||||
public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
||||
|
@ -175,7 +182,7 @@ public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
|||
if (tileEntity instanceof TileEntityShipCore) {
|
||||
((TileEntityShipCore)tileEntity).summonOwnerOnDeploy(playerName);
|
||||
if (entityPlayerMP != null) {
|
||||
WarpDrive.addChatMessage(entityPlayerMP, new TextComponentString("§6" + "Welcome aboard captain. Use the computer to get moving..."));
|
||||
Commons.addChatMessage(entityPlayerMP, new TextComponentString("§6" + "Welcome aboard captain. Use the computer to get moving..."));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -245,7 +252,7 @@ public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
|||
// Warn owner if deployment done but wait next tick for teleportation
|
||||
if (currentDeployIndex >= blocksToDeployCount) {
|
||||
if (entityPlayerMP != null) {
|
||||
WarpDrive.addChatMessage(entityPlayerMP, new TextComponentString("Ship complete. Teleporting captain to the main deck"));
|
||||
Commons.addChatMessage(entityPlayerMP, new TextComponentString("Ship complete. Teleporting captain to the main deck"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -786,10 +793,10 @@ public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
|||
private Object[] deploy(Object[] arguments) {
|
||||
if (arguments.length == 5) {
|
||||
String fileName = (String) arguments[0];
|
||||
int x = toInt(arguments[1]);
|
||||
int y = toInt(arguments[2]);
|
||||
int z = toInt(arguments[3]);
|
||||
byte rotationSteps = (byte) toInt(arguments[4]);
|
||||
int x = Commons.toInt(arguments[1]);
|
||||
int y = Commons.toInt(arguments[2]);
|
||||
int z = Commons.toInt(arguments[3]);
|
||||
byte rotationSteps = (byte) Commons.toInt(arguments[4]);
|
||||
|
||||
if (!new File(WarpDriveConfig.G_SCHEMALOCATION + "/" + fileName + ".schematic").exists()) {
|
||||
return new Object[] { 0, "Specified schematic file was not found!" };
|
||||
|
@ -870,7 +877,7 @@ public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
|||
}
|
||||
if (entityPlayers.size() > 1) {
|
||||
for (EntityPlayer entityPlayer : entityPlayers) {
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("Too many players detected: please stand in the beam one at a time.")
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("Too many players detected: please stand in the beam one at a time.")
|
||||
.setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
cooldownPlayerDetection = 3 * SS_SEARCH_INTERVAL_TICKS;
|
||||
}
|
||||
|
@ -891,7 +898,7 @@ public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
|||
}
|
||||
}
|
||||
if (itemStack == null || slotIndex >= entityPlayer.inventory.getSizeInventory()) {
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("Please come back once you've a Crystal token."));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("Please come back once you've a Crystal token."));
|
||||
cooldownPlayerDetection = 3 * SS_SEARCH_INTERVAL_TICKS;
|
||||
return;
|
||||
}
|
||||
|
@ -901,12 +908,12 @@ public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
|||
warmupPlayerId = entityPlayer.getUniqueID();
|
||||
warmupPlayer = SS_SEARCH_WARMUP_INTERVALS + 1;
|
||||
warmupSchematicName = ItemCrystalToken.getSchematicName(itemStack);
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentString(String.format("Token '%1$s' detected!", warmupSchematicName, SS_SEARCH_WARMUP_INTERVALS))
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentString(String.format("Token '%1$s' detected!", warmupSchematicName, SS_SEARCH_WARMUP_INTERVALS))
|
||||
.setStyle(new Style().setColor(TextFormatting.GOLD)));
|
||||
}
|
||||
warmupPlayer--;
|
||||
if (warmupPlayer > 0) {
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentString(String.format("Stand by for ship materialization in %2$d...", warmupSchematicName, warmupPlayer)));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentString(String.format("Stand by for ship materialization in %2$d...", warmupSchematicName, warmupPlayer)));
|
||||
return;
|
||||
}
|
||||
// warmup done
|
||||
|
@ -916,14 +923,13 @@ public class TileEntityShipScanner extends TileEntityAbstractEnergy {
|
|||
// try deploying
|
||||
StringBuilder reason = new StringBuilder();
|
||||
deployShip(ItemCrystalToken.getSchematicName(itemStack), targetX - pos.getX(), targetY - pos.getY(), targetZ - pos.getZ(), rotationSteps, true, reason);
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentString(reason.toString()));
|
||||
if (!isActive) {
|
||||
// failed
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentString(reason.toString()).setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentString(reason.toString()).setStyle(new Style().setColor(TextFormatting.RED)));
|
||||
cooldownPlayerDetection = 5 * SS_SEARCH_INTERVAL_TICKS;
|
||||
return;
|
||||
}
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentString(reason.toString()).setStyle(new Style().setColor(TextFormatting.GOLD)));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentString(reason.toString()).setStyle(new Style().setColor(TextFormatting.GOLD)));
|
||||
|
||||
// success => remove token
|
||||
if (!entityPlayer.capabilities.isCreativeMode) {
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
package cr0s.warpdrive.block.collection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.data.EnumLaserTreeFarmMode;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
|
@ -14,12 +22,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockLaserTreeFarm extends BlockAbstractContainer {
|
||||
public static final PropertyEnum<EnumLaserTreeFarmMode> MODE = PropertyEnum.create("mode", EnumLaserTreeFarmMode.class);
|
||||
|
@ -71,7 +75,7 @@ public class BlockLaserTreeFarm extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityLaserTreeFarm) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityLaserTreeFarm)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityLaserTreeFarm)tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
package cr0s.warpdrive.block.collection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.data.EnumMiningLaserMode;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
|
@ -14,12 +22,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockMiningLaser extends BlockAbstractContainer {
|
||||
public static final PropertyEnum<EnumMiningLaserMode> MODE = PropertyEnum.create("mode", EnumMiningLaserMode.class);
|
||||
|
@ -71,7 +75,7 @@ public class BlockMiningLaser extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityMiningLaser) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityMiningLaser)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityMiningLaser)tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
package cr0s.warpdrive.block.collection;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractLaser;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -11,23 +16,18 @@ import net.minecraft.init.Blocks;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractLaser;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
public abstract class TileEntityAbstractMiner extends TileEntityAbstractLaser {
|
||||
// machine type
|
||||
protected EnumFacing laserOutputSide = EnumFacing.NORTH;
|
||||
protected EnumFacing laserOutputSide = EnumFacing.NORTH;
|
||||
|
||||
// machine state
|
||||
protected boolean enableSilktouch = false;
|
||||
protected boolean enableSilktouch = false;
|
||||
|
||||
// pre-computation
|
||||
protected Vector3 laserOutput = null;
|
||||
protected Vector3 laserOutput = null;
|
||||
|
||||
public TileEntityAbstractMiner() {
|
||||
super();
|
||||
|
|
|
@ -1,35 +1,38 @@
|
|||
package cr0s.warpdrive.block.collection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.EnumLaserTreeFarmMode;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import cr0s.warpdrive.data.EnumLaserTreeFarmMode;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import net.minecraftforge.common.IPlantable;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
||||
private boolean breakLeaves = false;
|
||||
|
@ -337,7 +340,7 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
|||
BlockPos blockPosPlant = soil.add(0, 1, 0);
|
||||
IBlockState blockStateSoil = worldObj.getBlockState(soil);
|
||||
soilIndex++;
|
||||
Collection<IInventory> inventories = getConnectedInventories(this);
|
||||
Collection<IInventory> inventories = Commons.getConnectedInventories(this);
|
||||
if (inventories == null || inventories.isEmpty()) {
|
||||
currentState = STATE_WARMUP;
|
||||
delayTargetTicks = TREE_FARM_WARMUP_DELAY_TICKS;
|
||||
|
@ -526,7 +529,7 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
|||
if (breakLeaves) {
|
||||
whitelist.addAll(Dictionary.BLOCKS_LEAVES);
|
||||
}
|
||||
logPositions = getConnectedBlocks(worldObj, logPositions, UP_DIRECTIONS, whitelist, WarpDriveConfig.TREE_FARM_MAX_LOG_DISTANCE + laserMediumCount * WarpDriveConfig.TREE_FARM_MAX_LOG_DISTANCE_PER_MEDIUM);
|
||||
logPositions = Commons.getConnectedBlocks(worldObj, logPositions, Commons.UP_DIRECTIONS, whitelist, WarpDriveConfig.TREE_FARM_MAX_LOG_DISTANCE + laserMediumCount * WarpDriveConfig.TREE_FARM_MAX_LOG_DISTANCE_PER_MEDIUM);
|
||||
}
|
||||
if (WarpDriveConfig.LOGGING_COLLECTION) {
|
||||
WarpDrive.logger.info("Found " + logPositions.size() + " valuables");
|
||||
|
@ -552,12 +555,12 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
|||
if (radiusX == 0) {
|
||||
radiusX = 1;
|
||||
}
|
||||
radiusX = clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, radiusX);
|
||||
radiusX = Commons.clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, radiusX);
|
||||
radiusZ = tag.getInteger("radiusZ");
|
||||
if (radiusZ == 0) {
|
||||
radiusZ = 1;
|
||||
}
|
||||
radiusZ = clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, radiusZ);
|
||||
radiusZ = Commons.clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, radiusZ);
|
||||
|
||||
breakLeaves = tag.getBoolean("breakLeaves");
|
||||
tapTrees = tag.getBoolean("tapTrees");
|
||||
|
@ -640,12 +643,12 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
|||
private Object[] radius(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1) {
|
||||
radiusX = clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, toInt(arguments[0]));
|
||||
radiusX = Commons.clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, Commons.toInt(arguments[0]));
|
||||
radiusZ = radiusX;
|
||||
markDirty();
|
||||
} else if (arguments.length == 2) {
|
||||
radiusX = clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, toInt(arguments[0]));
|
||||
radiusZ = clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, toInt(arguments[1]));
|
||||
radiusX = Commons.clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, Commons.toInt(arguments[0]));
|
||||
radiusZ = Commons.clamp(1, WarpDriveConfig.TREE_FARM_totalMaxRadius, Commons.toInt(arguments[1]));
|
||||
markDirty();
|
||||
}
|
||||
} catch(NumberFormatException exception) {
|
||||
|
@ -658,7 +661,7 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
|||
private Object[] breakLeaves(Object[] arguments) {
|
||||
if (arguments.length == 1) {
|
||||
try {
|
||||
breakLeaves = toBool(arguments[0]);
|
||||
breakLeaves = Commons.toBool(arguments[0]);
|
||||
markDirty();
|
||||
} catch (Exception exception) {
|
||||
return new Object[] { breakLeaves };
|
||||
|
@ -670,7 +673,7 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
|||
private Object[] silktouch(Object[] arguments) {
|
||||
if (arguments.length == 1) {
|
||||
try {
|
||||
enableSilktouch = toBool(arguments[0]);
|
||||
enableSilktouch = Commons.toBool(arguments[0]);
|
||||
markDirty();
|
||||
} catch (Exception exception) {
|
||||
return new Object[] { enableSilktouch };
|
||||
|
@ -682,7 +685,7 @@ public class TileEntityLaserTreeFarm extends TileEntityAbstractMiner {
|
|||
private Object[] tapTrees(Object[] arguments) {
|
||||
if (arguments.length == 1) {
|
||||
try {
|
||||
tapTrees = toBool(arguments[0]);
|
||||
tapTrees = Commons.toBool(arguments[0]);
|
||||
markDirty();
|
||||
} catch (Exception exception) {
|
||||
return new Object[] { tapTrees };
|
||||
|
|
|
@ -1,13 +1,22 @@
|
|||
package cr0s.warpdrive.block.collection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.EnumMiningLaserMode;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import cr0s.warpdrive.data.EnumMiningLaserMode;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
@ -16,15 +25,9 @@ import net.minecraft.util.SoundCategory;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
||||
private final boolean canSilktouch = (WarpDriveConfig.MINING_LASER_SILKTOUCH_DEUTERIUM_L <= 0 || FluidRegistry.isFluidRegistered("deuterium"));
|
||||
|
@ -90,7 +93,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
|||
return;
|
||||
}
|
||||
|
||||
boolean isOnEarth = isOnPlanet();
|
||||
boolean isOnPlanet = WarpDrive.starMap.hasAtmosphere(worldObj, pos.getX(), pos.getZ());
|
||||
|
||||
delayTicks--;
|
||||
if (currentState == STATE_WARMUP) {
|
||||
|
@ -105,7 +108,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
|||
} else if (currentState == STATE_SCANNING) {
|
||||
if (delayTicks == WarpDriveConfig.MINING_LASER_SCAN_DELAY_TICKS - 1) {
|
||||
// check power level
|
||||
enoughPower = consumeEnergyFromLaserMediums(isOnEarth ? WarpDriveConfig.MINING_LASER_PLANET_ENERGY_PER_LAYER : WarpDriveConfig.MINING_LASER_SPACE_ENERGY_PER_LAYER, true);
|
||||
enoughPower = consumeEnergyFromLaserMediums(isOnPlanet ? WarpDriveConfig.MINING_LASER_PLANET_ENERGY_PER_LAYER : WarpDriveConfig.MINING_LASER_SPACE_ENERGY_PER_LAYER, true);
|
||||
if (!enoughPower) {
|
||||
updateBlockState(blockState, BlockMiningLaser.MODE, EnumMiningLaserMode.SCANNING_LOW_POWER);
|
||||
delayTicks = WarpDriveConfig.MINING_LASER_WARMUP_DELAY_TICKS;
|
||||
|
@ -134,7 +137,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
|||
}
|
||||
|
||||
// consume power
|
||||
enoughPower = consumeEnergyFromLaserMediums(isOnEarth ? WarpDriveConfig.MINING_LASER_PLANET_ENERGY_PER_LAYER : WarpDriveConfig.MINING_LASER_SPACE_ENERGY_PER_LAYER, false);
|
||||
enoughPower = consumeEnergyFromLaserMediums(isOnPlanet ? WarpDriveConfig.MINING_LASER_PLANET_ENERGY_PER_LAYER : WarpDriveConfig.MINING_LASER_SPACE_ENERGY_PER_LAYER, false);
|
||||
if (!enoughPower) {
|
||||
updateBlockState(blockState, BlockMiningLaser.MODE, EnumMiningLaserMode.SCANNING_LOW_POWER);
|
||||
delayTicks = WarpDriveConfig.MINING_LASER_WARMUP_DELAY_TICKS;
|
||||
|
@ -187,7 +190,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
|||
}
|
||||
|
||||
// consume power
|
||||
int requiredPower = isOnEarth ? WarpDriveConfig.MINING_LASER_PLANET_ENERGY_PER_BLOCK : WarpDriveConfig.MINING_LASER_SPACE_ENERGY_PER_BLOCK;
|
||||
int requiredPower = isOnPlanet ? WarpDriveConfig.MINING_LASER_PLANET_ENERGY_PER_BLOCK : WarpDriveConfig.MINING_LASER_SPACE_ENERGY_PER_BLOCK;
|
||||
if (!mineAllBlocks) {
|
||||
requiredPower *= WarpDriveConfig.MINING_LASER_ORESONLY_ENERGY_FACTOR;
|
||||
}
|
||||
|
@ -456,7 +459,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
|||
private Object[] onlyOres(Object[] arguments) {
|
||||
if (arguments.length == 1) {
|
||||
try {
|
||||
mineAllBlocks = ! toBool(arguments[0]);
|
||||
mineAllBlocks = ! Commons.toBool(arguments[0]);
|
||||
markDirty();
|
||||
if (WarpDriveConfig.LOGGING_LUA) {
|
||||
WarpDrive.logger.info(this + " onlyOres set to " + !mineAllBlocks);
|
||||
|
@ -471,7 +474,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
|||
private Object[] offset(Object[] arguments) {
|
||||
if (arguments.length == 1) {
|
||||
try {
|
||||
layerOffset = Math.min(256, Math.abs(toInt(arguments[0])));
|
||||
layerOffset = Math.min(256, Math.abs(Commons.toInt(arguments[0])));
|
||||
markDirty();
|
||||
if (WarpDriveConfig.LOGGING_LUA) {
|
||||
WarpDrive.logger.info(this + " offset set to " + layerOffset);
|
||||
|
@ -486,7 +489,7 @@ public class TileEntityMiningLaser extends TileEntityAbstractMiner {
|
|||
private Object[] silktouch(Object[] arguments) {
|
||||
if (arguments.length == 1) {
|
||||
try {
|
||||
enableSilktouch = toBool(arguments[0]);
|
||||
enableSilktouch = Commons.toBool(arguments[0]);
|
||||
markDirty();
|
||||
if (WarpDriveConfig.LOGGING_LUA) {
|
||||
WarpDrive.logger.info(this + " silktouch set to " + enableSilktouch);
|
||||
|
|
|
@ -10,7 +10,9 @@ import net.minecraft.block.properties.IProperty;
|
|||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.Mirror;
|
||||
import net.minecraft.util.Rotation;
|
||||
|
@ -67,6 +69,11 @@ public class BlockAbstractLamp extends BlockAbstractBase {
|
|||
return blockState.getValue(BlockProperties.FACING).getIndex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.COMMON;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void modelInitialisation() {
|
||||
|
|
|
@ -9,6 +9,7 @@ import net.minecraft.block.properties.PropertyEnum;
|
|||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -49,6 +50,11 @@ public class BlockDecorative extends BlockAbstractBase {
|
|||
return blockState.getValue(TYPE).ordinal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.COMMON;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ItemBlock createItemBlock() {
|
||||
|
|
|
@ -3,6 +3,7 @@ package cr0s.warpdrive.block.decoration;
|
|||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import cr0s.warpdrive.data.EnumGasColor;
|
||||
import net.minecraft.block.material.EnumPushReaction;
|
||||
|
@ -11,6 +12,7 @@ import net.minecraft.block.properties.PropertyEnum;
|
|||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -25,6 +27,7 @@ import javax.annotation.Nonnull;
|
|||
import javax.annotation.Nullable;
|
||||
|
||||
public class BlockGas extends BlockAbstractBase {
|
||||
|
||||
public static final PropertyEnum<EnumGasColor> COLOR = PropertyEnum.create("color", EnumGasColor.class);
|
||||
|
||||
public BlockGas(final String registryName) {
|
||||
|
@ -54,6 +57,11 @@ public class BlockGas extends BlockAbstractBase {
|
|||
return blockState.getValue(COLOR).ordinal();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.COMMON;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ItemBlock createItemBlock() {
|
||||
|
@ -153,7 +161,7 @@ public class BlockGas extends BlockAbstractBase {
|
|||
@Override
|
||||
public void onBlockAdded(World world, BlockPos blockPos, IBlockState blockState) {
|
||||
// Gas blocks allow only in space
|
||||
if (world.provider.getDimension() != WarpDriveConfig.G_SPACE_DIMENSION_ID) {
|
||||
if (WarpDrive.starMap.hasAtmosphere(world, blockPos.getX(), blockPos.getZ())) {
|
||||
world.setBlockToAir(blockPos);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
|
@ -11,12 +17,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockCamera extends BlockAbstractContainer {
|
||||
|
||||
|
@ -46,7 +48,7 @@ public class BlockCamera extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityCamera) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityCamera)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityCamera)tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,22 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyBool;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class BlockCloakingCoil extends BlockAbstractBase {
|
||||
|
||||
public static final PropertyBool OUTER = PropertyBool.create("outer");
|
||||
|
@ -44,6 +47,8 @@ public class BlockCloakingCoil extends BlockAbstractBase {
|
|||
.withProperty(BlockProperties.FACING, isOuter ? EnumFacing.getFront(metadata & 7 - 1) : EnumFacing.UP);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Nonnull
|
||||
@Override
|
||||
public int getMetaFromState(IBlockState blockState) {
|
||||
if (!blockState.getValue(BlockProperties.ACTIVE)) {
|
||||
|
@ -67,7 +72,7 @@ public class BlockCloakingCoil extends BlockAbstractBase {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(Random par1Random) {
|
||||
return 1;
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.COMMON;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
|
@ -15,12 +23,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockCloakingCore extends BlockAbstractContainer {
|
||||
|
||||
|
@ -75,14 +79,14 @@ public class BlockCloakingCore extends BlockAbstractContainer {
|
|||
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityCloakingCore) {
|
||||
TileEntityCloakingCore cloakingCore = (TileEntityCloakingCore)tileEntity;
|
||||
TileEntityCloakingCore cloakingCore = (TileEntityCloakingCore) tileEntity;
|
||||
if (itemStackHeld == null) {
|
||||
WarpDrive.addChatMessage(entityPlayer, cloakingCore.getStatus());
|
||||
Commons.addChatMessage(entityPlayer, cloakingCore.getStatus());
|
||||
// + " isInvalid? " + te.isInvalid() + " Valid? " + te.isValid + " Cloaking? " + te.isCloaking + " Enabled? " + te.isEnabled
|
||||
return true;
|
||||
} else if (itemStackHeld.getItem() == Item.getItemFromBlock(Blocks.REDSTONE_TORCH)) {
|
||||
cloakingCore.isEnabled = !cloakingCore.isEnabled;
|
||||
WarpDrive.addChatMessage(entityPlayer, cloakingCore.getStatus());
|
||||
Commons.addChatMessage(entityPlayer, cloakingCore.getStatus());
|
||||
return true;
|
||||
// } else if (xxx) {// TODO if player has advanced tool
|
||||
// WarpDrive.addChatMessage(entityPlayer, cloakingCore.getStatus() + "\n" + cloakingCore.getEnergyStatus());
|
||||
|
@ -98,8 +102,8 @@ public class BlockCloakingCore extends BlockAbstractContainer {
|
|||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
|
||||
if (tileEntity != null && tileEntity instanceof TileEntityCloakingCore) {
|
||||
((TileEntityCloakingCore)tileEntity).isEnabled = false;
|
||||
((TileEntityCloakingCore)tileEntity).disableCloakingField();
|
||||
((TileEntityCloakingCore) tileEntity).isEnabled = false;
|
||||
((TileEntityCloakingCore) tileEntity).disableCloakingField();
|
||||
}
|
||||
|
||||
super.breakBlock(world, blockPos, blockState);
|
||||
|
|
|
@ -1,6 +1,14 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractRotatingContainer;
|
||||
import cr0s.warpdrive.data.CameraRegistryItem;
|
||||
import cr0s.warpdrive.render.ClientCameraHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
@ -12,15 +20,8 @@ import net.minecraft.util.math.BlockPos;
|
|||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import cr0s.warpdrive.data.CameraRegistryItem;
|
||||
import cr0s.warpdrive.render.ClientCameraHandler;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class BlockMonitor extends BlockAbstractRotatingContainer {
|
||||
|
||||
public BlockMonitor(final String registryName) {
|
||||
|
@ -49,10 +50,10 @@ public class BlockMonitor extends BlockAbstractRotatingContainer {
|
|||
int videoChannel = ((TileEntityMonitor)tileEntity).getVideoChannel();
|
||||
CameraRegistryItem camera = WarpDrive.cameras.getCameraByVideoChannel(world, videoChannel);
|
||||
if (camera == null || entityPlayer.isSneaking()) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityMonitor)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityMonitor)tileEntity).getStatus());
|
||||
return true;
|
||||
} else {
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.monitor.viewingCamera",
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.monitor.viewingCamera",
|
||||
videoChannel,
|
||||
camera.position.getX(),
|
||||
camera.position.getY(),
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.data.EnumRadarMode;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
|
@ -14,12 +22,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockRadar extends BlockAbstractContainer {
|
||||
public static final PropertyEnum<EnumRadarMode> MODE = PropertyEnum.create("mode", EnumRadarMode.class);
|
||||
|
@ -76,7 +80,7 @@ public class BlockRadar extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityRadar) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityRadar)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityRadar) tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,14 +2,15 @@ package cr0s.warpdrive.block.detection;
|
|||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class BlockSiren extends BlockAbstractContainer {
|
||||
|
||||
public static final int METADATA_TYPE_INDUSTRIAL = 0;
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class BlockWarpIsolation extends BlockAbstractBase {
|
||||
|
||||
|
@ -18,4 +20,9 @@ public class BlockWarpIsolation extends BlockAbstractBase {
|
|||
public int quantityDropped(Random par1Random) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.UNCOMMON;
|
||||
}
|
||||
}
|
|
@ -1,14 +1,6 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IVideoChannel;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractInterfaced;
|
||||
|
@ -18,9 +10,20 @@ import cr0s.warpdrive.data.EnumCameraType;
|
|||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityCamera extends TileEntityAbstractInterfaced implements IVideoChannel {
|
||||
private int videoChannel = -1;
|
||||
|
||||
|
@ -83,18 +86,18 @@ public class TileEntityCamera extends TileEntityAbstractInterfaced implements IV
|
|||
|
||||
private ITextComponent getVideoChannelStatus() {
|
||||
if (videoChannel == -1) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.undefined");
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.undefined");
|
||||
} else if (videoChannel < 0) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.invalid", videoChannel);
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.invalid", videoChannel);
|
||||
} else {
|
||||
CameraRegistryItem camera = WarpDrive.cameras.getCameraByVideoChannel(worldObj, videoChannel);
|
||||
if (camera == null) {
|
||||
WarpDrive.cameras.printRegistry(worldObj);
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.invalid", videoChannel);
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.invalid", videoChannel);
|
||||
} else if (camera.isTileEntity(this)) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.valid", videoChannel);
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.valid", videoChannel);
|
||||
} else {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.validCamera",
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.validCamera",
|
||||
videoChannel,
|
||||
camera.position.getX(),
|
||||
camera.position.getY(),
|
||||
|
@ -130,7 +133,7 @@ public class TileEntityCamera extends TileEntityAbstractInterfaced implements IV
|
|||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
super.readFromNBT(tag);
|
||||
videoChannel = tag.getInteger("frequency") + tag.getInteger("videoChannel");
|
||||
videoChannel = tag.getInteger("frequency") + tag.getInteger(VIDEO_CHANNEL_TAG);
|
||||
if (WarpDriveConfig.LOGGING_VIDEO_CHANNEL) {
|
||||
WarpDrive.logger.info(this + " readFromNBT");
|
||||
}
|
||||
|
@ -139,7 +142,7 @@ public class TileEntityCamera extends TileEntityAbstractInterfaced implements IV
|
|||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
tag = super.writeToNBT(tag);
|
||||
tag.setInteger("videoChannel", videoChannel);
|
||||
tag.setInteger(VIDEO_CHANNEL_TAG, videoChannel);
|
||||
if (WarpDriveConfig.LOGGING_VIDEO_CHANNEL) {
|
||||
WarpDrive.logger.info(this + " writeToNBT");
|
||||
}
|
||||
|
@ -178,7 +181,7 @@ public class TileEntityCamera extends TileEntityAbstractInterfaced implements IV
|
|||
|
||||
if (methodName.equals("videoChannel")) {
|
||||
if (arguments.length == 1) {
|
||||
setVideoChannel(toInt(arguments[0]));
|
||||
setVideoChannel(Commons.toInt(arguments[0]));
|
||||
}
|
||||
return new Integer[] { videoChannel };
|
||||
}
|
||||
|
|
|
@ -1,32 +1,38 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
import cr0s.warpdrive.data.CloakedArea;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.CloakedArea;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
public class TileEntityCloakingCore extends TileEntityAbstractEnergy {
|
||||
|
||||
private static final int CLOAKING_CORE_SOUND_UPDATE_TICKS = 40;
|
||||
|
||||
public boolean isEnabled = false;
|
||||
public byte tier = 1; // cloaking field tier, 1 or 2
|
||||
|
||||
|
@ -74,9 +80,9 @@ public class TileEntityCloakingCore extends TileEntityAbstractEnergy {
|
|||
}
|
||||
|
||||
// Reset sound timer
|
||||
soundTicks++;
|
||||
if (soundTicks >= 40) {
|
||||
soundTicks = 0;
|
||||
soundTicks--;
|
||||
if (soundTicks < 0) {
|
||||
soundTicks = CLOAKING_CORE_SOUND_UPDATE_TICKS;
|
||||
soundPlayed = false;
|
||||
}
|
||||
|
||||
|
@ -425,7 +431,7 @@ public class TileEntityCloakingCore extends TileEntityAbstractEnergy {
|
|||
switch (methodName) {
|
||||
case "tier":
|
||||
if (arguments.length == 1) {
|
||||
if (toInt(arguments[0]) == 2) {
|
||||
if (Commons.toInt(arguments[0]) == 2) {
|
||||
tier = 2;
|
||||
} else {
|
||||
tier = 1;
|
||||
|
@ -439,7 +445,7 @@ public class TileEntityCloakingCore extends TileEntityAbstractEnergy {
|
|||
|
||||
case "enable":
|
||||
if (arguments.length == 1) {
|
||||
isEnabled = toBool(arguments[0]);
|
||||
isEnabled = Commons.toBool(arguments[0]);
|
||||
markDirty();
|
||||
}
|
||||
return new Object[] { isEnabled };
|
||||
|
|
|
@ -1,14 +1,6 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IVideoChannel;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractInterfaced;
|
||||
|
@ -17,9 +9,20 @@ import cr0s.warpdrive.data.CameraRegistryItem;
|
|||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityMonitor extends TileEntityAbstractInterfaced implements IVideoChannel {
|
||||
private int videoChannel = -1;
|
||||
|
||||
|
@ -68,17 +71,17 @@ public class TileEntityMonitor extends TileEntityAbstractInterfaced implements I
|
|||
|
||||
private ITextComponent getVideoChannelStatus() {
|
||||
if (videoChannel == -1) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.undefined");
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.undefined");
|
||||
} else if (videoChannel < 0) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.invalid", videoChannel);
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.invalid", videoChannel);
|
||||
} else {
|
||||
CameraRegistryItem camera = WarpDrive.cameras.getCameraByVideoChannel(worldObj, videoChannel);
|
||||
if (camera == null) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.invalidOrNotLoaded", videoChannel);
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.invalidOrNotLoaded", videoChannel);
|
||||
} else if (camera.isTileEntity(this)) {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.valid", videoChannel);
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.valid", videoChannel);
|
||||
} else {
|
||||
return new TextComponentTranslation("warpdrive.videoChannel.statusLine.validCamera",
|
||||
return new TextComponentTranslation("warpdrive.video_channel.statusLine.validCamera",
|
||||
videoChannel,
|
||||
camera.position.getX(),
|
||||
camera.position.getY(),
|
||||
|
@ -96,13 +99,13 @@ public class TileEntityMonitor extends TileEntityAbstractInterfaced implements I
|
|||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
super.readFromNBT(tag);
|
||||
videoChannel = tag.getInteger("frequency") + tag.getInteger("videoChannel");
|
||||
videoChannel = tag.getInteger("frequency") + tag.getInteger(VIDEO_CHANNEL_TAG);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
tag = super.writeToNBT(tag);
|
||||
tag.setInteger("videoChannel", videoChannel);
|
||||
tag.setInteger(VIDEO_CHANNEL_TAG, videoChannel);
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
@ -138,7 +141,7 @@ public class TileEntityMonitor extends TileEntityAbstractInterfaced implements I
|
|||
|
||||
if (methodName.equals("videoChannel")) {
|
||||
if (arguments.length == 1) {
|
||||
setVideoChannel(toInt(arguments[0]));
|
||||
setVideoChannel(Commons.toInt(arguments[0]));
|
||||
}
|
||||
return new Integer[] { videoChannel };
|
||||
}
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import cr0s.warpdrive.data.EnumRadarMode;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.EnumRadarMode;
|
||||
import cr0s.warpdrive.data.StarMapRegistryItem;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityRadar extends TileEntityAbstractEnergy {
|
||||
private ArrayList<StarMapRegistryItem> results;
|
||||
|
@ -139,11 +142,11 @@ public class TileEntityRadar extends TileEntityAbstractEnergy {
|
|||
if (arguments.length == 1 && getBlockMetadata() != 2) {
|
||||
int newRadius;
|
||||
try {
|
||||
newRadius = toInt(arguments[0]);
|
||||
newRadius = Commons.toInt(arguments[0]);
|
||||
} catch(Exception exception) {
|
||||
return new Integer[] { radius };
|
||||
}
|
||||
radius = clamp(0, 10000, newRadius);
|
||||
radius = Commons.clamp(0, 10000, newRadius);
|
||||
}
|
||||
return new Integer[] { radius };
|
||||
}
|
||||
|
@ -151,7 +154,7 @@ public class TileEntityRadar extends TileEntityAbstractEnergy {
|
|||
private Object[] getEnergyRequired(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1) {
|
||||
return new Object[] { calculateEnergyRequired(toInt(arguments[0])) };
|
||||
return new Object[] { calculateEnergyRequired(Commons.toInt(arguments[0])) };
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { -1 };
|
||||
|
@ -162,7 +165,7 @@ public class TileEntityRadar extends TileEntityAbstractEnergy {
|
|||
private Object[] getScanDuration(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1) {
|
||||
return new Object[] { 0.050D * calculateScanDuration(toInt(arguments[0])) };
|
||||
return new Object[] { 0.050D * calculateScanDuration(Commons.toInt(arguments[0])) };
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { -1 };
|
||||
|
@ -199,7 +202,7 @@ public class TileEntityRadar extends TileEntityAbstractEnergy {
|
|||
if (arguments.length == 1 && (results != null)) {
|
||||
int index;
|
||||
try {
|
||||
index = toInt(arguments[0]);
|
||||
index = Commons.toInt(arguments[0]);
|
||||
} catch(Exception exception) {
|
||||
return new Object[] { false, COMPUTER_ERROR_TAG, null, 0, 0, 0 };
|
||||
}
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
package cr0s.warpdrive.block.detection;
|
||||
|
||||
import cr0s.warpdrive.SirenSound;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractBase;
|
||||
import cr0s.warpdrive.client.SirenSound;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class TileEntitySiren extends TileEntityAbstractBase {
|
||||
public enum SirenState {
|
||||
STARTING, STARTED, STOPPING, STOPPED
|
||||
|
|
|
@ -2,6 +2,7 @@ package cr0s.warpdrive.block.energy;
|
|||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
|
|
|
@ -2,6 +2,7 @@ package cr0s.warpdrive.block.energy;
|
|||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
|
|
@ -1,10 +1,21 @@
|
|||
package cr0s.warpdrive.block.energy;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IWarpTool;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.EnumComponentType;
|
||||
import cr0s.warpdrive.item.ItemComponent;
|
||||
import cr0s.warpdrive.item.ItemTuningFork;
|
||||
import ic2.api.energy.tile.IExplosionPowerOverride;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
|
@ -14,22 +25,20 @@ import net.minecraft.item.ItemStack;
|
|||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class BlockEnergyBank extends BlockAbstractContainer {
|
||||
@Optional.InterfaceList({
|
||||
@Optional.Interface(iface = "ic2.api.energy.tile.IExplosionPowerOverride", modid = "IC2")
|
||||
})
|
||||
public class BlockEnergyBank extends BlockAbstractContainer implements IExplosionPowerOverride {
|
||||
|
||||
public BlockEnergyBank(final String registryName) {
|
||||
super(registryName, Material.IRON);
|
||||
|
@ -78,6 +87,16 @@ public class BlockEnergyBank extends BlockAbstractContainer {
|
|||
return (byte) itemStack.getItemDamage();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldExplode() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getExplosionPower(int tier, float defaultPower) {
|
||||
return defaultPower;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState blockState, EntityPlayer entityPlayer, EnumHand hand, @Nullable ItemStack itemStackHeld, EnumFacing facing, float hitX, float hitY, float hitZ) {
|
||||
|
@ -91,7 +110,7 @@ public class BlockEnergyBank extends BlockAbstractContainer {
|
|||
}
|
||||
TileEntityEnergyBank tileEntityEnergyBank = (TileEntityEnergyBank) tileEntity;
|
||||
|
||||
if (itemStackHeld != null && itemStackHeld.getItem() instanceof ItemTuningFork) {
|
||||
if (itemStackHeld != null && itemStackHeld.getItem() instanceof IWarpTool) {
|
||||
if (entityPlayer.isSneaking()) {
|
||||
tileEntityEnergyBank.setMode(facing, (byte)((tileEntityEnergyBank.getMode(facing) + 2) % 3));
|
||||
} else {
|
||||
|
@ -100,18 +119,18 @@ public class BlockEnergyBank extends BlockAbstractContainer {
|
|||
ItemStack itemStack = new ItemStack(Item.getItemFromBlock(this), 1, getMetaFromState(blockState));
|
||||
switch (tileEntityEnergyBank.getMode(facing)) {
|
||||
case TileEntityEnergyBank.MODE_INPUT:
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix", getLocalizedName())
|
||||
.appendSibling(new TextComponentTranslation(itemStack.getUnlocalizedName() + ".name"))
|
||||
.appendSibling(new TextComponentTranslation("warpdrive.energy.side.changedToInput", facing.name())) );
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix")
|
||||
.appendSibling(new TextComponentTranslation(itemStack.getUnlocalizedName() + ".name"))
|
||||
.appendSibling(new TextComponentTranslation("warpdrive.energy.side.changedToInput", facing.name())) );
|
||||
return true;
|
||||
case TileEntityEnergyBank.MODE_OUTPUT:
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix", getLocalizedName())
|
||||
.appendSibling(new TextComponentTranslation(itemStack.getUnlocalizedName() + ".name"))
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix")
|
||||
.appendSibling(new TextComponentTranslation(itemStack.getUnlocalizedName() + ".name"))
|
||||
.appendSibling(new TextComponentTranslation("warpdrive.energy.side.changedToOutput", facing.name())) );
|
||||
return true;
|
||||
case TileEntityEnergyBank.MODE_DISABLED:
|
||||
default:
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix", getLocalizedName())
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix")
|
||||
.appendSibling(new TextComponentTranslation(itemStack.getUnlocalizedName() + ".name"))
|
||||
.appendSibling(new TextComponentTranslation("warpdrive.energy.side.changedToDisabled", facing.name())) );
|
||||
return true;
|
||||
|
@ -134,7 +153,7 @@ public class BlockEnergyBank extends BlockAbstractContainer {
|
|||
|
||||
if (enumComponentType == null) {
|
||||
// no more upgrades to dismount
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noUpgradeToDismount"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noUpgradeToDismount"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -148,25 +167,25 @@ public class BlockEnergyBank extends BlockAbstractContainer {
|
|||
|
||||
tileEntityEnergyBank.dismountUpgrade(enumComponentType);
|
||||
// upgrade dismounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.dismounted", enumComponentType.name()));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.dismounted", enumComponentType.name()));
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
} else if (itemStackHeld == null) {// no sneaking and no item in hand => show status
|
||||
WarpDrive.addChatMessage(entityPlayer, tileEntityEnergyBank.getStatus());
|
||||
Commons.addChatMessage(entityPlayer, tileEntityEnergyBank.getStatus());
|
||||
return true;
|
||||
|
||||
} else if (enumComponentType != null) {// no sneaking and an upgrade in hand => mounting an upgrade
|
||||
// validate type
|
||||
if (tileEntityEnergyBank.getUpgradeMaxCount(enumComponentType) <= 0) {
|
||||
// invalid upgrade type
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.invalidUpgrade"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.invalidUpgrade"));
|
||||
return true;
|
||||
}
|
||||
if (!tileEntityEnergyBank.canUpgrade(enumComponentType)) {
|
||||
// too many upgrades
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.tooManyUpgrades",
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.tooManyUpgrades",
|
||||
tileEntityEnergyBank.getUpgradeMaxCount(enumComponentType)));
|
||||
return true;
|
||||
}
|
||||
|
@ -175,7 +194,7 @@ public class BlockEnergyBank extends BlockAbstractContainer {
|
|||
// validate quantity
|
||||
if (itemStackHeld.stackSize < 1) {
|
||||
// not enough upgrade items
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.notEnoughUpgrades"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.notEnoughUpgrades"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -186,7 +205,7 @@ public class BlockEnergyBank extends BlockAbstractContainer {
|
|||
// mount the new upgrade item
|
||||
tileEntityEnergyBank.mountUpgrade(enumComponentType);
|
||||
// upgrade mounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.mounted", enumComponentType.name()));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.mounted", enumComponentType.name()));
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package cr0s.warpdrive.block.energy;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
|
@ -9,8 +13,7 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
@ -39,7 +42,7 @@ public class BlockIC2reactorLaserMonitor extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityIC2reactorLaserMonitor) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityIC2reactorLaserMonitor) tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityIC2reactorLaserMonitor) tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,17 @@
|
|||
package cr0s.warpdrive.block.energy;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
@ -12,11 +19,6 @@ import net.minecraft.tileentity.TileEntity;
|
|||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
public class TileEntityEnanReactorCore extends TileEntityAbstractEnergy {
|
||||
private int containedEnergy = 0;
|
||||
|
@ -313,7 +315,7 @@ public class TileEntityEnanReactorCore extends TileEntityAbstractEnergy {
|
|||
if (arguments.length == 1) {
|
||||
boolean activate;
|
||||
try {
|
||||
activate = toBool(arguments[0]);
|
||||
activate = Commons.toBool(arguments[0]);
|
||||
} catch (Exception exception) {
|
||||
throw new Exception("Function expects a boolean value");
|
||||
}
|
||||
|
@ -343,7 +345,7 @@ public class TileEntityEnanReactorCore extends TileEntityAbstractEnergy {
|
|||
boolean doRelease;
|
||||
if (arguments.length > 0) {
|
||||
try {
|
||||
doRelease = toBool(arguments[0]);
|
||||
doRelease = Commons.toBool(arguments[0]);
|
||||
} catch (Exception exception) {
|
||||
throw new Exception("Function expects a boolean value");
|
||||
}
|
||||
|
@ -364,7 +366,7 @@ public class TileEntityEnanReactorCore extends TileEntityAbstractEnergy {
|
|||
private Object[] releaseRate(Object[] arguments) throws Exception {
|
||||
int rate;
|
||||
try {
|
||||
rate = toInt(arguments[0]);
|
||||
rate = Commons.toInt(arguments[0]);
|
||||
} catch (Exception exception) {
|
||||
throw new Exception("Function expects an integer value");
|
||||
}
|
||||
|
@ -390,7 +392,7 @@ public class TileEntityEnanReactorCore extends TileEntityAbstractEnergy {
|
|||
private Object[] releaseAbove(Object[] arguments) throws Exception {
|
||||
int above;
|
||||
try {
|
||||
above = toInt(arguments[0]);
|
||||
above = Commons.toInt(arguments[0]);
|
||||
} catch (Exception exception) {
|
||||
throw new Exception("Function expects an integer value");
|
||||
}
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
package cr0s.warpdrive.block.energy;
|
||||
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractLaser;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
|
@ -14,6 +8,15 @@ import cr0s.warpdrive.data.Vector3;
|
|||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityEnanReactorLaser extends TileEntityAbstractLaser {
|
||||
Vector3 myVec;
|
||||
|
@ -175,7 +178,7 @@ public class TileEntityEnanReactorLaser extends TileEntityAbstractLaser {
|
|||
|
||||
case "stabilize":
|
||||
if (arguments.length >= 1) {
|
||||
stabilize(toInt(arguments[0]));
|
||||
stabilize(Commons.toInt(arguments[0]));
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -1,17 +1,19 @@
|
|||
package cr0s.warpdrive.block.energy;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.EnumComponentType;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class TileEntityEnergyBank extends TileEntityAbstractEnergy {
|
||||
|
||||
static final byte MODE_DISABLED = 0;
|
||||
|
@ -48,7 +50,7 @@ public class TileEntityEnergyBank extends TileEntityAbstractEnergy {
|
|||
}
|
||||
|
||||
private double getEfficiency() {
|
||||
int upgradeCount = clamp(0, getUpgradeMaxCount(EnumComponentType.SUPERCONDUCTOR), getUpgradeCount(EnumComponentType.SUPERCONDUCTOR));
|
||||
int upgradeCount = Commons.clamp(0, getUpgradeMaxCount(EnumComponentType.SUPERCONDUCTOR), getUpgradeCount(EnumComponentType.SUPERCONDUCTOR));
|
||||
return WarpDriveConfig.ENERGY_BANK_EFFICIENCY_PER_UPGRADE[upgradeCount];
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
package cr0s.warpdrive.block.energy;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.item.ItemIC2reactorLaserFocus;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import ic2.api.reactor.IReactor;
|
||||
import ic2.api.reactor.IReactorChamber;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -16,14 +23,6 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.item.ItemIC2reactorLaserFocus;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class TileEntityIC2reactorLaserMonitor extends TileEntityAbstractEnergy {
|
||||
private int ticks = WarpDriveConfig.IC2_REACTOR_COOLING_INTERVAL_TICKS;
|
||||
|
|
|
@ -2,6 +2,7 @@ package cr0s.warpdrive.block.forcefield;
|
|||
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
|
||||
import net.minecraft.block.material.EnumPushReaction;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
|
|
@ -1,48 +1,51 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import cr0s.warpdrive.data.EnumPermissionNode;
|
||||
import cr0s.warpdrive.data.ForceFieldSetup;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.material.MapColor;
|
||||
import net.minecraft.block.properties.PropertyInteger;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.MobEffects;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.util.EnumBlockRenderType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IDamageReceiver;
|
||||
import cr0s.warpdrive.block.hull.BlockHullGlass;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.EnumPermissionNode;
|
||||
import cr0s.warpdrive.data.ForceFieldSetup;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.BlockGlass;
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.material.MapColor;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyInteger;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.MobEffects;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumBlockRenderType;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.world.Explosion;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class BlockForceField extends BlockAbstractForceField implements IDamageReceiver {
|
||||
private static final float BOUNDING_TOLERANCE = 0.05F;
|
||||
|
|
|
@ -1,21 +1,44 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import cr0s.warpdrive.client.ClientProxy;
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
import cr0s.warpdrive.data.EnumForceFieldShape;
|
||||
import cr0s.warpdrive.data.EnumForceFieldState;
|
||||
import cr0s.warpdrive.data.EnumForceFieldUpgrade;
|
||||
import cr0s.warpdrive.item.ItemForceFieldShape;
|
||||
import cr0s.warpdrive.item.ItemForceFieldUpgrade;
|
||||
import cr0s.warpdrive.render.TileEntityForceFieldProjectorRenderer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.IProperty;
|
||||
import net.minecraft.block.properties.PropertyBool;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraftforge.common.property.ExtendedBlockState;
|
||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||
import net.minecraftforge.common.property.IUnlistedProperty;
|
||||
|
@ -24,25 +47,6 @@ import net.minecraftforge.fml.client.registry.ClientRegistry;
|
|||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.data.EnumForceFieldShape;
|
||||
import cr0s.warpdrive.data.EnumForceFieldUpgrade;
|
||||
import cr0s.warpdrive.item.ItemForceFieldShape;
|
||||
import cr0s.warpdrive.item.ItemForceFieldUpgrade;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
public class BlockForceFieldProjector extends BlockAbstractForceField {
|
||||
|
||||
|
@ -184,6 +188,7 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void getSubBlocks(@Nonnull Item item, CreativeTabs creativeTab, List<ItemStack> list) {
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
list.add(new ItemStack(item, 1, i));
|
||||
|
@ -234,7 +239,7 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
|
||||
if (enumForceFieldUpgrade == EnumForceFieldUpgrade.NONE) {
|
||||
// no more upgrades to dismount
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noUpgradeToDismount"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noUpgradeToDismount"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -248,7 +253,7 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
|
||||
tileEntityForceFieldProjector.dismountUpgrade(enumForceFieldUpgrade);
|
||||
// upgrade dismounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.dismounted", enumForceFieldUpgrade.name()));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.dismounted", enumForceFieldUpgrade.name()));
|
||||
return false;
|
||||
|
||||
} else {// default to dismount shape
|
||||
|
@ -264,22 +269,22 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
|
||||
tileEntityForceFieldProjector.setShape(EnumForceFieldShape.NONE);
|
||||
// shape dismounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.shapeDismounted"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.shapeDismounted"));
|
||||
} else {
|
||||
// wrong side
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.wrongShapeSide"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.wrongShapeSide"));
|
||||
return true;
|
||||
}
|
||||
|
||||
} else {
|
||||
// no shape to dismount
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noShapeToDismount"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noShapeToDismount"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
} else if (itemStackHeld == null) {// no sneaking and no item in hand => show status
|
||||
WarpDrive.addChatMessage(entityPlayer, tileEntityForceFieldProjector.getStatus());
|
||||
Commons.addChatMessage(entityPlayer, tileEntityForceFieldProjector.getStatus());
|
||||
return true;
|
||||
|
||||
} else if (itemStackHeld.getItem() instanceof ItemForceFieldShape) {// no sneaking and shape in hand => mounting a shape
|
||||
|
@ -288,7 +293,7 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
// validate quantity
|
||||
if (itemStackHeld.stackSize < (tileEntityForceFieldProjector.isDoubleSided ? 2 : 1)) {
|
||||
// not enough shape items
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation(
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation(
|
||||
tileEntityForceFieldProjector.isDoubleSided ?
|
||||
"warpdrive.upgrade.result.notEnoughShapes.double" : "warpdrive.upgrade.result.notEnoughShapes.single"));
|
||||
return true;
|
||||
|
@ -309,11 +314,11 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
// mount the new shape item(s)
|
||||
tileEntityForceFieldProjector.setShape(EnumForceFieldShape.get(itemStackHeld.getItemDamage()));
|
||||
// shape mounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.shapeMounted"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.shapeMounted"));
|
||||
|
||||
} else {
|
||||
// wrong side
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.wrongShapeSide"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.wrongShapeSide"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -321,12 +326,12 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
// validate type
|
||||
if (tileEntityForceFieldProjector.getUpgradeMaxCount(enumForceFieldUpgrade) <= 0) {
|
||||
// invalid upgrade type
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.invalidProjectorUpgrade"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.invalidProjectorUpgrade"));
|
||||
return true;
|
||||
}
|
||||
if (!tileEntityForceFieldProjector.canUpgrade(enumForceFieldUpgrade)) {
|
||||
// too many upgrades
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.tooManyUpgrades",
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.tooManyUpgrades",
|
||||
tileEntityForceFieldProjector.getUpgradeMaxCount(enumForceFieldUpgrade)));
|
||||
return true;
|
||||
}
|
||||
|
@ -335,7 +340,7 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
// validate quantity
|
||||
if (itemStackHeld.stackSize < 1) {
|
||||
// not enough upgrade items
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.notEnoughUpgrades"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.notEnoughUpgrades"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -346,7 +351,7 @@ public class BlockForceFieldProjector extends BlockAbstractForceField {
|
|||
// mount the new upgrade item
|
||||
tileEntityForceFieldProjector.mountUpgrade(enumForceFieldUpgrade);
|
||||
// upgrade mounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.mounted", enumForceFieldUpgrade));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.mounted", enumForceFieldUpgrade));
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -1,27 +1,30 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.data.EnumForceFieldUpgrade;
|
||||
import cr0s.warpdrive.item.ItemForceFieldUpgrade;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.data.EnumForceFieldUpgrade;
|
||||
import cr0s.warpdrive.item.ItemForceFieldUpgrade;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockForceFieldRelay extends BlockAbstractForceField {
|
||||
|
||||
|
@ -102,23 +105,23 @@ public class BlockForceFieldRelay extends BlockAbstractForceField {
|
|||
|
||||
tileEntityForceFieldRelay.setUpgrade(EnumForceFieldUpgrade.NONE);
|
||||
// upgrade dismounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.dismounted", enumForceFieldUpgrade.name()));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.dismounted", enumForceFieldUpgrade.name()));
|
||||
|
||||
} else {
|
||||
// no more upgrades to dismount
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noUpgradeToDismount"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.noUpgradeToDismount"));
|
||||
return true;
|
||||
}
|
||||
|
||||
} else if (itemStackHeld == null) {// no sneaking and no item in hand to show status
|
||||
WarpDrive.addChatMessage(entityPlayer, tileEntityForceFieldRelay.getStatus());
|
||||
Commons.addChatMessage(entityPlayer, tileEntityForceFieldRelay.getStatus());
|
||||
return true;
|
||||
|
||||
} else if (itemStackHeld.getItem() instanceof ItemForceFieldUpgrade) {
|
||||
// validate type
|
||||
if (EnumForceFieldUpgrade.get(itemStackHeld.getItemDamage()).maxCountOnRelay <= 0) {
|
||||
// invalid upgrade type
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.invalidRelayUpgrade"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.invalidRelayUpgrade"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -126,7 +129,7 @@ public class BlockForceFieldRelay extends BlockAbstractForceField {
|
|||
// validate quantity
|
||||
if (itemStackHeld.stackSize < 1) {
|
||||
// not enough upgrade items
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.notEnoughUpgrades"));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.notEnoughUpgrades"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -146,7 +149,7 @@ public class BlockForceFieldRelay extends BlockAbstractForceField {
|
|||
EnumForceFieldUpgrade enumForceFieldUpgrade = EnumForceFieldUpgrade.get(itemStackHeld.getItemDamage());
|
||||
tileEntityForceFieldRelay.setUpgrade(enumForceFieldUpgrade);
|
||||
// upgrade mounted
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.mounted", enumForceFieldUpgrade.name()));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.upgrade.result.mounted", enumForceFieldUpgrade.name()));
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import cr0s.warpdrive.block.ItemBlockAbstractBase;
|
||||
import cr0s.warpdrive.data.EnumForceFieldShape;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class ItemBlockForceFieldProjector extends ItemBlockAbstractBase {
|
||||
|
||||
public ItemBlockForceFieldProjector(Block block) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import cr0s.warpdrive.block.ItemBlockAbstractBase;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
public class ItemBlockForceFieldRelay extends ItemBlockAbstractBase {
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBeamFrequency;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
|
@ -15,10 +12,15 @@ import dan200.computercraft.api.peripheral.IComputerAccess;
|
|||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
|
@ -108,11 +110,11 @@ public class TileEntityAbstractForceField extends TileEntityAbstractEnergy imple
|
|||
|
||||
private ITextComponent getBeamFrequencyStatus() {
|
||||
if (beamFrequency == -1) {
|
||||
return new TextComponentTranslation("warpdrive.beamFrequency.statusLine.undefined");
|
||||
return new TextComponentTranslation("warpdrive.beam_frequency.statusLine.undefined");
|
||||
} else if (beamFrequency < 0) {
|
||||
return new TextComponentTranslation("warpdrive.beamFrequency.statusLine.invalid", beamFrequency);
|
||||
return new TextComponentTranslation("warpdrive.beam_frequency.statusLine.invalid", beamFrequency);
|
||||
} else {
|
||||
return new TextComponentTranslation("warpdrive.beamFrequency.statusLine.valid", beamFrequency);
|
||||
return new TextComponentTranslation("warpdrive.beam_frequency.statusLine.valid", beamFrequency);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -128,7 +130,7 @@ public class TileEntityAbstractForceField extends TileEntityAbstractEnergy imple
|
|||
public void readFromNBT(NBTTagCompound tag) {
|
||||
super.readFromNBT(tag);
|
||||
tier = tag.getByte("tier");
|
||||
setBeamFrequency(tag.getInteger("beamFrequency"));
|
||||
setBeamFrequency(tag.getInteger(BEAM_FREQUENCY_TAG));
|
||||
isEnabled = !tag.hasKey("isEnabled") || tag.getBoolean("isEnabled");
|
||||
}
|
||||
|
||||
|
@ -136,7 +138,7 @@ public class TileEntityAbstractForceField extends TileEntityAbstractEnergy imple
|
|||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
tag = super.writeToNBT(tag);
|
||||
tag.setByte("tier", tier);
|
||||
tag.setInteger("beamFrequency", beamFrequency);
|
||||
tag.setInteger(BEAM_FREQUENCY_TAG, beamFrequency);
|
||||
tag.setBoolean("isEnabled", isEnabled);
|
||||
return tag;
|
||||
}
|
||||
|
@ -177,7 +179,7 @@ public class TileEntityAbstractForceField extends TileEntityAbstractEnergy imple
|
|||
if (arguments.length == 1) {
|
||||
boolean enable;
|
||||
try {
|
||||
enable = toBool(arguments[0]);
|
||||
enable = Commons.toBool(arguments[0]);
|
||||
} catch (Exception exception) {
|
||||
throw new Exception("Function expects a boolean value");
|
||||
}
|
||||
|
@ -199,7 +201,7 @@ public class TileEntityAbstractForceField extends TileEntityAbstractEnergy imple
|
|||
|
||||
case "beamFrequency":
|
||||
if (arguments.length == 1) {
|
||||
setBeamFrequency(toInt(arguments[0]));
|
||||
setBeamFrequency(Commons.toInt(arguments[0]));
|
||||
}
|
||||
return new Integer[]{ beamFrequency };
|
||||
}
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBeamFrequency;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractBase;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.ForceFieldSetup;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class TileEntityForceField extends TileEntityAbstractBase {
|
||||
private VectorI vProjector;
|
||||
|
@ -33,8 +33,8 @@ public class TileEntityForceField extends TileEntityAbstractBase {
|
|||
public void readFromNBT(NBTTagCompound tag) {
|
||||
super.readFromNBT(tag);
|
||||
if (tag.hasKey("projector")) {
|
||||
vProjector = VectorI.readFromNBT(tag.getCompoundTag("projector"));
|
||||
cache_beamFrequency = tag.getInteger("beamFrequency");
|
||||
vProjector = VectorI.createFromNBT(tag.getCompoundTag("projector"));
|
||||
cache_beamFrequency = tag.getInteger(IBeamFrequency.BEAM_FREQUENCY_TAG);
|
||||
if (tag.hasKey("projector")) {
|
||||
try {
|
||||
cache_blockStateCamouflage = Block.getBlockFromName(tag.getString("camouflageBlock")).getStateFromMeta(tag.getByte("camouflageMeta"));
|
||||
|
@ -67,7 +67,7 @@ public class TileEntityForceField extends TileEntityAbstractBase {
|
|||
tagCompound = super.writeToNBT(tagCompound);
|
||||
if (vProjector != null) {
|
||||
tagCompound.setTag("projector", vProjector.writeToNBT(new NBTTagCompound()));
|
||||
tagCompound.setInteger("beamFrequency", cache_beamFrequency);
|
||||
tagCompound.setInteger(IBeamFrequency.BEAM_FREQUENCY_TAG, cache_beamFrequency);
|
||||
if (cache_blockStateCamouflage != null) {
|
||||
tagCompound.setString("camouflageBlock", cache_blockStateCamouflage.getBlock().getRegistryName().toString());
|
||||
tagCompound.setByte("camouflageMeta", (byte)cache_blockStateCamouflage.getBlock().getMetaFromState(cache_blockStateCamouflage));
|
||||
|
|
|
@ -1,17 +1,36 @@
|
|||
package cr0s.warpdrive.block.forcefield;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IBeamFrequency;
|
||||
import cr0s.warpdrive.api.IForceFieldShape;
|
||||
import cr0s.warpdrive.config.*;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.data.*;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.BlockProperties;
|
||||
import cr0s.warpdrive.data.EnumForceFieldShape;
|
||||
import cr0s.warpdrive.data.EnumForceFieldState;
|
||||
import cr0s.warpdrive.data.EnumForceFieldUpgrade;
|
||||
import cr0s.warpdrive.data.ForceFieldSetup;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockLiquid;
|
||||
import net.minecraft.block.BlockStaticLiquid;
|
||||
|
@ -26,19 +45,17 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
import net.minecraftforge.fluids.FluidRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityForceFieldProjector extends TileEntityAbstractForceField {
|
||||
private static final int PROJECTOR_MAX_ENERGY_STORED = 30000;
|
||||
|
@ -106,6 +123,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
"state",
|
||||
"translation"
|
||||
});
|
||||
CC_scripts = Arrays.asList("enable", "disable");
|
||||
|
||||
for (EnumForceFieldUpgrade enumForceFieldUpgrade : EnumForceFieldUpgrade.values()) {
|
||||
if (enumForceFieldUpgrade.maxCountOnProjector > 0) {
|
||||
|
@ -211,7 +229,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
}
|
||||
|
||||
soundTicks--;
|
||||
if (soundTicks <= 0) {
|
||||
if (soundTicks < 0) {
|
||||
soundTicks = PROJECTOR_SOUND_UPDATE_TICKS;
|
||||
if (!hasUpgrade(EnumForceFieldUpgrade.SILENCER)) {
|
||||
worldObj.playSound(null, pos, SoundEvents.PROJECTING, SoundCategory.BLOCKS, 1.0F, 0.85F + 0.15F * worldObj.rand.nextFloat());
|
||||
|
@ -245,7 +263,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
continue;
|
||||
}
|
||||
|
||||
WarpDrive.addChatMessage(entity, msg);
|
||||
Commons.addChatMessage(entity, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -737,7 +755,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
}
|
||||
|
||||
private void setMin(final float x, final float y, final float z) {
|
||||
v3Min = new Vector3(clamp(-1.0D, 0.0D, x), clamp(-1.0D, 0.0D, y), clamp(-1.0D, 0.0D, z));
|
||||
v3Min = new Vector3(Commons.clamp(-1.0D, 0.0D, x), Commons.clamp(-1.0D, 0.0D, y), Commons.clamp(-1.0D, 0.0D, z));
|
||||
}
|
||||
|
||||
public Vector3 getMax() {
|
||||
|
@ -745,7 +763,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
}
|
||||
|
||||
private void setMax(final float x, final float y, final float z) {
|
||||
v3Max = new Vector3(clamp(0.0D, 1.0D, x), clamp(0.0D, 1.0D, y), clamp(0.0D, 1.0D, z));
|
||||
v3Max = new Vector3(Commons.clamp(0.0D, 1.0D, x), Commons.clamp(0.0D, 1.0D, y), Commons.clamp(0.0D, 1.0D, z));
|
||||
}
|
||||
|
||||
public float getRotationYaw() {
|
||||
|
@ -796,8 +814,8 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
float oldYaw = this.rotationYaw;
|
||||
float oldPitch = this.rotationPitch;
|
||||
float oldRoll = this.rotationRoll;
|
||||
this.rotationYaw = clamp( -45.0F, +45.0F, rotationYaw);
|
||||
this.rotationPitch = clamp( -45.0F, +45.0F, rotationPitch);
|
||||
this.rotationYaw = Commons.clamp( -45.0F, +45.0F, rotationYaw);
|
||||
this.rotationPitch = Commons.clamp( -45.0F, +45.0F, rotationPitch);
|
||||
this.rotationRoll = (rotationRoll + 720.0F) % 360.0F - 180.0F;
|
||||
if (oldYaw != this.rotationYaw || oldPitch != this.rotationPitch || oldRoll != this.rotationRoll) {
|
||||
isDirty.set(true);
|
||||
|
@ -848,7 +866,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
}
|
||||
|
||||
private void setTranslation(final float x, final float y, final float z) {
|
||||
v3Translation = new Vector3(clamp(-1.0D, 1.0D, x), clamp(-1.0D, 1.0D, y), clamp(-1.0D, 1.0D, z));
|
||||
v3Translation = new Vector3(Commons.clamp(-1.0D, 1.0D, x), Commons.clamp(-1.0D, 1.0D, y), Commons.clamp(-1.0D, 1.0D, z));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1030,13 +1048,13 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
|
||||
// OpenComputer callback methods
|
||||
@Callback
|
||||
@net.minecraftforge.fml.common.Optional.Method(modid = "OpenComputers")
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] state(Context context, Arguments arguments) {
|
||||
return state();
|
||||
}
|
||||
|
||||
@Callback
|
||||
@net.minecraftforge.fml.common.Optional.Method(modid = "OpenComputers")
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] min(Context context, Arguments arguments) {
|
||||
if (arguments.count() == 1) {
|
||||
setMin((float)arguments.checkDouble(0), (float)arguments.checkDouble(0), (float)arguments.checkDouble(0));
|
||||
|
@ -1049,7 +1067,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
}
|
||||
|
||||
@Callback
|
||||
@net.minecraftforge.fml.common.Optional.Method(modid = "OpenComputers")
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] max(Context context, Arguments arguments) {
|
||||
if (arguments.count() == 1) {
|
||||
setMax((float)arguments.checkDouble(0), (float)arguments.checkDouble(0), (float)arguments.checkDouble(0));
|
||||
|
@ -1062,7 +1080,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
}
|
||||
|
||||
@Callback
|
||||
@net.minecraftforge.fml.common.Optional.Method(modid = "OpenComputers")
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] rotation(Context context, Arguments arguments) {
|
||||
if (arguments.count() == 1) {
|
||||
setRotation((float)arguments.checkDouble(0), rotationPitch, rotationRoll);
|
||||
|
@ -1082,7 +1100,7 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
}
|
||||
|
||||
@Callback
|
||||
@net.minecraftforge.fml.common.Optional.Method(modid = "OpenComputers")
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] translation(Context context, Arguments arguments) {
|
||||
if (arguments.count() == 1) {
|
||||
setTranslation((float)arguments.checkDouble(0), (float)arguments.checkDouble(0), (float)arguments.checkDouble(0));
|
||||
|
@ -1096,38 +1114,38 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
|
||||
// ComputerCraft IPeripheral methods implementation
|
||||
@Override
|
||||
@net.minecraftforge.fml.common.Optional.Method(modid = "ComputerCraft")
|
||||
@Optional.Method(modid = "ComputerCraft")
|
||||
public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) {
|
||||
String methodName = getMethodName(method);
|
||||
|
||||
switch (methodName) {
|
||||
case "min":
|
||||
if (arguments.length == 1) {
|
||||
setMin(toFloat(arguments[0]), toFloat(arguments[0]), toFloat(arguments[0]));
|
||||
setMin(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[0]), Commons.toFloat(arguments[0]));
|
||||
} else if (arguments.length == 2) {
|
||||
setMin(toFloat(arguments[0]), toFloat(arguments[1]), toFloat(arguments[0]));
|
||||
setMin(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), Commons.toFloat(arguments[0]));
|
||||
} else if (arguments.length == 3) {
|
||||
setMin(toFloat(arguments[0]), toFloat(arguments[1]), toFloat(arguments[2]));
|
||||
setMin(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), Commons.toFloat(arguments[2]));
|
||||
}
|
||||
return new Double[] { v3Min.x, v3Min.y, v3Min.z };
|
||||
|
||||
case "max":
|
||||
if (arguments.length == 1) {
|
||||
setMax(toFloat(arguments[0]), toFloat(arguments[0]), toFloat(arguments[0]));
|
||||
setMax(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[0]), Commons.toFloat(arguments[0]));
|
||||
} else if (arguments.length == 2) {
|
||||
setMax(toFloat(arguments[0]), toFloat(arguments[1]), toFloat(arguments[0]));
|
||||
setMax(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), Commons.toFloat(arguments[0]));
|
||||
} else if (arguments.length == 3) {
|
||||
setMax(toFloat(arguments[0]), toFloat(arguments[1]), toFloat(arguments[2]));
|
||||
setMax(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), Commons.toFloat(arguments[2]));
|
||||
}
|
||||
return new Double[] { v3Max.x, v3Max.y, v3Max.z };
|
||||
|
||||
case "rotation":
|
||||
if (arguments.length == 1) {
|
||||
setRotation(toFloat(arguments[0]), rotationPitch, rotationRoll);
|
||||
setRotation(Commons.toFloat(arguments[0]), rotationPitch, rotationRoll);
|
||||
} else if (arguments.length == 2) {
|
||||
setRotation(toFloat(arguments[0]), toFloat(arguments[1]), rotationRoll);
|
||||
setRotation(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), rotationRoll);
|
||||
} else if (arguments.length == 3) {
|
||||
setRotation(toFloat(arguments[0]), toFloat(arguments[1]), toFloat(arguments[2]));
|
||||
setRotation(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), Commons.toFloat(arguments[2]));
|
||||
}
|
||||
return new Float[] { rotationYaw, rotationPitch, rotationRoll };
|
||||
|
||||
|
@ -1136,11 +1154,11 @@ public class TileEntityForceFieldProjector extends TileEntityAbstractForceField
|
|||
|
||||
case "translation":
|
||||
if (arguments.length == 1) {
|
||||
setTranslation(toFloat(arguments[0]), toFloat(arguments[0]), toFloat(arguments[0]));
|
||||
setTranslation(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[0]), Commons.toFloat(arguments[0]));
|
||||
} else if (arguments.length == 2) {
|
||||
setTranslation(toFloat(arguments[0]), toFloat(arguments[1]), toFloat(arguments[0]));
|
||||
setTranslation(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), Commons.toFloat(arguments[0]));
|
||||
} else if (arguments.length == 3) {
|
||||
setTranslation(toFloat(arguments[0]), toFloat(arguments[1]), toFloat(arguments[2]));
|
||||
setTranslation(Commons.toFloat(arguments[0]), Commons.toFloat(arguments[1]), Commons.toFloat(arguments[2]));
|
||||
}
|
||||
return new Double[] { v3Translation.x, v3Translation.y, v3Translation.z };
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import cr0s.warpdrive.api.IForceFieldUpgrade;
|
|||
import cr0s.warpdrive.api.IForceFieldUpgradeEffector;
|
||||
import cr0s.warpdrive.data.EnumForceFieldUpgrade;
|
||||
import cr0s.warpdrive.data.ForceFieldSetup;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
package cr0s.warpdrive.block.hull;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IDamageReceiver;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.block.BlockColored;
|
||||
import net.minecraft.block.BlockGlass;
|
||||
import net.minecraft.block.SoundType;
|
||||
|
@ -8,15 +14,10 @@ import net.minecraft.block.material.EnumPushReaction;
|
|||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IDamageReceiver;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class BlockHullGlass extends BlockColored implements IDamageReceiver {
|
||||
final byte tier;
|
||||
|
|
|
@ -1,30 +1,31 @@
|
|||
package cr0s.warpdrive.block.hull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.material.EnumPushReaction;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.item.EnumDyeColor;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.MapColor;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IDamageReceiver;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.material.EnumPushReaction;
|
||||
import net.minecraft.block.material.MapColor;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.EnumDyeColor;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
public class BlockHullPlain extends Block implements IDamageReceiver {
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@ import cr0s.warpdrive.WarpDrive;
|
|||
import cr0s.warpdrive.api.IDamageReceiver;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.block.BlockStairs;
|
||||
import net.minecraft.block.material.EnumPushReaction;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
|
@ -13,8 +16,6 @@ import net.minecraft.util.DamageSource;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class BlockHullStairs extends BlockStairs implements IDamageReceiver {
|
||||
|
||||
final byte tier;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package cr0s.warpdrive.block.hull;
|
||||
|
||||
import cr0s.warpdrive.block.ItemBlockAbstractBase;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
|
@ -10,8 +13,6 @@ import net.minecraft.util.ResourceLocation;
|
|||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
public class ItemBlockHull extends ItemBlockAbstractBase {
|
||||
|
||||
public ItemBlockHull(Block block) {
|
||||
|
@ -54,8 +55,9 @@ public class ItemBlockHull extends ItemBlockAbstractBase {
|
|||
return 1;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public EnumRarity getRarity(final ItemStack itemStack) {
|
||||
public EnumRarity getRarity(@Nonnull final ItemStack itemStack) {
|
||||
switch (getTier()) {
|
||||
case 0: return EnumRarity.EPIC;
|
||||
case 1: return EnumRarity.COMMON;
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import cr0s.warpdrive.data.EnumLiftMode;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.data.EnumLiftMode;
|
||||
|
@ -14,12 +21,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockLift extends BlockAbstractContainer {
|
||||
public static final PropertyEnum<EnumLiftMode> MODE = PropertyEnum.create("mode", EnumLiftMode.class);
|
||||
|
@ -71,7 +74,7 @@ public class BlockLift extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityLift) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityLift)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityLift) tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
|
@ -11,12 +17,8 @@ import net.minecraft.util.EnumFacing;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockShipController extends BlockAbstractContainer {
|
||||
|
||||
|
@ -47,9 +49,9 @@ public class BlockShipController extends BlockAbstractContainer {
|
|||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityShipController) {
|
||||
if (entityPlayer.isSneaking()) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityShipController)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityShipController) tileEntity).getStatus());
|
||||
} else {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityShipController)tileEntity).attachPlayer(entityPlayer));
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityShipController) tileEntity).attachPlayer(entityPlayer));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import cr0s.warpdrive.data.EnumComponentType;
|
||||
import cr0s.warpdrive.item.ItemComponent;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.data.EnumComponentType;
|
||||
import cr0s.warpdrive.item.ItemComponent;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.entity.item.EntityTNTPrimed;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
|
@ -17,13 +23,9 @@ import net.minecraft.util.EnumHand;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockShipCore extends BlockAbstractContainer {
|
||||
|
||||
|
@ -97,7 +99,7 @@ public class BlockShipCore extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityShipCore) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityShipCore)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityShipCore)tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.block.properties.PropertyBool;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
|
@ -63,7 +65,7 @@ public class BlockTransporter extends BlockAbstractContainer {
|
|||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (tileEntity instanceof TileEntityTransporter) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityTransporter)tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityTransporter)tileEntity).getStatus());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,28 +1,32 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.EnumLiftMode;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.network.PacketHandler;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
|
||||
public class TileEntityLift extends TileEntityAbstractEnergy {
|
||||
|
||||
|
@ -171,14 +175,14 @@ public class TileEntityLift extends TileEntityAbstractEnergy {
|
|||
public void readFromNBT(NBTTagCompound tag) {
|
||||
super.readFromNBT(tag);
|
||||
if (tag.hasKey("mode")) {
|
||||
mode = EnumLiftMode.get(clamp(-1, 2, tag.getByte("mode")));
|
||||
mode = EnumLiftMode.get(Commons.clamp(-1, 2, tag.getByte("mode")));
|
||||
}
|
||||
if (tag.hasKey("computerEnabled")) {
|
||||
computerEnabled = tag.getBoolean("computerEnabled");
|
||||
}
|
||||
if (tag.hasKey("computerMode")) {
|
||||
byte byteValue = tag.getByte("computerMode");
|
||||
computerMode = EnumLiftMode.get(clamp(0, 3, byteValue == -1 ? 3 : byteValue));
|
||||
computerMode = EnumLiftMode.get(Commons.clamp(0, 3, byteValue == -1 ? 3 : byteValue));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -264,7 +268,7 @@ public class TileEntityLift extends TileEntityAbstractEnergy {
|
|||
|
||||
} else if (methodName.equals("active")) {
|
||||
if (arguments.length == 1) {
|
||||
computerEnabled = toBool(arguments[0]);
|
||||
computerEnabled = Commons.toBool(arguments[0]);
|
||||
}
|
||||
return new Object[] { !computerEnabled && isEnabled };
|
||||
}
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractInterfaced;
|
||||
import cr0s.warpdrive.block.movement.TileEntityShipCore.EnumShipCoreMode;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
@ -14,18 +23,7 @@ import net.minecraft.util.text.ITextComponent;
|
|||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractInterfaced;
|
||||
import cr0s.warpdrive.block.movement.TileEntityShipCore.EnumShipCoreMode;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
|
||||
/**
|
||||
* Protocol block tile entity
|
||||
* @author Cr0s
|
||||
*/
|
||||
public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
||||
// Variables
|
||||
private int distance = 0;
|
||||
|
@ -52,8 +50,6 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
|
||||
private String beaconFrequency = "";
|
||||
|
||||
boolean ready = false; // Ready to operate (valid assembly)
|
||||
|
||||
private final int updateInterval_ticks = 20 * WarpDriveConfig.SHIP_CONTROLLER_UPDATE_INTERVAL_SECONDS;
|
||||
private int updateTicks = updateInterval_ticks;
|
||||
private int bootTicks = 20;
|
||||
|
@ -572,13 +568,13 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
@Callback
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] isInSpace(Context context, Arguments arguments) {
|
||||
return new Boolean[] { worldObj.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID };
|
||||
return new Boolean[] { WarpDrive.starMap.isInSpace(worldObj, pos.getX(), pos.getZ()) };
|
||||
}
|
||||
|
||||
@Callback
|
||||
@Optional.Method(modid = "OpenComputers")
|
||||
public Object[] isInHyperspace(Context context, Arguments arguments) {
|
||||
return new Boolean[] { worldObj.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID };
|
||||
return new Boolean[] { WarpDrive.starMap.isInHyperspace(worldObj, pos.getX(), pos.getZ()) };
|
||||
}
|
||||
|
||||
@Callback
|
||||
|
@ -600,9 +596,9 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
try {
|
||||
if (arguments.length == 3) {
|
||||
int argInt0, argInt1, argInt2;
|
||||
argInt0 = clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(toInt(arguments[0])));
|
||||
argInt1 = clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(toInt(arguments[1])));
|
||||
argInt2 = clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(toInt(arguments[2])));
|
||||
argInt0 = Commons.clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(Commons.toInt(arguments[0])));
|
||||
argInt1 = Commons.clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(Commons.toInt(arguments[1])));
|
||||
argInt2 = Commons.clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(Commons.toInt(arguments[2])));
|
||||
if (WarpDriveConfig.LOGGING_LUA) {
|
||||
WarpDrive.logger.info(this + " Positive dimensions set to front " + argInt0 + ", right " + argInt1 + ", up " + argInt2);
|
||||
}
|
||||
|
@ -621,9 +617,9 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
try {
|
||||
if (arguments.length == 3) {
|
||||
int argInt0, argInt1, argInt2;
|
||||
argInt0 = clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(toInt(arguments[0])));
|
||||
argInt1 = clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(toInt(arguments[1])));
|
||||
argInt2 = clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(toInt(arguments[2])));
|
||||
argInt0 = Commons.clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(Commons.toInt(arguments[0])));
|
||||
argInt1 = Commons.clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(Commons.toInt(arguments[1])));
|
||||
argInt2 = Commons.clamp(0, WarpDriveConfig.SHIP_MAX_SIDE_SIZE, Math.abs(Commons.toInt(arguments[2])));
|
||||
if (WarpDriveConfig.LOGGING_LUA) {
|
||||
WarpDrive.logger.info(this + " Negative dimensions set to back " + argInt0 + ", left " + argInt1 + ", down " + argInt2);
|
||||
}
|
||||
|
@ -641,7 +637,7 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
private Object[] mode(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1) {
|
||||
setMode(toInt(arguments[0]));
|
||||
setMode(Commons.toInt(arguments[0]));
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { mode.getCode() };
|
||||
|
@ -653,7 +649,7 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
private Object[] distance(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1) {
|
||||
setDistance(toInt(arguments[0]));
|
||||
setDistance(Commons.toInt(arguments[0]));
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { getDistance() };
|
||||
|
@ -665,7 +661,7 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
private Object[] direction(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1) {
|
||||
setDirection(toInt(arguments[0]));
|
||||
setDirection(Commons.toInt(arguments[0]));
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { getDirection() };
|
||||
|
@ -677,7 +673,7 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
private Object[] movement(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 3) {
|
||||
setMovement(toInt(arguments[0]), toInt(arguments[1]), toInt(arguments[2]));
|
||||
setMovement(Commons.toInt(arguments[0]), Commons.toInt(arguments[1]), Commons.toInt(arguments[2]));
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { moveFront, moveUp, moveRight };
|
||||
|
@ -689,7 +685,7 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
private Object[] rotationSteps(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1) {
|
||||
setRotationSteps((byte)toInt(arguments[0]));
|
||||
setRotationSteps((byte) Commons.toInt(arguments[0]));
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { (int) rotationSteps };
|
||||
|
@ -717,7 +713,7 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
}
|
||||
int playerIndex;
|
||||
try {
|
||||
playerIndex = toInt(arguments[0]);
|
||||
playerIndex = Commons.toInt(arguments[0]);
|
||||
} catch (Exception exception) {
|
||||
return new Object[] { false };
|
||||
}
|
||||
|
@ -732,7 +728,7 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
private Object[] getEnergyRequired(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length == 1 && core != null) {
|
||||
return new Object[] { TileEntityShipCore.calculateRequiredEnergy(getMode(), core.shipMass, toInt(arguments[0])) };
|
||||
return new Object[] { TileEntityShipCore.calculateRequiredEnergy(getMode(), core.shipMass, Commons.toInt(arguments[0])) };
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
return new Integer[] { -1 };
|
||||
|
@ -798,82 +794,82 @@ public class TileEntityShipController extends TileEntityAbstractInterfaced {
|
|||
switch (methodName) {
|
||||
case "dim_positive": // dim_positive (front, right, up)
|
||||
return dim_positive(arguments);
|
||||
|
||||
|
||||
case "dim_negative": // dim_negative (back, left, down)
|
||||
return dim_negative(arguments);
|
||||
|
||||
|
||||
case "mode": // mode (mode)
|
||||
return mode(arguments);
|
||||
|
||||
|
||||
case "distance": // distance (distance)
|
||||
return distance(arguments);
|
||||
|
||||
|
||||
case "direction": // direction (direction)
|
||||
return direction(arguments);
|
||||
|
||||
|
||||
case "getAttachedPlayers":
|
||||
return getAttachedPlayers();
|
||||
|
||||
|
||||
case "summon":
|
||||
return summon(arguments);
|
||||
|
||||
|
||||
case "summon_all":
|
||||
setSummonAllFlag(true);
|
||||
|
||||
break;
|
||||
|
||||
case "position":
|
||||
if (core == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
return new Object[] { core.getPos().getX(), core.getPos().getY(), core.getPos().getZ() };
|
||||
|
||||
|
||||
case "energy":
|
||||
if (core == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return core.energy();
|
||||
|
||||
|
||||
case "getEnergyRequired": // getEnergyRequired(distance)
|
||||
return getEnergyRequired(arguments);
|
||||
|
||||
|
||||
case "jump":
|
||||
doJump();
|
||||
|
||||
break;
|
||||
|
||||
case "getShipSize":
|
||||
return getShipSize();
|
||||
|
||||
|
||||
case "beaconFrequency":
|
||||
return beaconFrequency(arguments);
|
||||
|
||||
|
||||
case "getOrientation":
|
||||
if (core != null) {
|
||||
return new Object[]{core.dx, 0, core.dz};
|
||||
return new Object[] { core.dx, 0, core.dz };
|
||||
}
|
||||
return null;
|
||||
|
||||
|
||||
case "coreFrequency":
|
||||
return shipName(arguments);
|
||||
|
||||
|
||||
case "isInSpace":
|
||||
return new Boolean[]{worldObj.provider.getDimension() == WarpDriveConfig.G_SPACE_DIMENSION_ID};
|
||||
|
||||
return new Boolean[] { WarpDrive.starMap.isInSpace(worldObj, pos.getX(), pos.getZ()) };
|
||||
|
||||
case "isInHyperspace":
|
||||
return new Boolean[]{worldObj.provider.getDimension() == WarpDriveConfig.G_HYPERSPACE_DIMENSION_ID};
|
||||
|
||||
return new Boolean[] { WarpDrive.starMap.isInHyperspace(worldObj, pos.getX(), pos.getZ()) };
|
||||
|
||||
case "targetJumpgate":
|
||||
return targetJumpgate(arguments);
|
||||
|
||||
case "isAttached": // isAttached
|
||||
|
||||
case "isAttached":
|
||||
if (core != null) {
|
||||
return new Object[]{core.controller != null};
|
||||
return new Object[] { core.controller != null };
|
||||
}
|
||||
break;
|
||||
|
||||
case "movement":
|
||||
return movement(arguments);
|
||||
|
||||
|
||||
case "rotationSteps":
|
||||
return rotationSteps(arguments);
|
||||
|
||||
|
|
|
@ -1,25 +1,34 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.api.IStarMapRegistryTileEntity;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Jumpgate;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import cr0s.warpdrive.data.StarMapRegistryItem.EnumStarMapEntryType;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import cr0s.warpdrive.event.JumpSequencer;
|
||||
import cr0s.warpdrive.world.SpaceTeleporter;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import cr0s.warpdrive.api.IStarMapRegistryTileEntity;
|
||||
import cr0s.warpdrive.data.StarMapRegistryItem.EnumStarMapEntryType;
|
||||
import cr0s.warpdrive.data.SoundEvents;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.MobEffects;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.tileentity.TileEntityChest;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
|
@ -29,19 +38,8 @@ import net.minecraft.util.math.Vec3d;
|
|||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.Dictionary;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.Jumpgate;
|
||||
import cr0s.warpdrive.data.VectorI;
|
||||
import cr0s.warpdrive.event.JumpSequencer;
|
||||
import cr0s.warpdrive.world.SpaceTeleporter;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
|
||||
public class TileEntityShipCore extends TileEntityAbstractEnergy implements IStarMapRegistryTileEntity {
|
||||
|
||||
|
@ -59,7 +57,7 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
IDLE(0),
|
||||
BASIC_JUMP(1), // 0-128
|
||||
LONG_JUMP(2), // 0-12800
|
||||
TELEPORT(3),
|
||||
// TELEPORT(3),
|
||||
BEACON_JUMP(4), // Jump ship by beacon
|
||||
HYPERSPACE(5), // Jump to/from Hyperspace
|
||||
GATE_JUMP(6); // Jump via jumpgate
|
||||
|
@ -80,7 +78,6 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
private boolean isCooldownReported = false;
|
||||
protected int randomWarmupAddition = 0;
|
||||
|
||||
private int chestTeleportUpdateTicks = 0;
|
||||
private final int registryUpdateInterval_ticks = 20 * WarpDriveConfig.STARMAP_REGISTRY_UPDATE_INTERVAL_SECONDS;
|
||||
private int registryUpdateTicks = 0;
|
||||
private int bootTicks = 20;
|
||||
|
@ -213,22 +210,6 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
}
|
||||
|
||||
switch (currentMode) {
|
||||
case TELEPORT:
|
||||
if (worldObj.isBlockIndirectlyGettingPowered(pos) > 0) {
|
||||
if (isChestSummonMode()) {
|
||||
chestTeleportUpdateTicks++;
|
||||
if (chestTeleportUpdateTicks >= 20) {
|
||||
summonPlayersByChestCode();
|
||||
chestTeleportUpdateTicks = 0;
|
||||
}
|
||||
} else {
|
||||
teleportPlayersToSpace();
|
||||
}
|
||||
} else {
|
||||
chestTeleportUpdateTicks = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case BASIC_JUMP:
|
||||
case LONG_JUMP:
|
||||
case BEACON_JUMP:
|
||||
|
@ -363,7 +344,7 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
continue;
|
||||
}
|
||||
|
||||
WarpDrive.addChatMessage((EntityPlayer) object, new TextComponentString("[" + (!shipName.isEmpty() ? shipName : "ShipCore") + "] ").appendSibling(textComponent));
|
||||
Commons.addChatMessage((EntityPlayer) object, new TextComponentString("[" + (!shipName.isEmpty() ? shipName : "ShipCore") + "] ").appendSibling(textComponent));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -457,7 +438,7 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
@SuppressWarnings("ConstantConditions") EntityPlayerMP entityPlayerMP = worldObj.getMinecraftServer().getPlayerList().getPlayerByUsername(playerName);
|
||||
StringBuilder reason = new StringBuilder();
|
||||
if (!validateShipSpatialParameters(reason)) {
|
||||
WarpDrive.addChatMessage(entityPlayerMP, new TextComponentTranslation("[" + (!shipName.isEmpty() ? shipName : "ShipCore") + "] §c" + reason.toString()));
|
||||
Commons.addChatMessage(entityPlayerMP, new TextComponentString("[" + (!shipName.isEmpty() ? shipName : "ShipCore") + "] §c" + reason.toString()));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -491,7 +472,7 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
}
|
||||
if (WarpDriveConfig.SHIP_SUMMON_MAX_RANGE >= 0 && distance > WarpDriveConfig.SHIP_SUMMON_MAX_RANGE) {
|
||||
messageToAllPlayersOnShip("§c" + String.format("%1$s is too far away to be summoned (max. is %2$d m)", entityPlayer.getDisplayName(), WarpDriveConfig.SHIP_SUMMON_MAX_RANGE));
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentString("§c" + String.format("You are to far away to be summoned aboard '%1$s' (max. is %2$d m)", shipName, WarpDriveConfig.SHIP_SUMMON_MAX_RANGE)));
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentString("§c" + String.format("You are to far away to be summoned aboard '%1$s' (max. is %2$d m)", shipName, WarpDriveConfig.SHIP_SUMMON_MAX_RANGE)));
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -595,7 +576,8 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
if ( (shipBack + shipFront) > WarpDriveConfig.SHIP_MAX_SIDE_SIZE
|
||||
|| (shipLeft + shipRight) > WarpDriveConfig.SHIP_MAX_SIDE_SIZE
|
||||
|| (shipDown + shipUp) > WarpDriveConfig.SHIP_MAX_SIDE_SIZE) {
|
||||
reason.append("Ship is too big (max is " + WarpDriveConfig.SHIP_MAX_SIDE_SIZE + " per side)");
|
||||
reason.append(String.format("Ship is too big (max is %d per side)",
|
||||
WarpDriveConfig.SHIP_MAX_SIDE_SIZE));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -614,8 +596,11 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
}
|
||||
|
||||
updateShipMassAndVolume();
|
||||
if (!isUnlimited && shipMass > WarpDriveConfig.SHIP_VOLUME_MAX_ON_PLANET_SURFACE && isOnPlanet()) {
|
||||
reason.append("Ship is too big for a planet (max is " + WarpDriveConfig.SHIP_VOLUME_MAX_ON_PLANET_SURFACE + " blocks)");
|
||||
if ( !isUnlimited
|
||||
&& shipMass > WarpDriveConfig.SHIP_VOLUME_MAX_ON_PLANET_SURFACE
|
||||
&& WarpDrive.starMap.isPlanet(worldObj, pos.getX(), pos.getZ()) ) {
|
||||
reason.append(String.format("Ship is too big for a planet (max is %d blocks)",
|
||||
WarpDriveConfig.SHIP_VOLUME_MAX_ON_PLANET_SURFACE));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -717,10 +702,12 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
if (percent > 80F) {
|
||||
return true;
|
||||
} else if (percent <= 0.001) {
|
||||
reason.append("Ship is not inside a jumpgate. Jump rejected. Nearest jumpgate is " + jumpgate.toNiceString());
|
||||
reason.append(String.format("Ship is not inside a jumpgate. Jump rejected. Nearest jumpgate is %s",
|
||||
jumpgate.toNiceString()));
|
||||
return false;
|
||||
} else {
|
||||
reason.append("Ship is only " + percent + "% inside a jumpgate. Sorry, we'll loose too much crew as is, jump rejected.");
|
||||
reason.append(String.format("Ship is only %.1f%% inside a jumpgate. Sorry, we'll loose too much crew as is, jump rejected.",
|
||||
percent));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -884,6 +871,22 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
|
||||
if (currentMode != EnumShipCoreMode.HYPERSPACE) {
|
||||
VectorI movement = controller.getMovement();
|
||||
VectorI shipSize = new VectorI(controller.getFront() + 1 + controller.getBack(),
|
||||
controller.getUp() + 1 + controller.getDown(),
|
||||
controller.getRight() + 1 + controller.getLeft());
|
||||
int maxDistance = WarpDriveConfig.SHIP_MAX_JUMP_DISTANCE;
|
||||
if (WarpDrive.starMap.isInHyperspace(worldObj, pos.getX(), pos.getZ())) {
|
||||
maxDistance *= 100;
|
||||
}
|
||||
if (Math.abs(movement.x) - shipSize.x > maxDistance) {
|
||||
movement.x = (int) Math.signum(movement.x) * (shipSize.x + maxDistance);
|
||||
}
|
||||
if (Math.abs(movement.y) - shipSize.y > maxDistance) {
|
||||
movement.y = (int) Math.signum(movement.y) * (shipSize.y + maxDistance);
|
||||
}
|
||||
if (Math.abs(movement.z) - shipSize.z > maxDistance) {
|
||||
movement.z = (int) Math.signum(movement.z) * (shipSize.z + maxDistance);
|
||||
}
|
||||
moveX = dx * movement.x - dz * movement.z;
|
||||
moveY = movement.y;
|
||||
moveZ = dz * movement.x + dx * movement.z;
|
||||
|
@ -909,119 +912,6 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
}
|
||||
}
|
||||
|
||||
private void teleportPlayersToSpace() {
|
||||
if (worldObj.provider.getDimension() != WarpDriveConfig.G_SPACE_DIMENSION_ID) {
|
||||
AxisAlignedBB axisalignedbb = new AxisAlignedBB(pos.getX() - 2, pos.getY() - 1, pos.getZ() - 2, pos.getX() + 2, pos.getY() + 4, pos.getZ() + 2);
|
||||
List list = worldObj.getEntitiesWithinAABBExcludingEntity(null, axisalignedbb);
|
||||
|
||||
@SuppressWarnings("ConstantConditions") WorldServer spaceWorld = worldObj.getMinecraftServer().worldServerForDimension(WarpDriveConfig.G_SPACE_DIMENSION_ID);
|
||||
if (spaceWorld == null) {
|
||||
String msg = "Unable to load Space dimension " + WarpDriveConfig.G_SPACE_DIMENSION_ID + ", aborting teleportation.";
|
||||
messageToAllPlayersOnShip(msg);
|
||||
return;
|
||||
}
|
||||
for (Object o : list) {
|
||||
if (!energy_consume(WarpDriveConfig.SHIP_TELEPORT_ENERGY_PER_ENTITY, false)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Entity entity = (Entity) o;
|
||||
int x = MathHelper.floor_double(entity.posX);
|
||||
int z = MathHelper.floor_double(entity.posZ);
|
||||
// int y = MathHelper.floor_double(entity.posY);
|
||||
int newY;
|
||||
|
||||
for (newY = 254; newY > 0; newY--) {
|
||||
if (spaceWorld.getBlockState(new BlockPos(x, newY, z)).getBlock().isAssociatedBlock(Blocks.WOOL)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (newY <= 0) {
|
||||
newY = 254;
|
||||
}
|
||||
|
||||
if (entity instanceof EntityPlayerMP) {
|
||||
((EntityPlayerMP) entity).mcServer.getPlayerList().transferPlayerToDimension(((EntityPlayerMP) entity),
|
||||
WarpDriveConfig.G_SPACE_DIMENSION_ID,
|
||||
new SpaceTeleporter(DimensionManager.getWorld(WarpDriveConfig.G_SPACE_DIMENSION_ID), 0, x, 256, z));
|
||||
|
||||
if (spaceWorld.isAirBlock(new BlockPos(x, newY, z))) {
|
||||
spaceWorld.setBlockState(new BlockPos(x , newY, z ), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x + 1, newY, z ), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x - 1, newY, z ), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x , newY, z + 1), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x , newY, z - 1), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x + 1, newY, z + 1), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x - 1, newY, z - 1), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x + 1, newY, z - 1), Blocks.STONE.getDefaultState(), 2);
|
||||
spaceWorld.setBlockState(new BlockPos(x - 1, newY, z + 1), Blocks.STONE.getDefaultState(), 2);
|
||||
}
|
||||
|
||||
entity.setPositionAndUpdate(x + 0.5D, newY + 2.0D, z + 0.5D);
|
||||
((EntityPlayerMP) entity).sendPlayerAbilities();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void summonPlayersByChestCode() {
|
||||
TileEntity tileEntity = worldObj.getTileEntity(pos.offset(EnumFacing.UP));
|
||||
if (!(tileEntity instanceof TileEntityChest)) {
|
||||
return;
|
||||
}
|
||||
|
||||
TileEntityChest chest = (TileEntityChest) tileEntity;
|
||||
|
||||
//noinspection ConstantConditions
|
||||
for (EntityPlayerMP entityPlayerMP : worldObj.getMinecraftServer().getPlayerList().getPlayerList()) {
|
||||
|
||||
if (checkPlayerInventory(chest, entityPlayerMP)) {
|
||||
WarpDrive.logger.info(this + " Summoning " + entityPlayerMP.getName());
|
||||
summonPlayer(entityPlayerMP, pos.add(0, 2, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean checkPlayerInventory(TileEntityChest chest, EntityPlayerMP player) {
|
||||
final int MIN_KEY_LENGTH = 5;
|
||||
int keyLength = 0;
|
||||
|
||||
for (int index = 0; index < chest.getSizeInventory(); index++) {
|
||||
ItemStack chestItem = chest.getStackInSlot(index);
|
||||
ItemStack playerItem = player.inventory.getStackInSlot(9 + index);
|
||||
|
||||
if (chestItem == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (playerItem == null || chestItem != playerItem
|
||||
|| chestItem.getItemDamage() != playerItem.getItemDamage()
|
||||
|| chestItem.stackSize != playerItem.stackSize) {
|
||||
return false;
|
||||
}
|
||||
|
||||
keyLength++;
|
||||
}
|
||||
|
||||
if (keyLength < MIN_KEY_LENGTH) {
|
||||
WarpDrive.logger.info("[ChestCode] Key is too short: " + keyLength + " < " + MIN_KEY_LENGTH);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private Boolean isChestSummonMode() {
|
||||
TileEntity tileEntity = worldObj.getTileEntity(pos.offset(EnumFacing.UP));
|
||||
|
||||
if (tileEntity != null) {
|
||||
return (tileEntity instanceof TileEntityChest);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isOutsideBB(AxisAlignedBB axisalignedbb, int x, int y, int z) {
|
||||
return axisalignedbb.minX > x || axisalignedbb.maxX < x
|
||||
|| axisalignedbb.minY > y || axisalignedbb.maxY < y
|
||||
|
@ -1038,9 +928,6 @@ public class TileEntityShipCore extends TileEntityAbstractEnergy implements ISta
|
|||
|
||||
public static int calculateRequiredEnergy(EnumShipCoreMode enumShipCoreMode, int shipVolume, int jumpDistance) {
|
||||
switch (enumShipCoreMode) {
|
||||
case TELEPORT:
|
||||
return WarpDriveConfig.SHIP_TELEPORT_ENERGY_PER_ENTITY;
|
||||
|
||||
case BASIC_JUMP:
|
||||
return (WarpDriveConfig.SHIP_NORMALJUMP_ENERGY_PER_BLOCK * shipVolume) + (WarpDriveConfig.SHIP_NORMALJUMP_ENERGY_PER_DISTANCE * jumpDistance);
|
||||
|
||||
|
|
|
@ -1,31 +1,33 @@
|
|||
package cr0s.warpdrive.block.movement;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cr0s.warpdrive.item.ItemUpgrade;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import cr0s.warpdrive.DamageTeleportation;
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.TileEntityAbstractEnergy;
|
||||
import cr0s.warpdrive.config.WarpDriveConfig;
|
||||
import cr0s.warpdrive.data.UpgradeType;
|
||||
import cr0s.warpdrive.data.Vector3;
|
||||
import cr0s.warpdrive.item.ItemUpgrade;
|
||||
import dan200.computercraft.api.lua.ILuaContext;
|
||||
import dan200.computercraft.api.peripheral.IComputerAccess;
|
||||
import li.cil.oc.api.machine.Arguments;
|
||||
import li.cil.oc.api.machine.Callback;
|
||||
import li.cil.oc.api.machine.Context;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.ITextComponent;
|
||||
import net.minecraft.util.text.TextComponentString;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
|
||||
import net.minecraftforge.fml.common.Optional;
|
||||
|
||||
public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
||||
private double scanRange = 2;
|
||||
|
@ -41,9 +43,7 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
private final static Vector3 centreOnMe = new Vector3(0.5D, 1.0D, 0.5D);
|
||||
private Vector3 sourceVec = new Vector3();
|
||||
private Vector3 destVec = new Vector3();
|
||||
|
||||
private DamageTeleportation damageTeleportation = new DamageTeleportation();
|
||||
|
||||
|
||||
public TileEntityTransporter() {
|
||||
super();
|
||||
|
||||
|
@ -215,9 +215,9 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
try {
|
||||
if (arguments.length >= 3) {
|
||||
unlock();
|
||||
vec.x = toDouble(arguments[0]);
|
||||
vec.y = toDouble(arguments[1]);
|
||||
vec.z = toDouble(arguments[2]);
|
||||
vec.x = Commons.toDouble(arguments[0]);
|
||||
vec.y = Commons.toDouble(arguments[1]);
|
||||
vec.z = Commons.toDouble(arguments[2]);
|
||||
} else if (arguments.length == 1) {
|
||||
unlock();
|
||||
if (WarpDriveConfig.TRANSPORTER_USE_RELATIVE_COORDS) {
|
||||
|
@ -284,7 +284,7 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
private double powerBoost(Object[] arguments) {
|
||||
try {
|
||||
if (arguments.length >= 1) {
|
||||
powerBoost = clamp(1, WarpDriveConfig.TRANSPORTER_MAX_BOOST_MUL, toDouble(arguments[0]));
|
||||
powerBoost = Commons.clamp(1, WarpDriveConfig.TRANSPORTER_MAX_BOOST_MUL, Commons.toDouble(arguments[0]));
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
powerBoost = 1;
|
||||
|
@ -344,7 +344,7 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
}
|
||||
}
|
||||
|
||||
private void inflictNegativeEffect(Entity ent, double lockStrength) {
|
||||
private void inflictNegativeEffect(Entity entity, double lockStrength) {
|
||||
double value = Math.random() + lockStrength;
|
||||
|
||||
if (WarpDriveConfig.LOGGING_TRANSPORTER) {
|
||||
|
@ -352,15 +352,15 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
}
|
||||
|
||||
if (value < 0.1) {
|
||||
ent.attackEntityFrom(damageTeleportation, 1000);
|
||||
entity.attackEntityFrom(WarpDrive.damageTeleportation, 1000);
|
||||
}
|
||||
|
||||
if (value < 0.2) {
|
||||
ent.attackEntityFrom(damageTeleportation, 10);
|
||||
entity.attackEntityFrom(WarpDrive.damageTeleportation, 10);
|
||||
}
|
||||
|
||||
if (value < 0.5) {
|
||||
ent.attackEntityFrom(damageTeleportation, 1);
|
||||
entity.attackEntityFrom(WarpDrive.damageTeleportation, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -406,7 +406,7 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
private double beaconScan(Vector3 s, Vector3 d) {
|
||||
s = absoluteVector(s);
|
||||
d = absoluteVector(d);
|
||||
return beaconScan(toInt(s.x), toInt(s.y), toInt(s.z)) + beaconScan(toInt(d.x), toInt(d.y), toInt(d.z));
|
||||
return beaconScan(Commons.toInt(s.x), Commons.toInt(s.y), Commons.toInt(s.z)) + beaconScan(Commons.toInt(d.x), Commons.toInt(d.y), Commons.toInt(d.z));
|
||||
}
|
||||
|
||||
private Vector3 absoluteVector(Vector3 a) {
|
||||
|
@ -427,7 +427,7 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
|
||||
private static double calculatePower(Vector3 s, Vector3 d) {
|
||||
double dist = s.distanceTo(d);
|
||||
return clamp(0, 1, Math.pow(Math.E, -dist / 300));
|
||||
return Commons.clamp(0, 1, Math.pow(Math.E, -dist / 300));
|
||||
}
|
||||
|
||||
private static double min(double... ds) {
|
||||
|
@ -441,7 +441,7 @@ public class TileEntityTransporter extends TileEntityAbstractEnergy {
|
|||
if (isLocked) {
|
||||
int rangeUgrades = getUpgradeCount(ItemUpgrade.getItemStack(UpgradeType.Range));
|
||||
double upgradeBoost = Math.pow(1.2, rangeUgrades);
|
||||
return clamp(0, 1, baseLockStrength * lockStrengthMul * Math.pow(2, powerBoost - 1) * upgradeBoost * (1 + beaconEffect));
|
||||
return Commons.clamp(0, 1, baseLockStrength * lockStrengthMul * Math.pow(2, powerBoost - 1) * upgradeBoost * (1 + beaconEffect));
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -4,10 +4,12 @@ import java.util.Random;
|
|||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class BlockHighlyAdvancedMachine extends BlockAbstractBase {
|
||||
public BlockHighlyAdvancedMachine(final String registryName) {
|
||||
|
||||
public BlockHighlyAdvancedMachine(final String registryName) {
|
||||
super(registryName, Material.IRON);
|
||||
setHardness(5.0F);
|
||||
setUnlocalizedName("warpdrive.passive.HighlyAdvancedMachine");
|
||||
|
@ -17,4 +19,9 @@ public class BlockHighlyAdvancedMachine extends BlockAbstractBase {
|
|||
public int quantityDropped(Random par1Random) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.COMMON;
|
||||
}
|
||||
}
|
|
@ -1,9 +1,13 @@
|
|||
package cr0s.warpdrive.block.passive;
|
||||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Random;
|
||||
|
||||
import cr0s.warpdrive.block.BlockAbstractBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.EnumRarity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class BlockIridium extends BlockAbstractBase {
|
||||
public BlockIridium(final String registryName) {
|
||||
|
@ -17,4 +21,10 @@ public class BlockIridium extends BlockAbstractBase {
|
|||
public int quantityDropped(Random par1Random) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public EnumRarity getRarity(ItemStack itemStack, EnumRarity rarity) {
|
||||
return EnumRarity.RARE;
|
||||
}
|
||||
}
|
|
@ -1,16 +1,14 @@
|
|||
package cr0s.warpdrive.block.passive;
|
||||
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.client.ClientProxy;
|
||||
|
||||
import net.minecraft.block.BlockTorch;
|
||||
import net.minecraft.block.SoundType;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
package cr0s.warpdrive.block.weapon;
|
||||
|
||||
import cr0s.warpdrive.Commons;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import cr0s.warpdrive.render.ClientCameraHandler;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
|
@ -12,13 +19,8 @@ import net.minecraft.util.EnumHand;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.text.TextComponentTranslation;
|
||||
import net.minecraft.world.World;
|
||||
import cr0s.warpdrive.WarpDrive;
|
||||
import cr0s.warpdrive.block.BlockAbstractContainer;
|
||||
import cr0s.warpdrive.render.ClientCameraHandler;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraftforge.fml.common.registry.GameRegistry;
|
||||
|
||||
public class BlockLaserCamera extends BlockAbstractContainer {
|
||||
|
||||
|
@ -36,20 +38,15 @@ public class BlockLaserCamera extends BlockAbstractContainer {
|
|||
return new TileEntityLaserCamera();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int quantityDropped(Random par1Random) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, BlockPos blockPos, IBlockState blockState, EntityPlayer entityPlayer, EnumHand hand, @Nullable ItemStack itemStackHeld, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
if (itemStackHeld == null) {
|
||||
TileEntity tileEntity = world.getTileEntity(blockPos);
|
||||
if (!ClientCameraHandler.isOverlayEnabled) {
|
||||
if (tileEntity instanceof TileEntityLaserCamera) {
|
||||
WarpDrive.addChatMessage(entityPlayer, ((TileEntityLaserCamera) tileEntity).getStatus());
|
||||
Commons.addChatMessage(entityPlayer, ((TileEntityLaserCamera) tileEntity).getStatus());
|
||||
} else {
|
||||
WarpDrive.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix",
|
||||
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.guide.prefix",
|
||||
getLocalizedName()).appendSibling(new TextComponentTranslation("warpdrive.error.badTileEntity")));
|
||||
WarpDrive.logger.error("Block " + this + " with invalid tile entity " + tileEntity);
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue