Implemented remote controller for ships

- explicitly warn players of the new 'remote' nature of the controller
- more explicit boot screen in LUA scripts for CC and OC
- add core signature parameter
This commit is contained in:
Unknown 2019-05-07 01:42:01 +02:00 committed by unknown
parent 2dce824a1c
commit a65a00e2d2
32 changed files with 628 additions and 293 deletions

View file

@ -889,8 +889,8 @@ public class Commons {
public static void messageToAllPlayersInArea(@Nonnull final IStarMapRegistryTileEntity tileEntity, @Nonnull final WarpDriveText textComponent) { public static void messageToAllPlayersInArea(@Nonnull final IStarMapRegistryTileEntity tileEntity, @Nonnull final WarpDriveText textComponent) {
assert tileEntity instanceof TileEntity; assert tileEntity instanceof TileEntity;
final AxisAlignedBB starMapArea = tileEntity.getStarMapArea(); final AxisAlignedBB starMapArea = tileEntity.getStarMapArea();
final WarpDriveText messagePrefixed = Commons.getChatPrefix(tileEntity.getStarMapName()) final WarpDriveText messagePrefixed = Commons.getNamedPrefix(tileEntity.getSignatureName())
.appendSibling(textComponent); .appendSibling(textComponent);
WarpDrive.logger.info(String.format("%s messageToAllPlayersInArea: %s", WarpDrive.logger.info(String.format("%s messageToAllPlayersInArea: %s",
tileEntity, textComponent.getFormattedText())); tileEntity, textComponent.getFormattedText()));

View file

@ -1,21 +1,17 @@
package cr0s.warpdrive.api; package cr0s.warpdrive.api;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.data.EnumStarMapEntryType; import cr0s.warpdrive.data.EnumStarMapEntryType;
import cr0s.warpdrive.data.VectorI; import cr0s.warpdrive.data.VectorI;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import java.util.UUID; public interface IStarMapRegistryTileEntity extends ICoreSignature {
public interface IStarMapRegistryTileEntity {
// get the registry type // get the registry type
EnumStarMapEntryType getStarMapType(); EnumStarMapEntryType getStarMapType();
// get the unique id
UUID getUUID();
// get the area controlled by this tile entity // get the area controlled by this tile entity
AxisAlignedBB getStarMapArea(); AxisAlignedBB getStarMapArea();
@ -25,9 +21,6 @@ public interface IStarMapRegistryTileEntity {
// isolation rate from radars // isolation rate from radars
double getIsolationRate(); double getIsolationRate();
// name to report for Friend-or-Foe
String getStarMapName();
// report an update in the area // report an update in the area
void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState); void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState);
} }

View file

@ -0,0 +1,19 @@
package cr0s.warpdrive.api.computer;
import java.util.UUID;
public interface ICoreSignature {
String NAME_TAG = "name";
String UUID_LEAST_TAG = "uuidLeast";
String UUID_MOST_TAG = "uuidMost";
// get the unique id
UUID getSignatureUUID();
// get the name for Friend-or-Foe
String getSignatureName();
// update signature, returns false if the latest is immutable
boolean setSignature(final UUID uuidSignature, final String nameSignature);
}

View file

@ -1,5 +1,5 @@
package cr0s.warpdrive.api.computer; package cr0s.warpdrive.api.computer;
public interface IMultiBlockCoreOrController extends IMultiBlock { public interface IMultiBlockCoreOrController extends IMultiBlock, ICoreSignature {
} }

View file

@ -8,6 +8,7 @@ import cr0s.warpdrive.api.IBlockBase;
import cr0s.warpdrive.api.IBlockUpdateDetector; import cr0s.warpdrive.api.IBlockUpdateDetector;
import cr0s.warpdrive.api.IVideoChannel; import cr0s.warpdrive.api.IVideoChannel;
import cr0s.warpdrive.api.WarpDriveText; import cr0s.warpdrive.api.WarpDriveText;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.data.CameraRegistryItem; import cr0s.warpdrive.data.CameraRegistryItem;
import cr0s.warpdrive.data.EnumTier; import cr0s.warpdrive.data.EnumTier;
@ -295,6 +296,16 @@ public abstract class TileEntityAbstractBase extends TileEntity implements IBloc
} }
} }
@Nonnull
protected WarpDriveText getCoreSignatureStatus(final String nameSignature) {
// note: we only report 'undefined' status for Remote controllers
if (nameSignature != null && !nameSignature.isEmpty()) {
return new WarpDriveText(Commons.styleCorrect, "warpdrive.core_signature.status_line.defined",
nameSignature);
}
return new WarpDriveText();
}
public WarpDriveText getStatusHeader() { public WarpDriveText getStatusHeader() {
return new WarpDriveText(); return new WarpDriveText();
} }
@ -319,6 +330,14 @@ public abstract class TileEntityAbstractBase extends TileEntity implements IBloc
} }
} }
if (this instanceof ICoreSignature) {
// only show in item form or from client side
if ( world == null
|| world.isRemote ) {
message.append( getCoreSignatureStatus(((ICoreSignature) this).getSignatureName()) );
}
}
if (isUpgradeable()) { if (isUpgradeable()) {
message.append( getUpgradeStatus() ); message.append( getUpgradeStatus() );
} }

View file

@ -1,15 +1,19 @@
package cr0s.warpdrive.block; package cr0s.warpdrive.block;
import cr0s.warpdrive.Commons; import cr0s.warpdrive.Commons;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.api.computer.IEnergyConsumer; import cr0s.warpdrive.api.computer.IEnergyConsumer;
import cr0s.warpdrive.api.computer.IMultiBlockCoreOrController; import cr0s.warpdrive.api.computer.IMultiBlockCoreOrController;
import cr0s.warpdrive.api.computer.IMultiBlockCore; import cr0s.warpdrive.api.computer.IMultiBlockCore;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.UUID;
import net.minecraft.nbt.NBTTagCompound;
public abstract class TileEntityAbstractEnergyCoreOrController extends TileEntityAbstractEnergyConsumer implements IMultiBlockCoreOrController, IEnergyConsumer { public abstract class TileEntityAbstractEnergyCoreOrController extends TileEntityAbstractEnergyConsumer implements IMultiBlockCoreOrController, IEnergyConsumer {
// persistent properties // persistent properties
// (none) public UUID uuid = null;
// computed properties // computed properties
// (none) // (none)
@ -28,6 +32,53 @@ public abstract class TileEntityAbstractEnergyCoreOrController extends TileEntit
name = ((TileEntityAbstractEnergyCoreOrController) multiblockCore).name; name = ((TileEntityAbstractEnergyCoreOrController) multiblockCore).name;
} }
@Override
public void readFromNBT(final NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound);
uuid = new UUID(tagCompound.getLong(ICoreSignature.UUID_MOST_TAG), tagCompound.getLong(ICoreSignature.UUID_LEAST_TAG));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
uuid = UUID.randomUUID();
}
}
@Nonnull
@Override
public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) {
tagCompound = super.writeToNBT(tagCompound);
if (uuid != null) {
tagCompound.setLong(ICoreSignature.UUID_MOST_TAG, uuid.getMostSignificantBits());
tagCompound.setLong(ICoreSignature.UUID_LEAST_TAG, uuid.getLeastSignificantBits());
}
return tagCompound;
}
// writeItemDropNBT
@Override
public UUID getSignatureUUID() {
return uuid;
}
@Override
public String getSignatureName() {
return name;
}
@Override
public boolean setSignature(final UUID uuidSignature, final String nameSignature) {
if (this instanceof IMultiBlockCore) {
return false;
}
uuid = uuidSignature;
name = nameSignature;
return true;
}
// Common OC/CC methods // Common OC/CC methods
// (none) // (none)

View file

@ -2,6 +2,7 @@ package cr0s.warpdrive.block;
import cr0s.warpdrive.Commons; import cr0s.warpdrive.Commons;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.api.computer.IMachine; import cr0s.warpdrive.api.computer.IMachine;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
@ -23,7 +24,7 @@ import net.minecraftforge.fml.common.Optional;
public abstract class TileEntityAbstractMachine extends TileEntityAbstractInterfaced implements IMachine { public abstract class TileEntityAbstractMachine extends TileEntityAbstractInterfaced implements IMachine {
// persistent properties // persistent properties
public String name = "default"; public String name = "";
protected boolean isEnabled = true; protected boolean isEnabled = true;
// allow only one computation at a time // allow only one computation at a time
@ -70,7 +71,7 @@ public abstract class TileEntityAbstractMachine extends TileEntityAbstractInterf
public void readFromNBT(final NBTTagCompound tagCompound) { public void readFromNBT(final NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound); super.readFromNBT(tagCompound);
name = tagCompound.getString("name"); name = tagCompound.getString(ICoreSignature.NAME_TAG);
isEnabled = !tagCompound.hasKey("isEnabled") || tagCompound.getBoolean("isEnabled"); isEnabled = !tagCompound.hasKey("isEnabled") || tagCompound.getBoolean("isEnabled");
} }
@ -79,7 +80,9 @@ public abstract class TileEntityAbstractMachine extends TileEntityAbstractInterf
public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) { public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) {
tagCompound = super.writeToNBT(tagCompound); tagCompound = super.writeToNBT(tagCompound);
tagCompound.setString("name", name); if (!name.equals("")) {
tagCompound.setString(ICoreSignature.NAME_TAG, name);
}
tagCompound.setBoolean("isEnabled", isEnabled); tagCompound.setBoolean("isEnabled", isEnabled);
return tagCompound; return tagCompound;
} }

View file

@ -1,16 +1,14 @@
package cr0s.warpdrive.block.atomic; package cr0s.warpdrive.block.atomic;
import cr0s.warpdrive.api.IStarMapRegistryTileEntity; import cr0s.warpdrive.api.IStarMapRegistryTileEntity;
import cr0s.warpdrive.block.TileEntityAbstractEnergy; import cr0s.warpdrive.block.TileEntityAbstractEnergyCoreOrController;
import cr0s.warpdrive.data.EnumStarMapEntryType; import cr0s.warpdrive.data.EnumStarMapEntryType;
import cr0s.warpdrive.data.VectorI; import cr0s.warpdrive.data.VectorI;
import java.util.UUID;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
public class TileEntityAcceleratorController extends TileEntityAbstractEnergy implements IStarMapRegistryTileEntity { public class TileEntityAcceleratorController extends TileEntityAbstractEnergyCoreOrController implements IStarMapRegistryTileEntity {
public TileEntityAcceleratorController() { public TileEntityAcceleratorController() {
super(); super();
@ -27,11 +25,6 @@ public class TileEntityAcceleratorController extends TileEntityAbstractEnergy im
return EnumStarMapEntryType.ACCELERATOR; return EnumStarMapEntryType.ACCELERATOR;
} }
@Override
public UUID getUUID() {
return null;
}
@Override @Override
public AxisAlignedBB getStarMapArea() { public AxisAlignedBB getStarMapArea() {
return null; return null;
@ -47,13 +40,13 @@ public class TileEntityAcceleratorController extends TileEntityAbstractEnergy im
return 0.0; return 0.0;
} }
@Override
public String getStarMapName() {
return null;
}
@Override @Override
public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) { public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) {
} }
@Override
public Object[] getEnergyRequired() {
return new Object[0];
}
} }

View file

@ -1,16 +1,24 @@
package cr0s.warpdrive.block.movement; package cr0s.warpdrive.block.movement;
import cr0s.warpdrive.Commons;
import cr0s.warpdrive.api.WarpDriveText;
import cr0s.warpdrive.block.BlockAbstractContainer; import cr0s.warpdrive.block.BlockAbstractContainer;
import cr0s.warpdrive.data.EnumShipCommand; import cr0s.warpdrive.data.EnumShipCommand;
import cr0s.warpdrive.data.EnumTier; import cr0s.warpdrive.data.EnumTier;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockPos.MutableBlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
public class BlockShipController extends BlockAbstractContainer { public class BlockShipController extends BlockAbstractContainer {
@ -51,4 +59,36 @@ public class BlockShipController extends BlockAbstractContainer {
public TileEntity createNewTileEntity(@Nonnull final World world, final int metadata) { public TileEntity createNewTileEntity(@Nonnull final World world, final int metadata) {
return new TileEntityShipController(); return new TileEntityShipController();
} }
@Nullable
@Override
public ItemBlock createItemBlock() {
return new ItemBlockController(this);
}
@Override
public boolean canPlaceBlockOnSide(@Nonnull final World world, @Nonnull final BlockPos blockPos, final EnumFacing side) {
// ancestor
if (!super.canPlaceBlockOnSide(world, blockPos, side)) {
return false;
}
if (side == EnumFacing.UP || side == EnumFacing.DOWN) {
// highlight the breaking change when going from 1.7.10 to 1.10+
final MutableBlockPos mutableBlockPos = new MutableBlockPos(blockPos);
for (final EnumFacing enumFacing : EnumFacing.HORIZONTALS) {
mutableBlockPos.setPos(
blockPos.getX() + enumFacing.getXOffset(),
blockPos.getY() + enumFacing.getYOffset(),
blockPos.getZ() + enumFacing.getZOffset());
if (world.getBlockState(mutableBlockPos).getBlock() instanceof BlockShipCore) {
final EntityPlayer entityPlayer = world.getClosestPlayer(blockPos.getX() + 0.5D, blockPos.getY() + 0.5D, blockPos.getZ() + 0.5D, 5, false);
if (entityPlayer != null) {
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleWarning, "tile.warpdrive.movement.ship_controller.away_from_core"));
}
return false;
}
}
}
return true;
}
} }

View file

@ -0,0 +1,170 @@
package cr0s.warpdrive.block.movement;
import cr0s.warpdrive.Commons;
import cr0s.warpdrive.api.WarpDriveText;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.api.computer.IMultiBlockCoreOrController;
import cr0s.warpdrive.block.ItemBlockAbstractBase;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.UUID;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class ItemBlockController extends ItemBlockAbstractBase {
public ItemBlockController(final Block block) {
super(block, false, false);
setMaxStackSize(1);
}
protected static String getName(@Nonnull final ItemStack itemStack) {
if (!(itemStack.getItem() instanceof ItemBlockController)) {
return "";
}
final NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound == null) {
return "";
}
final String name = tagCompound.getString(ICoreSignature.NAME_TAG);
final UUID uuid = new UUID(tagCompound.getLong(ICoreSignature.UUID_MOST_TAG), tagCompound.getLong(ICoreSignature.UUID_LEAST_TAG));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
return "";
}
return name;
}
@Nullable
protected static UUID getSignature(@Nonnull final ItemStack itemStack) {
if (!(itemStack.getItem() instanceof ItemBlockController)) {
return null;
}
final NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound == null) {
return null;
}
final UUID uuid = new UUID(tagCompound.getLong(ICoreSignature.UUID_MOST_TAG), tagCompound.getLong(ICoreSignature.UUID_LEAST_TAG));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
return null;
}
return uuid;
}
protected static ItemStack setNameAndSignature(@Nonnull final ItemStack itemStack, @Nullable final String name, @Nullable final UUID uuid) {
if (!(itemStack.getItem() instanceof ItemBlockController)) {
return itemStack;
}
NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound == null) {
tagCompound = new NBTTagCompound();
}
if ( name == null
|| name.isEmpty() ) {
tagCompound.removeTag(ICoreSignature.NAME_TAG);
} else {
tagCompound.setString(ICoreSignature.NAME_TAG, name);
}
if (uuid == null) {
tagCompound.removeTag(ICoreSignature.UUID_MOST_TAG);
tagCompound.removeTag(ICoreSignature.UUID_LEAST_TAG);
} else {
tagCompound.setLong(ICoreSignature.UUID_MOST_TAG, uuid.getMostSignificantBits());
tagCompound.setLong(ICoreSignature.UUID_LEAST_TAG, uuid.getLeastSignificantBits());
}
itemStack.setTagCompound(tagCompound);
return itemStack;
}
@Nonnull
@Override
public EnumActionResult onItemUse(@Nonnull final EntityPlayer entityPlayer,
@Nonnull final World world, @Nonnull final BlockPos blockPos, @Nonnull final EnumHand hand,
@Nonnull final EnumFacing facing, final float hitX, final float hitY, final float hitZ) {
if (world.isRemote) {
return EnumActionResult.FAIL;
}
// get context
final ItemStack itemStackHeld = entityPlayer.getHeldItem(hand);
if (itemStackHeld.isEmpty()) {
return EnumActionResult.FAIL;
}
// check if clicked block can be interacted with
final IBlockState blockState = world.getBlockState(blockPos);
final TileEntity tileEntity = world.getTileEntity(blockPos);
if (!(tileEntity instanceof IMultiBlockCoreOrController)) {
return super.onItemUse(entityPlayer, world, blockPos, hand, facing, hitX, hitY, hitZ);
}
if (!entityPlayer.canPlayerEdit(blockPos, facing, itemStackHeld)) {
return EnumActionResult.FAIL;
}
final UUID uuidSignatureFromItem = getSignature(itemStackHeld);
final String nameSignatureFromItem = getName(itemStackHeld);
final UUID uuidSignatureFromBlock = ((IMultiBlockCoreOrController) tileEntity).getSignatureUUID();
final String nameSignatureFromBlock = ((IMultiBlockCoreOrController) tileEntity).getSignatureName();
final String nameItem = itemStackHeld.getDisplayName();
final String nameBlock = Commons.format(blockState, world, blockPos);
if (entityPlayer.isSneaking()) {// get block signature
if ( uuidSignatureFromBlock == null
|| nameSignatureFromBlock == null
|| nameSignatureFromBlock.isEmpty() ) {
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleWarning, "warpdrive.core_signature.get_missing",
null, nameItem, nameBlock ));
} else if (uuidSignatureFromBlock.equals(uuidSignatureFromItem)) {
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleCorrect, "warpdrive.core_signature.get_same",
nameSignatureFromItem, nameItem, nameBlock ));
} else {
final ItemStack itemStackNew = setNameAndSignature(itemStackHeld, nameSignatureFromBlock, uuidSignatureFromBlock);
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleCorrect, "warpdrive.core_signature.get",
nameSignatureFromBlock, nameItem, nameBlock ));
world.playSound(entityPlayer.posX + 0.5D, entityPlayer.posY + 0.5D, entityPlayer.posZ + 0.5D,
SoundEvents.ENTITY_ZOMBIE_VILLAGER_CURE, SoundCategory.PLAYERS,
1.0F, 1.8F + 0.2F * world.rand.nextFloat(), false);
}
} else {// set block signature
if (uuidSignatureFromItem == null) {
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleWarning, "warpdrive.core_signature.set_missing",
null, nameItem, nameBlock ));
} else if (uuidSignatureFromItem.equals(uuidSignatureFromBlock)) {
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleCorrect, "warpdrive.core_signature.set_same",
nameSignatureFromItem, nameItem, nameBlock ));
} else {
final boolean isSuccess = ((IMultiBlockCoreOrController) tileEntity).setSignature(uuidSignatureFromItem, nameSignatureFromItem);
if (isSuccess) {
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleCorrect, "warpdrive.core_signature.set",
nameSignatureFromItem, nameItem, nameBlock));
world.playSound(entityPlayer.posX + 0.5D, entityPlayer.posY + 0.5D, entityPlayer.posZ + 0.5D,
SoundEvents.ENTITY_ZOMBIE_VILLAGER_CONVERTED, SoundCategory.PLAYERS,
1.0F, 1.2F + 0.2F * world.rand.nextFloat(), false);
} else {
Commons.addChatMessage(entityPlayer, new WarpDriveText(Commons.styleWarning, "warpdrive.core_signature.set_not_supported",
null, nameItem, nameBlock ));
}
}
}
return EnumActionResult.SUCCESS;
}
}

View file

@ -4,7 +4,6 @@ import cr0s.warpdrive.Commons;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IItemTransporterBeacon; import cr0s.warpdrive.api.IItemTransporterBeacon;
import cr0s.warpdrive.api.computer.ITransporterCore; import cr0s.warpdrive.api.computer.ITransporterCore;
import cr0s.warpdrive.block.ItemBlockAbstractBase;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
import cr0s.warpdrive.data.EnergyWrapper; import cr0s.warpdrive.data.EnergyWrapper;
@ -35,10 +34,10 @@ import java.util.UUID;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemBlockTransporterBeacon extends ItemBlockAbstractBase implements IItemTransporterBeacon { public class ItemBlockTransporterBeacon extends ItemBlockController implements IItemTransporterBeacon {
public ItemBlockTransporterBeacon(final Block block) { public ItemBlockTransporterBeacon(final Block block) {
super(block, false, false); super(block);
setMaxStackSize(1); setMaxStackSize(1);
setMaxDamage(100 * 8); setMaxDamage(100 * 8);
@ -63,75 +62,7 @@ public class ItemBlockTransporterBeacon extends ItemBlockAbstractBase implements
return new ModelResourceLocation(resourceLocation.toString() + "-item", "inventory"); return new ModelResourceLocation(resourceLocation.toString() + "-item", "inventory");
} }
private static String getTransporterName(final ItemStack itemStack) { private static int getEnergy(@Nonnull final ItemStack itemStack) {
if (!(itemStack.getItem() instanceof ItemBlockTransporterBeacon)) {
return "";
}
final NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound == null) {
return "";
}
final String name = tagCompound.getString("name");
final UUID uuid = new UUID(tagCompound.getLong("uuidMost"), tagCompound.getLong("uuidLeast"));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
return "";
}
return name;
}
private static ItemStack setTransporterName(final ItemStack itemStack, final String name) {
if (!(itemStack.getItem() instanceof ItemBlockTransporterBeacon)) {
return itemStack;
}
NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound == null) {
tagCompound = new NBTTagCompound();
}
if ( name == null
|| name.isEmpty() ) {
tagCompound.removeTag("name");
} else {
tagCompound.setString("name", name);
}
itemStack.setTagCompound(tagCompound);
return itemStack;
}
private static UUID getTransporterSignature(final ItemStack itemStack) {
if (!(itemStack.getItem() instanceof ItemBlockTransporterBeacon)) {
return null;
}
final NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound == null) {
return null;
}
final UUID uuid = new UUID(tagCompound.getLong("uuidMost"), tagCompound.getLong("uuidLeast"));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
return null;
}
return uuid;
}
private static ItemStack setTransporterSignature(final ItemStack itemStack, final UUID uuid) {
if (!(itemStack.getItem() instanceof ItemBlockTransporterBeacon)) {
return itemStack;
}
NBTTagCompound tagCompound = itemStack.getTagCompound();
if (tagCompound == null) {
tagCompound = new NBTTagCompound();
}
if (uuid == null) {
tagCompound.removeTag("uuidMost");
tagCompound.removeTag("uuidLeast");
} else {
tagCompound.setLong("uuidMost", uuid.getMostSignificantBits());
tagCompound.setLong("uuidLeast", uuid.getLeastSignificantBits());
}
itemStack.setTagCompound(tagCompound);
return itemStack;
}
private static int getEnergy(final ItemStack itemStack) {
if (!(itemStack.getItem() instanceof ItemBlockTransporterBeacon)) { if (!(itemStack.getItem() instanceof ItemBlockTransporterBeacon)) {
return 0; return 0;
} }
@ -232,11 +163,11 @@ public class ItemBlockTransporterBeacon extends ItemBlockAbstractBase implements
return EnumActionResult.FAIL; return EnumActionResult.FAIL;
} }
final UUID uuidBeacon = getTransporterSignature(itemStackHeld); final UUID uuidBeacon = getSignature(itemStackHeld);
final String nameBeacon = getTransporterName(itemStackHeld); final String nameBeacon = getName(itemStackHeld);
final UUID uuidTransporter = ((ITransporterCore) tileEntity).getUUID(); final UUID uuidTransporter = ((ITransporterCore) tileEntity).getSignatureUUID();
if (entityPlayer.isSneaking()) {// update transporter signature if (entityPlayer.isSneaking()) {// update transporter signature
final String nameTransporter = ((ITransporterCore) tileEntity).getStarMapName(); final String nameTransporter = ((ITransporterCore) tileEntity).getSignatureName();
if ( uuidTransporter == null if ( uuidTransporter == null
|| nameTransporter == null || nameTransporter == null
@ -248,8 +179,7 @@ public class ItemBlockTransporterBeacon extends ItemBlockAbstractBase implements
nameTransporter)); nameTransporter));
} else { } else {
final ItemStack itemStackNew = setTransporterName(itemStackHeld, nameTransporter); final ItemStack itemStackNew = setNameAndSignature(itemStackHeld, nameTransporter, uuidTransporter);
setTransporterSignature(itemStackNew, uuidTransporter);
Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.transporter_signature.get", Commons.addChatMessage(entityPlayer, new TextComponentTranslation("warpdrive.transporter_signature.get",
nameTransporter)); nameTransporter));
world.playSound(entityPlayer.posX + 0.5D, entityPlayer.posY + 0.5D, entityPlayer.posZ + 0.5D, world.playSound(entityPlayer.posX + 0.5D, entityPlayer.posY + 0.5D, entityPlayer.posZ + 0.5D,

View file

@ -3,10 +3,9 @@ package cr0s.warpdrive.block.movement;
import cr0s.warpdrive.Commons; import cr0s.warpdrive.Commons;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IStarMapRegistryTileEntity; import cr0s.warpdrive.api.IStarMapRegistryTileEntity;
import cr0s.warpdrive.block.TileEntityAbstractMachine; import cr0s.warpdrive.block.TileEntityAbstractEnergyCoreOrController;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
import cr0s.warpdrive.data.EnumStarMapEntryType; import cr0s.warpdrive.data.EnumStarMapEntryType;
import cr0s.warpdrive.data.EnumTier;
import cr0s.warpdrive.data.Vector3; import cr0s.warpdrive.data.Vector3;
import cr0s.warpdrive.data.VectorI; import cr0s.warpdrive.data.VectorI;
import cr0s.warpdrive.render.EntityFXBoundingBox; import cr0s.warpdrive.render.EntityFXBoundingBox;
@ -26,7 +25,7 @@ import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
public class TileEntityJumpGateCore extends TileEntityAbstractMachine implements IStarMapRegistryTileEntity { public class TileEntityJumpGateCore extends TileEntityAbstractEnergyCoreOrController implements IStarMapRegistryTileEntity {
private static final int BOUNDING_BOX_INTERVAL_TICKS = 60; private static final int BOUNDING_BOX_INTERVAL_TICKS = 60;
@ -149,10 +148,6 @@ public class TileEntityJumpGateCore extends TileEntityAbstractMachine implements
public void readFromNBT(final NBTTagCompound tagCompound) { public void readFromNBT(final NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound); super.readFromNBT(tagCompound);
uuid = new UUID(tagCompound.getLong("uuidMost"), tagCompound.getLong("uuidLeast"));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
uuid = UUID.randomUUID();
}
minX = tagCompound.getInteger("minX"); minX = tagCompound.getInteger("minX");
maxX = tagCompound.getInteger("maxX"); maxX = tagCompound.getInteger("maxX");
minY = tagCompound.getInteger("minY"); minY = tagCompound.getInteger("minY");
@ -168,10 +163,6 @@ public class TileEntityJumpGateCore extends TileEntityAbstractMachine implements
public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) { public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) {
tagCompound = super.writeToNBT(tagCompound); tagCompound = super.writeToNBT(tagCompound);
if (uuid != null) {
tagCompound.setLong("uuidMost", uuid.getMostSignificantBits());
tagCompound.setLong("uuidLeast", uuid.getLeastSignificantBits());
}
tagCompound.setInteger("minX", minX); tagCompound.setInteger("minX", minX);
tagCompound.setInteger("maxX", maxX); tagCompound.setInteger("maxX", maxX);
tagCompound.setInteger("minY", minY); tagCompound.setInteger("minY", minY);
@ -221,11 +212,6 @@ public class TileEntityJumpGateCore extends TileEntityAbstractMachine implements
return EnumStarMapEntryType.JUMP_GATE; return EnumStarMapEntryType.JUMP_GATE;
} }
@Override
public UUID getUUID() {
return uuid;
}
@Override @Override
public AxisAlignedBB getStarMapArea() { public AxisAlignedBB getStarMapArea() {
return new AxisAlignedBB(minX, minY, minZ, maxX, maxY, maxZ); return new AxisAlignedBB(minX, minY, minZ, maxX, maxY, maxZ);
@ -241,17 +227,18 @@ public class TileEntityJumpGateCore extends TileEntityAbstractMachine implements
return 0.0D; return 0.0D;
} }
@Override
public String getStarMapName() {
return name;
}
@Override @Override
public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) { public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) {
// no operation // no operation
} }
// Common OC/CC methods // Common OC/CC methods
@Override
public Object[] getEnergyRequired() {
return new Object[0];
}
public Object[] area(final Object[] arguments) { public Object[] area(final Object[] arguments) {
try { try {
if (arguments != null && arguments.length == 6) { if (arguments != null && arguments.length == 6) {

View file

@ -1,14 +1,21 @@
package cr0s.warpdrive.block.movement; package cr0s.warpdrive.block.movement;
import cr0s.warpdrive.Commons;
import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.WarpDriveText;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
import cr0s.warpdrive.data.CelestialObjectManager; import cr0s.warpdrive.data.CelestialObjectManager;
import cr0s.warpdrive.data.EnumStarMapEntryType;
import cr0s.warpdrive.data.StarMapRegistryItem;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.Collections; import java.util.Collections;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.WorldServer;
public class TileEntityShipController extends TileEntityAbstractShipController { public class TileEntityShipController extends TileEntityAbstractShipController {
@ -19,6 +26,7 @@ public class TileEntityShipController extends TileEntityAbstractShipController {
private final int updateInterval_ticks = 20 * WarpDriveConfig.SHIP_CONTROLLER_UPDATE_INTERVAL_SECONDS; private final int updateInterval_ticks = 20 * WarpDriveConfig.SHIP_CONTROLLER_UPDATE_INTERVAL_SECONDS;
private int updateTicks = updateInterval_ticks; private int updateTicks = updateInterval_ticks;
private int bootTicks = 20; private int bootTicks = 20;
private WarpDriveText reason = new WarpDriveText();
private WeakReference<TileEntityShipCore> tileEntityShipCoreWeakReference = null; private WeakReference<TileEntityShipCore> tileEntityShipCoreWeakReference = null;
@ -49,22 +57,8 @@ public class TileEntityShipController extends TileEntityAbstractShipController {
if (updateTicks <= 0) { if (updateTicks <= 0) {
updateTicks = updateInterval_ticks; updateTicks = updateInterval_ticks;
final TileEntityShipCore tileEntityShipCore = findCoreBlock(); reason = new WarpDriveText();
if (tileEntityShipCore != null) { final TileEntityShipCore tileEntityShipCore = updateLink(reason);
if ( tileEntityShipCoreWeakReference == null
|| tileEntityShipCore != tileEntityShipCoreWeakReference.get() ) {
tileEntityShipCoreWeakReference = new WeakReference<>(tileEntityShipCore);
}
final boolean isSynchronized = tileEntityShipCore.refreshLink(this);
if (isSynchronized) {
onCoreUpdated(tileEntityShipCore);
if ( !tileEntityShipCore.isCommandConfirmed
&& isCommandConfirmed ) {
tileEntityShipCore.command(new Object[] { enumShipCommand.getName(), true });
}
}
}
updateBlockState(null, BlockShipController.COMMAND, enumShipCommand); updateBlockState(null, BlockShipController.COMMAND, enumShipCommand);
} }
@ -90,30 +84,70 @@ public class TileEntityShipController extends TileEntityAbstractShipController {
return tagCompound; return tagCompound;
} }
private TileEntityShipCore findCoreBlock() { @Nullable
TileEntity tileEntity; private TileEntityShipCore updateLink(final WarpDriveText reason) {
// validate existing link
tileEntity = world.getTileEntity(pos.add(1, 0, 0)); TileEntityShipCore tileEntityShipCore = tileEntityShipCoreWeakReference != null ? tileEntityShipCoreWeakReference.get() : null;
if (tileEntity instanceof TileEntityShipCore) { if ( tileEntityShipCore == null
return (TileEntityShipCore) tileEntity; || !tileEntityShipCore.getSignatureUUID().equals(uuid) ) {
tileEntityShipCore = null;
tileEntityShipCoreWeakReference = null;
} }
tileEntity = world.getTileEntity(pos.add(-1, 0, 0)); // refresh as needed
if (tileEntity instanceof TileEntityShipCore) { // note: it's up to players to break the link, so if the world is partially restored we won't lose the link
return (TileEntityShipCore) tileEntity; if (tileEntityShipCore == null) {
final StarMapRegistryItem starMapRegistryItem = WarpDrive.starMap.getByUUID(EnumStarMapEntryType.SHIP, uuid);
if (starMapRegistryItem == null) {
reason.append(Commons.styleWarning, "warpdrive.core_signature.status_line.unknown_core_signature");
return null;
}
final WorldServer worldServer = starMapRegistryItem.getWorldServerIfLoaded();
if (worldServer == null) {
reason.append(Commons.styleWarning, "warpdrive.core_signature.status_line.world_not_loaded");
return null;
}
final TileEntity tileEntity = worldServer.getTileEntity(starMapRegistryItem.getBlockPos());
if ( !(tileEntity instanceof TileEntityShipCore)
|| tileEntity.isInvalid()
|| !((TileEntityShipCore) tileEntity).getSignatureUUID().equals(uuid) ) {
reason.append(Commons.styleWarning, "warpdrive.core_signature.status_line.unknown_core_signature");
return null;
}
tileEntityShipCore = (TileEntityShipCore) tileEntity;
tileEntityShipCoreWeakReference = new WeakReference<>(tileEntityShipCore);
}
// (tileEntityShipCore is defined and valid)
final boolean isSynchronized = tileEntityShipCore.refreshLink(this);
if (isSynchronized) {
onCoreUpdated(tileEntityShipCore);
// send command as soon as link is re-established
if ( !tileEntityShipCore.isCommandConfirmed
&& isCommandConfirmed ) {
tileEntityShipCore.command(new Object[] { enumShipCommand.getName(), true });
}
} }
tileEntity = world.getTileEntity(pos.add(0, 0, 1)); return tileEntityShipCore;
if (tileEntity instanceof TileEntityShipCore) { }
return (TileEntityShipCore) tileEntity;
@Nonnull
@Override
protected WarpDriveText getCoreSignatureStatus(final String nameSignature) {
if (nameSignature == null || nameSignature.isEmpty()) {
return new WarpDriveText(Commons.styleWarning, "warpdrive.core_signature.status_line.undefined");
} }
return super.getCoreSignatureStatus(nameSignature);
tileEntity = world.getTileEntity(pos.add(0, 0, -1)); }
if (tileEntity instanceof TileEntityShipCore) {
return (TileEntityShipCore) tileEntity; @Override
public WarpDriveText getStatus() {
if (reason.getUnformattedText().isEmpty()) {
return super.getStatus();
} else {
return super.getStatus().append(reason);
} }
return null;
} }
// Common OC/CC methods // Common OC/CC methods
@ -169,7 +203,7 @@ public class TileEntityShipController extends TileEntityAbstractShipController {
if (tileEntityShipCore == null) { if (tileEntityShipCore == null) {
return super.dim_positive(null); // return current local values return super.dim_positive(null); // return current local values
} }
return new Object[] { tileEntityShipCore.dim_positive(arguments) }; return tileEntityShipCore.dim_positive(arguments);
} }
@Override @Override
@ -178,7 +212,7 @@ public class TileEntityShipController extends TileEntityAbstractShipController {
if (tileEntityShipCore == null) { if (tileEntityShipCore == null) {
return super.dim_negative(null); // return current local values return super.dim_negative(null); // return current local values
} }
return new Object[] { tileEntityShipCore.dim_negative(arguments) }; return tileEntityShipCore.dim_negative(arguments);
} }
@Override @Override
@ -199,6 +233,15 @@ public class TileEntityShipController extends TileEntityAbstractShipController {
return tileEntityShipCore.getEnergyStatus(); return tileEntityShipCore.getEnergyStatus();
} }
@Override
public Object[] command(final Object[] arguments) {
final TileEntityShipCore tileEntityShipCore = tileEntityShipCoreWeakReference == null ? null : tileEntityShipCoreWeakReference.get();
if (tileEntityShipCore == null) {
return null;
}
return tileEntityShipCore.command(arguments);
}
@Override @Override
public Object[] getShipSize() { public Object[] getShipSize() {
final TileEntityShipCore tileEntityShipCore = tileEntityShipCoreWeakReference == null ? null : tileEntityShipCoreWeakReference.get(); final TileEntityShipCore tileEntityShipCore = tileEntityShipCoreWeakReference == null ? null : tileEntityShipCoreWeakReference.get();

View file

@ -67,7 +67,6 @@ public class TileEntityShipCore extends TileEntityAbstractShipController impleme
// persistent properties // persistent properties
public EnumFacing facing; public EnumFacing facing;
public UUID uuid = null;
private double isolationRate = 0.0D; private double isolationRate = 0.0D;
private final Set<BlockPos> blockPosShipControllers = new CopyOnWriteArraySet<>(); private final Set<BlockPos> blockPosShipControllers = new CopyOnWriteArraySet<>();
private int ticksCooldown = 0; private int ticksCooldown = 0;
@ -184,7 +183,9 @@ public class TileEntityShipCore extends TileEntityAbstractShipController impleme
} }
// enforce emergency stop // enforce emergency stop
if (!isEnabled) { if ( !isEnabled
|| ( isCommandConfirmed
&& enumShipCommand == EnumShipCommand.OFFLINE ) ) {
stateCurrent = EnumShipCoreState.IDLE; stateCurrent = EnumShipCoreState.IDLE;
} }
@ -1128,10 +1129,6 @@ public class TileEntityShipCore extends TileEntityAbstractShipController impleme
public void readFromNBT(final NBTTagCompound tagCompound) { public void readFromNBT(final NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound); super.readFromNBT(tagCompound);
uuid = new UUID(tagCompound.getLong("uuidMost"), tagCompound.getLong("uuidLeast"));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
uuid = UUID.randomUUID();
}
isolationRate = tagCompound.getDouble("isolationRate"); isolationRate = tagCompound.getDouble("isolationRate");
ticksCooldown = tagCompound.getInteger("cooldownTime"); ticksCooldown = tagCompound.getInteger("cooldownTime");
warmupTime_ticks = tagCompound.getInteger("warmupTime"); warmupTime_ticks = tagCompound.getInteger("warmupTime");
@ -1142,10 +1139,7 @@ public class TileEntityShipCore extends TileEntityAbstractShipController impleme
@Override @Override
public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) { public NBTTagCompound writeToNBT(NBTTagCompound tagCompound) {
tagCompound = super.writeToNBT(tagCompound); tagCompound = super.writeToNBT(tagCompound);
if (uuid != null) {
tagCompound.setLong("uuidMost", uuid.getMostSignificantBits());
tagCompound.setLong("uuidLeast", uuid.getLeastSignificantBits());
}
tagCompound.setDouble("isolationRate", isolationRate); tagCompound.setDouble("isolationRate", isolationRate);
tagCompound.setInteger("cooldownTime", ticksCooldown); tagCompound.setInteger("cooldownTime", ticksCooldown);
tagCompound.setInteger("warmupTime", warmupTime_ticks); tagCompound.setInteger("warmupTime", warmupTime_ticks);
@ -1198,17 +1192,17 @@ public class TileEntityShipCore extends TileEntityAbstractShipController impleme
super.invalidate(); super.invalidate();
} }
@Override
public String getSignatureName() {
return name;
}
// IStarMapRegistryTileEntity overrides // IStarMapRegistryTileEntity overrides
@Override @Override
public EnumStarMapEntryType getStarMapType() { public EnumStarMapEntryType getStarMapType() {
return EnumStarMapEntryType.SHIP; return EnumStarMapEntryType.SHIP;
} }
@Override
public UUID getUUID() {
return uuid;
}
@Override @Override
public AxisAlignedBB getStarMapArea() { public AxisAlignedBB getStarMapArea() {
return new AxisAlignedBB(minX, minY, minZ, maxX + 1.0D, maxY + 1.0D, maxZ + 1.0D); return new AxisAlignedBB(minX, minY, minZ, maxX + 1.0D, maxY + 1.0D, maxZ + 1.0D);
@ -1224,11 +1218,6 @@ public class TileEntityShipCore extends TileEntityAbstractShipController impleme
return isolationRate; return isolationRate;
} }
@Override
public String getStarMapName() {
return name.isEmpty() ? "ShipCore" : name;
}
@Override @Override
public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) { public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) {
// no operation // no operation

View file

@ -3,6 +3,7 @@ package cr0s.warpdrive.block.movement;
import cr0s.warpdrive.Commons; import cr0s.warpdrive.Commons;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.WarpDriveText; import cr0s.warpdrive.api.WarpDriveText;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.api.computer.ITransporterBeacon; import cr0s.warpdrive.api.computer.ITransporterBeacon;
import cr0s.warpdrive.block.TileEntityAbstractEnergyConsumer; import cr0s.warpdrive.block.TileEntityAbstractEnergyConsumer;
import cr0s.warpdrive.config.WarpDriveConfig; import cr0s.warpdrive.config.WarpDriveConfig;
@ -228,9 +229,9 @@ public class TileEntityTransporterBeacon extends TileEntityAbstractEnergyConsume
tagCompound = super.writeToNBT(tagCompound); tagCompound = super.writeToNBT(tagCompound);
if (uuidTransporterCore != null) { if (uuidTransporterCore != null) {
tagCompound.setString("name", nameTransporterCore); tagCompound.setString(ICoreSignature.NAME_TAG, nameTransporterCore);
tagCompound.setLong("uuidMost", uuidTransporterCore.getMostSignificantBits()); tagCompound.setLong(ICoreSignature.UUID_MOST_TAG, uuidTransporterCore.getMostSignificantBits());
tagCompound.setLong("uuidLeast", uuidTransporterCore.getLeastSignificantBits()); tagCompound.setLong(ICoreSignature.UUID_LEAST_TAG, uuidTransporterCore.getLeastSignificantBits());
} }
tagCompound.setInteger("tickDeploying", tickDeploying); tagCompound.setInteger("tickDeploying", tickDeploying);
@ -241,8 +242,8 @@ public class TileEntityTransporterBeacon extends TileEntityAbstractEnergyConsume
public void readFromNBT(final NBTTagCompound tagCompound) { public void readFromNBT(final NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound); super.readFromNBT(tagCompound);
nameTransporterCore = tagCompound.getString("name"); nameTransporterCore = tagCompound.getString(ICoreSignature.NAME_TAG);
uuidTransporterCore = new UUID(tagCompound.getLong("uuidMost"), tagCompound.getLong("uuidLeast")); uuidTransporterCore = new UUID(tagCompound.getLong(ICoreSignature.UUID_MOST_TAG), tagCompound.getLong(ICoreSignature.UUID_LEAST_TAG));
if (uuidTransporterCore.getMostSignificantBits() == 0 && uuidTransporterCore.getLeastSignificantBits() == 0) { if (uuidTransporterCore.getMostSignificantBits() == 0 && uuidTransporterCore.getLeastSignificantBits() == 0) {
uuidTransporterCore = null; uuidTransporterCore = null;
nameTransporterCore = ""; nameTransporterCore = "";

View file

@ -6,9 +6,10 @@ import cr0s.warpdrive.api.IBeamFrequency;
import cr0s.warpdrive.api.IItemTransporterBeacon; import cr0s.warpdrive.api.IItemTransporterBeacon;
import cr0s.warpdrive.api.IStarMapRegistryTileEntity; import cr0s.warpdrive.api.IStarMapRegistryTileEntity;
import cr0s.warpdrive.api.WarpDriveText; import cr0s.warpdrive.api.WarpDriveText;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.api.computer.ITransporterBeacon; import cr0s.warpdrive.api.computer.ITransporterBeacon;
import cr0s.warpdrive.api.computer.ITransporterCore; import cr0s.warpdrive.api.computer.ITransporterCore;
import cr0s.warpdrive.block.TileEntityAbstractEnergyConsumer; import cr0s.warpdrive.block.TileEntityAbstractEnergyCoreOrController;
import cr0s.warpdrive.block.forcefield.BlockForceField; import cr0s.warpdrive.block.forcefield.BlockForceField;
import cr0s.warpdrive.block.forcefield.TileEntityForceField; import cr0s.warpdrive.block.forcefield.TileEntityForceField;
import cr0s.warpdrive.config.Dictionary; import cr0s.warpdrive.config.Dictionary;
@ -78,7 +79,7 @@ import net.minecraftforge.common.ForgeChunkManager.Type;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.Optional;
public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer implements ITransporterCore, IBeamFrequency, IStarMapRegistryTileEntity { public class TileEntityTransporterCore extends TileEntityAbstractEnergyCoreOrController implements ITransporterCore, IBeamFrequency, IStarMapRegistryTileEntity {
// persistent properties // persistent properties
private UUID uuid = null; private UUID uuid = null;
@ -531,11 +532,6 @@ public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer
return EnumStarMapEntryType.TRANSPORTER; return EnumStarMapEntryType.TRANSPORTER;
} }
@Override
public UUID getUUID() {
return uuid;
}
@Override @Override
public AxisAlignedBB getStarMapArea() { public AxisAlignedBB getStarMapArea() {
return new AxisAlignedBB( return new AxisAlignedBB(
@ -557,11 +553,6 @@ public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer
return 0.0D; return 0.0D;
} }
@Override
public String getStarMapName() {
return name;
}
@Override @Override
public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) { public void onBlockUpdatedInArea(final VectorI vector, final IBlockState blockState) {
// skip in case of explosion, etc. // skip in case of explosion, etc.
@ -1524,8 +1515,8 @@ public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer
tagCompound = super.writeToNBT(tagCompound); tagCompound = super.writeToNBT(tagCompound);
if (uuid != null) { if (uuid != null) {
tagCompound.setLong("uuidMost", uuid.getMostSignificantBits()); tagCompound.setLong(ICoreSignature.UUID_MOST_TAG, uuid.getMostSignificantBits());
tagCompound.setLong("uuidLeast", uuid.getLeastSignificantBits()); tagCompound.setLong(ICoreSignature.UUID_LEAST_TAG, uuid.getLeastSignificantBits());
} }
if ( vLocalScanners != null if ( vLocalScanners != null
@ -1551,8 +1542,8 @@ public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer
NBTTagCompound tagRemoteLocation = new NBTTagCompound(); NBTTagCompound tagRemoteLocation = new NBTTagCompound();
if (remoteLocationRequested instanceof UUID) { if (remoteLocationRequested instanceof UUID) {
tagRemoteLocation.setLong("uuidMost", ((UUID) remoteLocationRequested).getMostSignificantBits()); tagRemoteLocation.setLong(ICoreSignature.UUID_MOST_TAG, ((UUID) remoteLocationRequested).getMostSignificantBits());
tagRemoteLocation.setLong("uuidLeast", ((UUID) remoteLocationRequested).getLeastSignificantBits()); tagRemoteLocation.setLong(ICoreSignature.UUID_LEAST_TAG, ((UUID) remoteLocationRequested).getLeastSignificantBits());
} else if (remoteLocationRequested instanceof VectorI) { } else if (remoteLocationRequested instanceof VectorI) {
tagRemoteLocation = ((VectorI) remoteLocationRequested).writeToNBT(tagRemoteLocation); tagRemoteLocation = ((VectorI) remoteLocationRequested).writeToNBT(tagRemoteLocation);
} else if (remoteLocationRequested instanceof String) { } else if (remoteLocationRequested instanceof String) {
@ -1573,7 +1564,7 @@ public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer
public void readFromNBT(final NBTTagCompound tagCompound) { public void readFromNBT(final NBTTagCompound tagCompound) {
super.readFromNBT(tagCompound); super.readFromNBT(tagCompound);
uuid = new UUID(tagCompound.getLong("uuidMost"), tagCompound.getLong("uuidLeast")); uuid = new UUID(tagCompound.getLong(ICoreSignature.UUID_MOST_TAG), tagCompound.getLong(ICoreSignature.UUID_LEAST_TAG));
if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) { if (uuid.getMostSignificantBits() == 0 && uuid.getLeastSignificantBits() == 0) {
uuid = UUID.randomUUID(); uuid = UUID.randomUUID();
} }
@ -1603,10 +1594,10 @@ public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer
final NBTBase tagRemoteLocation = tagCompound.getTag("remoteLocation"); final NBTBase tagRemoteLocation = tagCompound.getTag("remoteLocation");
if (tagRemoteLocation instanceof NBTTagCompound) { if (tagRemoteLocation instanceof NBTTagCompound) {
final NBTTagCompound tagCompoundRemoteLocation = (NBTTagCompound) tagRemoteLocation; final NBTTagCompound tagCompoundRemoteLocation = (NBTTagCompound) tagRemoteLocation;
if (tagCompoundRemoteLocation.hasKey("uuidMost")) { if (tagCompoundRemoteLocation.hasKey(ICoreSignature.UUID_MOST_TAG)) {
remoteLocationRequested = new UUID( remoteLocationRequested = new UUID(
tagCompoundRemoteLocation.getLong("uuidMost"), tagCompoundRemoteLocation.getLong(ICoreSignature.UUID_MOST_TAG),
tagCompoundRemoteLocation.getLong("uuidLeast")); tagCompoundRemoteLocation.getLong(ICoreSignature.UUID_LEAST_TAG));
} else if (tagCompoundRemoteLocation.hasKey("x")) { } else if (tagCompoundRemoteLocation.hasKey("x")) {
remoteLocationRequested = new VectorI(); remoteLocationRequested = new VectorI();
@ -1633,8 +1624,9 @@ public class TileEntityTransporterCore extends TileEntityAbstractEnergyConsumer
public NBTTagCompound getUpdateTag() { public NBTTagCompound getUpdateTag() {
final NBTTagCompound tagCompound = new NBTTagCompound(); final NBTTagCompound tagCompound = new NBTTagCompound();
writeToNBT(tagCompound); writeToNBT(tagCompound);
tagCompound.removeTag("uuidMost");
tagCompound.removeTag("uuidLeast"); tagCompound.removeTag(ICoreSignature.UUID_MOST_TAG);
tagCompound.removeTag(ICoreSignature.UUID_LEAST_TAG);
tagCompound.removeTag(IBeamFrequency.BEAM_FREQUENCY_TAG); tagCompound.removeTag(IBeamFrequency.BEAM_FREQUENCY_TAG);
return tagCompound; return tagCompound;

View file

@ -5,6 +5,7 @@ import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IBlockBase; import cr0s.warpdrive.api.IBlockBase;
import cr0s.warpdrive.api.IBlockTransformer; import cr0s.warpdrive.api.IBlockTransformer;
import cr0s.warpdrive.api.ITransformation; import cr0s.warpdrive.api.ITransformation;
import cr0s.warpdrive.api.computer.ICoreSignature;
import cr0s.warpdrive.block.energy.BlockCapacitor; import cr0s.warpdrive.block.energy.BlockCapacitor;
import cr0s.warpdrive.block.movement.BlockShipCore; import cr0s.warpdrive.block.movement.BlockShipCore;
import cr0s.warpdrive.compat.CompatForgeMultipart; import cr0s.warpdrive.compat.CompatForgeMultipart;
@ -536,9 +537,9 @@ public class JumpBlock {
} }
// WarpDrive UUID // WarpDrive UUID
if (tagCompound.hasKey("uuidMost")) { if (tagCompound.hasKey(ICoreSignature.UUID_MOST_TAG)) {
tagCompound.removeTag("uuidMost"); tagCompound.removeTag(ICoreSignature.UUID_MOST_TAG);
tagCompound.removeTag("uuidLeast"); tagCompound.removeTag(ICoreSignature.UUID_LEAST_TAG);
} }
// WarpDrive any OC connected tile // WarpDrive any OC connected tile

View file

@ -291,7 +291,8 @@ public class JumpShip {
public void messageToAllPlayersOnShip(final WarpDriveText textComponent) { public void messageToAllPlayersOnShip(final WarpDriveText textComponent) {
final String name = (shipCore != null && !shipCore.name.isEmpty()) ? shipCore.name : "ShipCore"; final String name = (shipCore != null && !shipCore.name.isEmpty()) ? shipCore.name : "ShipCore";
final ITextComponent messageFormatted = Commons.getNamedPrefix(name).appendSibling(textComponent); final ITextComponent messageFormatted = Commons.getNamedPrefix(name)
.appendSibling(textComponent);
if (entitiesOnShip == null) { if (entitiesOnShip == null) {
// entities not saved yet, get them now // entities not saved yet, get them now
final WarpDriveText reason = new WarpDriveText(); final WarpDriveText reason = new WarpDriveText();

View file

@ -75,7 +75,7 @@ public class StarMapRegistry {
// get entry // get entry
final ArrayList<StarMapRegistryItem> listToRemove = new ArrayList<>(3); final ArrayList<StarMapRegistryItem> listToRemove = new ArrayList<>(3);
final UUID uuidTileEntity = tileEntity.getUUID(); final UUID uuidTileEntity = tileEntity.getSignatureUUID();
for (final StarMapRegistryItem registryItem : setRegistryItems) { for (final StarMapRegistryItem registryItem : setRegistryItems) {
if (registryItem.uuid == null) { if (registryItem.uuid == null) {
WarpDrive.logger.error(String.format("Removing invalid StarMapRegistryItem %s", WarpDrive.logger.error(String.format("Removing invalid StarMapRegistryItem %s",
@ -551,6 +551,7 @@ public class StarMapRegistry {
isValid = block instanceof BlockShipCore && tileEntity != null && !tileEntity.isInvalid(); isValid = block instanceof BlockShipCore && tileEntity != null && !tileEntity.isInvalid();
break; break;
case JUMP_GATE: case JUMP_GATE:
// isValid = block == WarpDrive.blockJumpGateCore && tileEntity != null && !tileEntity.isInvalid();
break; break;
case PLANET: case PLANET:
break; break;

View file

@ -2,6 +2,7 @@ package cr0s.warpdrive.data;
import cr0s.warpdrive.WarpDrive; import cr0s.warpdrive.WarpDrive;
import cr0s.warpdrive.api.IStarMapRegistryTileEntity; import cr0s.warpdrive.api.IStarMapRegistryTileEntity;
import cr0s.warpdrive.api.computer.ICoreSignature;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.UUID; import java.util.UUID;
@ -18,8 +19,8 @@ public class StarMapRegistryItem extends GlobalPosition {
public int maxX, maxY, maxZ; public int maxX, maxY, maxZ;
public int minX, minY, minZ; public int minX, minY, minZ;
public int mass; public int mass;
public double isolationRate = 0.0D; public double isolationRate;
public String name = "default"; public String name;
public StarMapRegistryItem( public StarMapRegistryItem(
final EnumStarMapEntryType type, final UUID uuid, final EnumStarMapEntryType type, final UUID uuid,
@ -52,12 +53,12 @@ public class StarMapRegistryItem extends GlobalPosition {
public StarMapRegistryItem(final IStarMapRegistryTileEntity tileEntity) { public StarMapRegistryItem(final IStarMapRegistryTileEntity tileEntity) {
this( this(
tileEntity.getStarMapType(), tileEntity.getUUID(), tileEntity.getStarMapType(), tileEntity.getSignatureUUID(),
((TileEntity) tileEntity).getWorld().provider.getDimension(), ((TileEntity) tileEntity).getWorld().provider.getDimension(),
((TileEntity) tileEntity).getPos().getX(), ((TileEntity) tileEntity).getPos().getY(), ((TileEntity) tileEntity).getPos().getZ(), ((TileEntity) tileEntity).getPos().getX(), ((TileEntity) tileEntity).getPos().getY(), ((TileEntity) tileEntity).getPos().getZ(),
tileEntity.getStarMapArea(), tileEntity.getStarMapArea(),
tileEntity.getMass(), tileEntity.getIsolationRate(), tileEntity.getMass(), tileEntity.getIsolationRate(),
tileEntity.getStarMapName()); tileEntity.getSignatureName() );
} }
public boolean sameCoordinates(final IStarMapRegistryTileEntity tileEntity) { public boolean sameCoordinates(final IStarMapRegistryTileEntity tileEntity) {
@ -72,7 +73,7 @@ public class StarMapRegistryItem extends GlobalPosition {
if (WarpDrive.isDev) { if (WarpDrive.isDev) {
assert tileEntity instanceof TileEntity; assert tileEntity instanceof TileEntity;
assert type == tileEntity.getStarMapType(); assert type == tileEntity.getStarMapType();
assert uuid.equals(tileEntity.getUUID()); assert uuid.equals(tileEntity.getSignatureUUID());
} }
final AxisAlignedBB aabbArea = tileEntity.getStarMapArea(); final AxisAlignedBB aabbArea = tileEntity.getStarMapArea();
if (aabbArea != null) { if (aabbArea != null) {
@ -85,7 +86,7 @@ public class StarMapRegistryItem extends GlobalPosition {
} }
mass = tileEntity.getMass(); mass = tileEntity.getMass();
isolationRate = tileEntity.getIsolationRate(); isolationRate = tileEntity.getIsolationRate();
name = tileEntity.getStarMapName(); name = tileEntity.getSignatureName();
} }
public boolean contains(@Nonnull final BlockPos blockPos) { public boolean contains(@Nonnull final BlockPos blockPos) {
@ -101,7 +102,8 @@ public class StarMapRegistryItem extends GlobalPosition {
public StarMapRegistryItem(final NBTTagCompound tagCompound) { public StarMapRegistryItem(final NBTTagCompound tagCompound) {
super(tagCompound); super(tagCompound);
type = EnumStarMapEntryType.getByName(tagCompound.getString("type")); type = EnumStarMapEntryType.getByName(tagCompound.getString("type"));
UUID uuidLocal = new UUID(tagCompound.getLong("uuidMost"), tagCompound.getLong("uuidLeast")); name = tagCompound.getString(ICoreSignature.NAME_TAG);
UUID uuidLocal = new UUID(tagCompound.getLong(ICoreSignature.UUID_MOST_TAG), tagCompound.getLong(ICoreSignature.UUID_LEAST_TAG));
if (uuidLocal.getMostSignificantBits() == 0 && uuidLocal.getLeastSignificantBits() == 0) { if (uuidLocal.getMostSignificantBits() == 0 && uuidLocal.getLeastSignificantBits() == 0) {
uuidLocal = UUID.randomUUID(); uuidLocal = UUID.randomUUID();
} }
@ -114,16 +116,18 @@ public class StarMapRegistryItem extends GlobalPosition {
minZ = tagCompound.getInteger("minZ"); minZ = tagCompound.getInteger("minZ");
mass = tagCompound.getInteger("mass"); mass = tagCompound.getInteger("mass");
isolationRate = tagCompound.getDouble("isolationRate"); isolationRate = tagCompound.getDouble("isolationRate");
name = tagCompound.getString("name");
} }
@Override @Override
public void writeToNBT(final NBTTagCompound tagCompound) { public void writeToNBT(final NBTTagCompound tagCompound) {
super.writeToNBT(tagCompound); super.writeToNBT(tagCompound);
tagCompound.setString("type", type.getName()); tagCompound.setString("type", type.getName());
if (name != null && !name.isEmpty()) {
tagCompound.setString(ICoreSignature.NAME_TAG, name);
}
if (uuid != null) { if (uuid != null) {
tagCompound.setLong("uuidMost", uuid.getMostSignificantBits()); tagCompound.setLong(ICoreSignature.UUID_MOST_TAG, uuid.getMostSignificantBits());
tagCompound.setLong("uuidLeast", uuid.getLeastSignificantBits()); tagCompound.setLong(ICoreSignature.UUID_LEAST_TAG, uuid.getLeastSignificantBits());
} }
tagCompound.setInteger("maxX", maxX); tagCompound.setInteger("maxX", maxX);
tagCompound.setInteger("maxY", maxY); tagCompound.setInteger("maxY", maxY);
@ -133,9 +137,6 @@ public class StarMapRegistryItem extends GlobalPosition {
tagCompound.setInteger("minZ", minZ); tagCompound.setInteger("minZ", minZ);
tagCompound.setInteger("mass", mass); tagCompound.setInteger("mass", mass);
tagCompound.setDouble("isolationRate", isolationRate); tagCompound.setDouble("isolationRate", isolationRate);
if (name != null && !name.isEmpty()) {
tagCompound.setString("name", name);
}
} }
public String getFormattedLocation() { public String getFormattedLocation() {

View file

@ -333,19 +333,19 @@ tile.warpdrive.force_field.relay.superior.name=Überlegenes Kraftfeld Relais
tile.warpdrive.force_field.relay.superior.tooltip=Unterstützt bis zu 1 Upgrade im Netzwerk tile.warpdrive.force_field.relay.superior.tooltip=Unterstützt bis zu 1 Upgrade im Netzwerk
tile.warpdrive.movement.lift.name=Lift tile.warpdrive.movement.lift.name=Lift
tile.warpdrive.movement.ship_controller.basic.name=Shuttle Raumschiff Steuerung tile.warpdrive.movement.ship_controller.basic.name=Remote Shuttle Raumschiff Steuerung
tile.warpdrive.movement.ship_controller.advanced.name=Corvette Raumschiff Steuerung tile.warpdrive.movement.ship_controller.advanced.name=Remote Corvette Raumschiff Steuerung
tile.warpdrive.movement.ship_controller.superior.name=Frigate Raumschiff Steuerung tile.warpdrive.movement.ship_controller.superior.name=Remote Frigate Raumschiff Steuerung
tile.warpdrive.movement.ship_controller.exceptional.name=Capital Raumschiff Steuerung tile.warpdrive.movement.ship_controller.exceptional.name=Remote Capital Raumschiff Steuerung
tile.warpdrive.movement.ship_controller.legendary.name=Planetary Raumschiff Steuerung tile.warpdrive.movement.ship_controller.legendary.name=Remote Planetary Raumschiff Steuerung
tile.warpdrive.movement.ship_controller.tooltip=Link to a ship core to control it remotely. Schließe einen Computer an, um das Interface zu öffnen. tile.warpdrive.movement.ship_controller.tooltip=Optional block to control a ship core remotely. Schließe einen Computer an, um das Interface zu öffnen.
tile.warpdrive.movement.ship_controller.away_from_core=Remote controller is for remote usage, also they're optional now...
tile.warpdrive.movement.ship_core.basic.name=Shuttle Raumschiff Kern tile.warpdrive.movement.ship_core.basic.name=Shuttle Raumschiff Kern
tile.warpdrive.movement.ship_core.advanced.name=Corvette Raumschiff Kern tile.warpdrive.movement.ship_core.advanced.name=Corvette Raumschiff Kern
tile.warpdrive.movement.ship_core.superior.name=Frigate Raumschiff Kern tile.warpdrive.movement.ship_core.superior.name=Frigate Raumschiff Kern
tile.warpdrive.movement.ship_core.exceptional.name=Capital Raumschiff Kern tile.warpdrive.movement.ship_core.exceptional.name=Capital Raumschiff Kern
tile.warpdrive.movement.ship_core.legendary.name=Planetary Raumschiff Kern tile.warpdrive.movement.ship_core.legendary.name=Planetary Raumschiff Kern
tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. Schließe eine Energiequelle an, um den Kern zu laden. Schließe einen Computer an, um das Interface zu öffnen. tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. Schließe eine Energiequelle an, um den Kern zu laden. Schließe einen Computer an, um das Interface zu öffnen.
tile.warpdrive.movement.ship_core.bounding_box.disabled=Bounding box display have been disabled. tile.warpdrive.movement.ship_core.bounding_box.disabled=Bounding box display have been disabled.
tile.warpdrive.movement.ship_core.bounding_box.enabled=Bounding box display is now enabled. Only you can see it.\nSneak right-click the Ship core again to disable it. tile.warpdrive.movement.ship_core.bounding_box.enabled=Bounding box display is now enabled. Only you can see it.\nSneak right-click the Ship core again to disable it.
tile.warpdrive.movement.transporter_beacon.name=Transporter Leuchtfeuer tile.warpdrive.movement.transporter_beacon.name=Transporter Leuchtfeuer
@ -665,6 +665,20 @@ warpdrive.control_channel.status_line.undefined=Nicht definierter Steuerungskana
warpdrive.is_enabled.set.enabled=Switched ON! warpdrive.is_enabled.set.enabled=Switched ON!
warpdrive.is_enabled.set.disabled=Switched off! warpdrive.is_enabled.set.disabled=Switched off!
# %1 is signature name, %2 is item name, %3 is block name
warpdrive.core_signature.tooltip=Signature is set to %1$d
warpdrive.core_signature.get_missing=%3$s has no signature yet!
warpdrive.core_signature.get_same=%2$s is already linked to %1$s.
warpdrive.core_signature.get=%2$s is now linked to %1$s.
warpdrive.core_signature.set_not_supported=You can't change the signature of a %3$s.
warpdrive.core_signature.set_missing=%2$s needs to be linked first!
warpdrive.core_signature.set_same=%3$s is already linked to %1$s.
warpdrive.core_signature.set=%3$s is now linked to %1$s.
warpdrive.core_signature.status_line.defined=Signature is %1$d.\n§bRight-click a remote controller§r to apply this signature.
warpdrive.core_signature.status_line.undefined=Undefined signature.\n§bSneak right-click§r a core or controller to set it.
warpdrive.core_signature.status_line.unknown_core_signature=Unknown core signature!
warpdrive.core_signature.status_line.world_not_loaded=Core world is not loaded!
warpdrive.tooltip.item_tag.breathing_helmet=§bRaumatmung§r verbraucht Luftkanister oder IC2 Druckluftzellen. warpdrive.tooltip.item_tag.breathing_helmet=§bRaumatmung§r verbraucht Luftkanister oder IC2 Druckluftzellen.
warpdrive.tooltip.item_tag.fly_in_space=§bRaumtaugliches Jetpack§r. warpdrive.tooltip.item_tag.fly_in_space=§bRaumtaugliches Jetpack§r.
warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbiert Fallschaden§r. warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbiert Fallschaden§r.

View file

@ -331,12 +331,13 @@ tile.warpdrive.force_field.relay.superior.name=Superior Force Field Relay
tile.warpdrive.force_field.relay.superior.tooltip=Supports up to 1 force field upgrade shared within its network tile.warpdrive.force_field.relay.superior.tooltip=Supports up to 1 force field upgrade shared within its network
tile.warpdrive.movement.lift.name=Lift tile.warpdrive.movement.lift.name=Lift
tile.warpdrive.movement.ship_controller.basic.name=Shuttle Ship Controller tile.warpdrive.movement.ship_controller.basic.name=Remote Shuttle Ship Controller
tile.warpdrive.movement.ship_controller.advanced.name=Corvette Ship Controller tile.warpdrive.movement.ship_controller.advanced.name=Remote Corvette Ship Controller
tile.warpdrive.movement.ship_controller.superior.name=Frigate Ship Controller tile.warpdrive.movement.ship_controller.superior.name=Remote Frigate Ship Controller
tile.warpdrive.movement.ship_controller.exceptional.name=Capital Ship Controller tile.warpdrive.movement.ship_controller.exceptional.name=Remote Capital Ship Controller
tile.warpdrive.movement.ship_controller.legendary.name=Planetary Ship Controller tile.warpdrive.movement.ship_controller.legendary.name=Remote Planetary Ship Controller
tile.warpdrive.movement.ship_controller.tooltip=Link to a ship core to control it remotely. Attach a computer to open the user interface. tile.warpdrive.movement.ship_controller.tooltip=Optional block to control a ship core remotely. Attach a computer to open the user interface.
tile.warpdrive.movement.ship_controller.away_from_core=Remote controller is for remote usage, also they're optional now...
tile.warpdrive.movement.ship_core.basic.name=Shuttle Ship Core tile.warpdrive.movement.ship_core.basic.name=Shuttle Ship Core
tile.warpdrive.movement.ship_core.advanced.name=Corvette Ship Core tile.warpdrive.movement.ship_core.advanced.name=Corvette Ship Core
tile.warpdrive.movement.ship_core.superior.name=Frigate Ship Core tile.warpdrive.movement.ship_core.superior.name=Frigate Ship Core
@ -662,6 +663,20 @@ warpdrive.control_channel.status_line.undefined=Undefined Control channel.\n§bU
warpdrive.is_enabled.set.enabled=Switched ON! warpdrive.is_enabled.set.enabled=Switched ON!
warpdrive.is_enabled.set.disabled=Switched off! warpdrive.is_enabled.set.disabled=Switched off!
# %1 is signature name, %2 is item name, %3 is block name
warpdrive.core_signature.tooltip=Signature is set to %1$d
warpdrive.core_signature.get_missing=%3$s has no signature yet!
warpdrive.core_signature.get_same=%2$s is already linked to %1$s.
warpdrive.core_signature.get=%2$s is now linked to %1$s.
warpdrive.core_signature.set_not_supported=You can't change the signature of a %3$s.
warpdrive.core_signature.set_missing=%2$s needs to be linked first!
warpdrive.core_signature.set_same=%3$s is already linked to %1$s.
warpdrive.core_signature.set=%3$s is now linked to %1$s.
warpdrive.core_signature.status_line.defined=Signature is %1$d.\n§bRight-click a remote controller§r to apply this signature.
warpdrive.core_signature.status_line.undefined=Undefined signature.\n§bSneak right-click§r a core or controller to set it.
warpdrive.core_signature.status_line.unknown_core_signature=Unknown core signature!
warpdrive.core_signature.status_line.world_not_loaded=Core world is not loaded!
warpdrive.tooltip.item_tag.breathing_helmet=§bSpace breathing§r consuming Air canisters and IC2 Compressed air cells from your inventory. warpdrive.tooltip.item_tag.breathing_helmet=§bSpace breathing§r consuming Air canisters and IC2 Compressed air cells from your inventory.
warpdrive.tooltip.item_tag.fly_in_space=§bSpace compatible jetpack§r. warpdrive.tooltip.item_tag.fly_in_space=§bSpace compatible jetpack§r.
warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbs fall damage§r. warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbs fall damage§r.

View file

@ -283,7 +283,7 @@ tile.warpdrive.detection.cloaking_core.name=Noyau d'invisibilité
tile.warpdrive.detection.monitor.name=Moniteur tile.warpdrive.detection.monitor.name=Moniteur
tile.warpdrive.detection.radar.name=Radar tile.warpdrive.detection.radar.name=Radar
tile.warpdrive.detection.warp_isolation.name=Bloc d'isolation de champ de Warp tile.warpdrive.detection.warp_isolation.name=Bloc d'isolation de champ de Warp
tile.warpdrive.detection.warp_isolation.tooltip.usage=Placer jusqu'à %5$d m par rapport au coeur de vaisseau\nUtilise %1$d à %3$d blocs d'isolation pour absorber %2$d %% à %4$d %% des ondes radar tile.warpdrive.detection.warp_isolation.tooltip.usage=Placer jusqu'à %5$d m par rapport au cœur de vaisseau\nUtilise %1$d à %3$d blocs d'isolation pour absorber %2$d %% à %4$d %% des ondes radar
tile.warpdrive.detection.siren_industrial.basic.name=Sirène industrielle basique tile.warpdrive.detection.siren_industrial.basic.name=Sirène industrielle basique
tile.warpdrive.detection.siren_industrial.advanced.name=Sirène industrielle avancée tile.warpdrive.detection.siren_industrial.advanced.name=Sirène industrielle avancée
@ -331,21 +331,22 @@ tile.warpdrive.force_field.relay.superior.name=Relais supérieur de champ de for
tile.warpdrive.force_field.relay.superior.tooltip=Supporte jusqu'à 1 augmentation de champ de force partagée avec son réseau tile.warpdrive.force_field.relay.superior.tooltip=Supporte jusqu'à 1 augmentation de champ de force partagée avec son réseau
tile.warpdrive.movement.lift.name=Ascenseur tile.warpdrive.movement.lift.name=Ascenseur
tile.warpdrive.movement.ship_controller.basic.name=Controlleur de vaisseau navette tile.warpdrive.movement.ship_controller.basic.name=Controlleur distant de vaisseau navette
tile.warpdrive.movement.ship_controller.advanced.name=Controlleur de vaisseau corvette tile.warpdrive.movement.ship_controller.advanced.name=Controlleur distant de vaisseau corvette
tile.warpdrive.movement.ship_controller.superior.name=Controlleur de vaisseau frégate tile.warpdrive.movement.ship_controller.superior.name=Controlleur distant de vaisseau frégate
tile.warpdrive.movement.ship_controller.exceptional.name=Controlleur de vaisseau capital tile.warpdrive.movement.ship_controller.exceptional.name=Controlleur distant de vaisseau capital
tile.warpdrive.movement.ship_controller.legendary.name=Controlleur de vaisseau planétaire tile.warpdrive.movement.ship_controller.legendary.name=Controlleur distant de vaisseau planétaire
tile.warpdrive.movement.ship_controller.tooltip=Lie à un cœur de vaisseau pour le contrôler à distance. Attache un ordinateur pour ouvrir l'interface utilisateur. tile.warpdrive.movement.ship_controller.tooltip=Block optional pour à distance d'un cœur de vaisseau. Attache un ordinateur pour ouvrir l'interface utilisateur.
tile.warpdrive.movement.ship_controller.away_from_core=Remote controller is for remote usage, also they're optional now...
tile.warpdrive.movement.ship_core.basic.name=Cœur de vaisseau navette tile.warpdrive.movement.ship_core.basic.name=Cœur de vaisseau navette
tile.warpdrive.movement.ship_core.advanced.name=Cœur de vaisseau corvette tile.warpdrive.movement.ship_core.advanced.name=Cœur de vaisseau corvette
tile.warpdrive.movement.ship_core.superior.name=Cœur de vaisseau frégate tile.warpdrive.movement.ship_core.superior.name=Cœur de vaisseau frégate
tile.warpdrive.movement.ship_core.exceptional.name=Cœur de vaisseau capital tile.warpdrive.movement.ship_core.exceptional.name=Cœur de vaisseau capital
tile.warpdrive.movement.ship_core.legendary.name=Cœur de vaisseau planétaire tile.warpdrive.movement.ship_core.legendary.name=Cœur de vaisseau planétaire
tile.warpdrive.movement.ship_core.tooltip=Défini le centre du vaisseau. Connecte une source d'énergie pour charger le coeur. Attache un ordinateur pour ouvrir l'interface utilisateur. tile.warpdrive.movement.ship_core.tooltip=Défini le centre du vaisseau. Connecte une source d'énergie pour charger le cœur. Attache un ordinateur pour ouvrir l'interface utilisateur.
tile.warpdrive.movement.ship_core.bounding_box.disabled=L'affichage des déliminations a été désactivé. tile.warpdrive.movement.ship_core.bounding_box.disabled=L'affichage des déliminations a été désactivé.
tile.warpdrive.movement.ship_core.bounding_box.enabled=L'affichage des déliminations est maintement activé. Seul toi peut les voir.\n§bShift-clique droit§7 le coeur de vaisseau à nouveau pour le désactiver. tile.warpdrive.movement.ship_core.bounding_box.enabled=L'affichage des déliminations est maintement activé. Seul toi peut les voir.\n§bShift-clique droit§7 le cœur de vaisseau à nouveau pour le désactiver.
tile.warpdrive.movement.transporter_beacon.name=Balise de transporteur tile.warpdrive.movement.transporter_beacon.name=Balise de transporteur
tile.warpdrive.movement.transporter_beacon.tooltip=§bRight click a Transporter Core§7 to set its remote location\n§bSneak§7 to retrieve its signature\n§bPlace as a block§7 to trigger emergency transportation tile.warpdrive.movement.transporter_beacon.tooltip=§bRight click a Transporter Core§7 to set its remote location\n§bSneak§7 to retrieve its signature\n§bPlace as a block§7 to trigger emergency transportation
tile.warpdrive.movement.transporter_containment.name=Confinement de transporteur tile.warpdrive.movement.transporter_containment.name=Confinement de transporteur
@ -663,6 +664,20 @@ warpdrive.control_channel.status_line.undefined=Le canal de contrôle est non d
warpdrive.is_enabled.set.enabled=Switched ON! warpdrive.is_enabled.set.enabled=Switched ON!
warpdrive.is_enabled.set.disabled=Switched off! warpdrive.is_enabled.set.disabled=Switched off!
# %1 is signature name, %2 is item name, %3 is block name
warpdrive.core_signature.tooltip=Signature est définie à %1$d.
warpdrive.core_signature.get_missing=%3$s n'a pas encore de signature!
warpdrive.core_signature.get_same=%2$s est déjà relié à %1$s.
warpdrive.core_signature.get=%2$s est désormais lié à %1$s.
warpdrive.core_signature.set_not_supported=Tu ne peux pas changer la signature de %3$s.
warpdrive.core_signature.set_missing=%2$s doit d'abord être relié!
warpdrive.core_signature.set_same=%3$s est déjà relié à %1$s.
warpdrive.core_signature.set=%3$s est désormais lié à %1$s.
warpdrive.core_signature.status_line.defined=Signature est définie à %1$d.\n§bClique droit un controller à distance§r pour appliquer cette signature.
warpdrive.core_signature.status_line.undefined=Undefined signature.\n§bShift-clique droit§r un cœur ou controller pour prendre sa signature.
warpdrive.core_signature.status_line.unknown_core_signature=Signature de cœur inconnue!
warpdrive.core_signature.status_line.world_not_loaded=Le monde du cœur n'est pas chargé!
warpdrive.tooltip.item_tag.breathing_helmet=Permet de §brespirer dans le vide§r en consommant des cartouches d'air et des cellules d'air comprimé de IC2 depuis l'inventaire. warpdrive.tooltip.item_tag.breathing_helmet=Permet de §brespirer dans le vide§r en consommant des cartouches d'air et des cellules d'air comprimé de IC2 depuis l'inventaire.
warpdrive.tooltip.item_tag.fly_in_space=Jetpack compatible avec une utilisation §bspatiale§r. warpdrive.tooltip.item_tag.fly_in_space=Jetpack compatible avec une utilisation §bspatiale§r.
warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbe les damages de chute§r. warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbe les damages de chute§r.

View file

@ -331,19 +331,19 @@ tile.warpdrive.force_field.relay.superior.name=Superieure Krachtvelds-relais
tile.warpdrive.force_field.relay.superior.tooltip=Kan tot maar 1 krachtveld-upgrade delen in zijn netwerk tile.warpdrive.force_field.relay.superior.tooltip=Kan tot maar 1 krachtveld-upgrade delen in zijn netwerk
tile.warpdrive.movement.lift.name=Lift tile.warpdrive.movement.lift.name=Lift
tile.warpdrive.movement.ship_controller.basic.name=Shuttle Schips-Bestuurder tile.warpdrive.movement.ship_controller.basic.name=Remote Shuttle Schips-Bestuurder
tile.warpdrive.movement.ship_controller.advanced.name=Corvette Schips-Bestuurder tile.warpdrive.movement.ship_controller.advanced.name=Remote Corvette Schips-Bestuurder
tile.warpdrive.movement.ship_controller.superior.name=Frigate Schips-Bestuurder tile.warpdrive.movement.ship_controller.superior.name=Remote Frigate Schips-Bestuurder
tile.warpdrive.movement.ship_controller.exceptional.name=Capital Schips-Bestuurder tile.warpdrive.movement.ship_controller.exceptional.name=Remote Capital Schips-Bestuurder
tile.warpdrive.movement.ship_controller.legendary.name=Planetary Schips-Bestuurder tile.warpdrive.movement.ship_controller.legendary.name=Remote Planetary Schips-Bestuurder
tile.warpdrive.movement.ship_controller.tooltip=Link to a ship core to control it remotely. Sluit een computer aan om de interface te openen. tile.warpdrive.movement.ship_controller.tooltip=Optional block to control a ship core remotely. Attach a computer to open the user interface.
tile.warpdrive.movement.ship_controller.away_from_core=Remote controller is for remote usage, also they're optional now...
tile.warpdrive.movement.ship_core.basic.name=Shuttle Schip-Kern tile.warpdrive.movement.ship_core.basic.name=Shuttle Schip-Kern
tile.warpdrive.movement.ship_core.advanced.name=Corvette Schip-Kern tile.warpdrive.movement.ship_core.advanced.name=Corvette Schip-Kern
tile.warpdrive.movement.ship_core.superior.name=Frigate Schip-Kern tile.warpdrive.movement.ship_core.superior.name=Frigate Schip-Kern
tile.warpdrive.movement.ship_core.exceptional.name=Capital Schip-Kern tile.warpdrive.movement.ship_core.exceptional.name=Capital Schip-Kern
tile.warpdrive.movement.ship_core.legendary.name=Planetary Schip-Kern tile.warpdrive.movement.ship_core.legendary.name=Planetary Schip-Kern
tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. Sluit een stroombron aan om de kern op te laden. Sluit een computer aan om de interface te openen. tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. Sluit een stroombron aan om de kern op te laden. Sluit een computer aan om de interface te openen.
tile.warpdrive.movement.ship_core.bounding_box.disabled=Bounding box display have been disabled. tile.warpdrive.movement.ship_core.bounding_box.disabled=Bounding box display have been disabled.
tile.warpdrive.movement.ship_core.bounding_box.enabled=Bounding box display is now enabled. Only you can see it.\n§bSneak right-click the Ship core§7 again to disable it. tile.warpdrive.movement.ship_core.bounding_box.enabled=Bounding box display is now enabled. Only you can see it.\n§bSneak right-click the Ship core§7 again to disable it.
tile.warpdrive.movement.transporter_beacon.name=Transport-baken tile.warpdrive.movement.transporter_beacon.name=Transport-baken
@ -663,6 +663,20 @@ warpdrive.control_channel.status_line.undefined=Niet gedefinieerde controlekanaa
warpdrive.is_enabled.set.enabled=Switched ON! warpdrive.is_enabled.set.enabled=Switched ON!
warpdrive.is_enabled.set.disabled=Switched off! warpdrive.is_enabled.set.disabled=Switched off!
# %1 is signature name, %2 is item name, %3 is block name
warpdrive.core_signature.tooltip=Signature is set to %1$d
warpdrive.core_signature.get_missing=%3$s has no signature yet!
warpdrive.core_signature.get_same=%2$s is already linked to %1$s.
warpdrive.core_signature.get=%2$s is now linked to %1$s.
warpdrive.core_signature.set_not_supported=You can't change the signature of a %3$s.
warpdrive.core_signature.set_missing=%2$s needs to be linked first!
warpdrive.core_signature.set_same=%3$s is already linked to %1$s.
warpdrive.core_signature.set=%3$s is now linked to %1$s.
warpdrive.core_signature.status_line.defined=Signature is %1$d.\n§bRight-click a remote controller§r to apply this signature.
warpdrive.core_signature.status_line.undefined=Undefined signature.\n§bSneak right-click§r a core or controller to set it.
warpdrive.core_signature.status_line.unknown_core_signature=Unknown core signature!
warpdrive.core_signature.status_line.world_not_loaded=Core world is not loaded!
warpdrive.tooltip.item_tag.breathing_helmet=§Ademhalen in de ruimte§r consumeert de inhoud van een Zuurstoffles en/of IC2 Gecompresseerde Luchtcellen uit je inventory. warpdrive.tooltip.item_tag.breathing_helmet=§Ademhalen in de ruimte§r consumeert de inhoud van een Zuurstoffles en/of IC2 Gecompresseerde Luchtcellen uit je inventory.
warpdrive.tooltip.item_tag.fly_in_space=§bJetpack Die werkt in de ruimte§r. warpdrive.tooltip.item_tag.fly_in_space=§bJetpack Die werkt in de ruimte§r.
warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbeert Schade van vallen§r. warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbeert Schade van vallen§r.

View file

@ -331,19 +331,19 @@ tile.warpdrive.force_field.relay.superior.name=Superior Force Field Relay
tile.warpdrive.force_field.relay.superior.tooltip=Supports up to 1 force field upgrade shared within its network tile.warpdrive.force_field.relay.superior.tooltip=Supports up to 1 force field upgrade shared within its network
tile.warpdrive.movement.lift.name=Лифт tile.warpdrive.movement.lift.name=Лифт
tile.warpdrive.movement.ship_controller.basic.name=Shuttle Контроллер корабля tile.warpdrive.movement.ship_controller.basic.name=Remote Shuttle Контроллер корабля
tile.warpdrive.movement.ship_controller.advanced.name=Corvette Контроллер корабля tile.warpdrive.movement.ship_controller.advanced.name=Remote Corvette Контроллер корабля
tile.warpdrive.movement.ship_controller.superior.name=Frigate Контроллер корабля tile.warpdrive.movement.ship_controller.superior.name=Remote Frigate Контроллер корабля
tile.warpdrive.movement.ship_controller.exceptional.name=Capital Контроллер корабля tile.warpdrive.movement.ship_controller.exceptional.name=Remote Capital Контроллер корабля
tile.warpdrive.movement.ship_controller.legendary.name=Planetary Контроллер корабля tile.warpdrive.movement.ship_controller.legendary.name=Remote Planetary Контроллер корабля
tile.warpdrive.movement.ship_controller.tooltip=Link to a ship core to control it remotely. Attach a computer to open the user interface. tile.warpdrive.movement.ship_controller.tooltip=Optional block to control a ship core remotely. Attach a computer to open the user interface.
tile.warpdrive.movement.ship_controller.away_from_core=Remote controller is for remote usage, also they're optional now...
tile.warpdrive.movement.ship_core.basic.name=Shuttle Ядро корабля tile.warpdrive.movement.ship_core.basic.name=Shuttle Ядро корабля
tile.warpdrive.movement.ship_core.advanced.name=Corvette Ядро корабля tile.warpdrive.movement.ship_core.advanced.name=Corvette Ядро корабля
tile.warpdrive.movement.ship_core.superior.name=FrigateЯдро корабля tile.warpdrive.movement.ship_core.superior.name=FrigateЯдро корабля
tile.warpdrive.movement.ship_core.exceptional.name=Capital Ядро корабля tile.warpdrive.movement.ship_core.exceptional.name=Capital Ядро корабля
tile.warpdrive.movement.ship_core.legendary.name=Planetary Ядро корабля tile.warpdrive.movement.ship_core.legendary.name=Planetary Ядро корабля
tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. Connecting an energy source will charge the core. Attach a computer to open the user interface. tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. Connecting an energy source will charge the core. Attach a computer to open the user interface.
tile.warpdrive.movement.ship_core.bounding_box.disabled=Bounding box display have been disabled. tile.warpdrive.movement.ship_core.bounding_box.disabled=Bounding box display have been disabled.
tile.warpdrive.movement.ship_core.bounding_box.enabled=Bounding box display is now enabled. Only you can see it.\n§bSneak right-click the Ship core§7 again to disable it. tile.warpdrive.movement.ship_core.bounding_box.enabled=Bounding box display is now enabled. Only you can see it.\n§bSneak right-click the Ship core§7 again to disable it.
tile.warpdrive.movement.transporter_beacon.name=Маяк для транспортера tile.warpdrive.movement.transporter_beacon.name=Маяк для транспортера
@ -663,6 +663,20 @@ warpdrive.control_channel.status_line.undefined=Undefined Control channel.\n§bU
warpdrive.is_enabled.set.enabled=Switched ON! warpdrive.is_enabled.set.enabled=Switched ON!
warpdrive.is_enabled.set.disabled=Switched off! warpdrive.is_enabled.set.disabled=Switched off!
# %1 is signature name, %2 is item name, %3 is block name
warpdrive.core_signature.tooltip=Signature is set to %1$d
warpdrive.core_signature.get_missing=%3$s has no signature yet!
warpdrive.core_signature.get_same=%2$s is already linked to %1$s.
warpdrive.core_signature.get=%2$s is now linked to %1$s.
warpdrive.core_signature.set_not_supported=You can't change the signature of a %3$s.
warpdrive.core_signature.set_missing=%2$s needs to be linked first!
warpdrive.core_signature.set_same=%3$s is already linked to %1$s.
warpdrive.core_signature.set=%3$s is now linked to %1$s.
warpdrive.core_signature.status_line.defined=Signature is %1$d.\n§bRight-click a remote controller§r to apply this signature.
warpdrive.core_signature.status_line.undefined=Undefined signature.\n§bSneak right-click§r a core or controller to set it.
warpdrive.core_signature.status_line.unknown_core_signature=Unknown core signature!
warpdrive.core_signature.status_line.world_not_loaded=Core world is not loaded!
warpdrive.tooltip.item_tag.breathing_helmet=§bSpace breathing§r consuming Air canisters and IC2 Compressed air cells from your inventory. warpdrive.tooltip.item_tag.breathing_helmet=§bSpace breathing§r consuming Air canisters and IC2 Compressed air cells from your inventory.
warpdrive.tooltip.item_tag.fly_in_space=§bSpace compatible jetpack§r. warpdrive.tooltip.item_tag.fly_in_space=§bSpace compatible jetpack§r.
warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbs fall damage§r. warpdrive.tooltip.item_tag.no_fall_damage=§bAbsorbs fall damage§r.

View file

@ -332,19 +332,19 @@ tile.warpdrive.force_field.relay.superior.name=卓越力场继电器
tile.warpdrive.force_field.relay.superior.tooltip=支持一个力场升级在其网络内共享 tile.warpdrive.force_field.relay.superior.tooltip=支持一个力场升级在其网络内共享
tile.warpdrive.movement.lift.name=电梯 tile.warpdrive.movement.lift.name=电梯
tile.warpdrive.movement.ship_controller.basic.name=Shuttle 飞船控制仪 tile.warpdrive.movement.ship_controller.basic.name=Remote Shuttle 飞船控制仪
tile.warpdrive.movement.ship_controller.advanced.name=Corvette 飞船控制仪 tile.warpdrive.movement.ship_controller.advanced.name=Remote Corvette 飞船控制仪
tile.warpdrive.movement.ship_controller.superior.name=Frigate 飞船控制仪 tile.warpdrive.movement.ship_controller.superior.name=Remote Frigate 飞船控制仪
tile.warpdrive.movement.ship_controller.exceptional.name=Capital 飞船控制仪 tile.warpdrive.movement.ship_controller.exceptional.name=Remote Capital 飞船控制仪
tile.warpdrive.movement.ship_controller.legendary.name=Planetary 飞船控制仪 tile.warpdrive.movement.ship_controller.legendary.name=Remote Planetary 飞船控制仪
tile.warpdrive.movement.ship_controller.tooltip=Link to a ship core to control it remotely. 在相连的电脑上打开交互界面. tile.warpdrive.movement.ship_controller.tooltip=Optional block to control a ship core remotely. 在相连的电脑上打开交互界面.
tile.warpdrive.movement.ship_controller.away_from_core=Remote controller is for remote usage, also they're optional now...
tile.warpdrive.movement.ship_core.basic.name=Shuttle 飞船核心 tile.warpdrive.movement.ship_core.basic.name=Shuttle 飞船核心
tile.warpdrive.movement.ship_core.advanced.name=Corvette 飞船核心 tile.warpdrive.movement.ship_core.advanced.name=Corvette 飞船核心
tile.warpdrive.movement.ship_core.superior.name=Frigate 飞船核心 tile.warpdrive.movement.ship_core.superior.name=Frigate 飞船核心
tile.warpdrive.movement.ship_core.exceptional.name=Capital 飞船核心 tile.warpdrive.movement.ship_core.exceptional.name=Capital 飞船核心
tile.warpdrive.movement.ship_core.legendary.name=Planetary 飞船核心 tile.warpdrive.movement.ship_core.legendary.name=Planetary 飞船核心
tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. 连接供能设备充能. 在相连的电脑上打开交互界面. tile.warpdrive.movement.ship_core.tooltip=Defines your ship center. 连接供能设备充能. 在相连的电脑上打开交互界面.
tile.warpdrive.movement.ship_core.bounding_box.disabled=边界显示已禁用. tile.warpdrive.movement.ship_core.bounding_box.disabled=边界显示已禁用.
tile.warpdrive.movement.ship_core.bounding_box.enabled=边界显示启用. 只有你可见.\n再次潜行右击核心可关闭. tile.warpdrive.movement.ship_core.bounding_box.enabled=边界显示启用. 只有你可见.\n再次潜行右击核心可关闭.
tile.warpdrive.movement.transporter_beacon.name=运输信标 tile.warpdrive.movement.transporter_beacon.name=运输信标
@ -664,6 +664,20 @@ warpdrive.control_channel.status_line.undefined=未定义控制连接.\n§b使
warpdrive.is_enabled.set.enabled=Switched ON! warpdrive.is_enabled.set.enabled=Switched ON!
warpdrive.is_enabled.set.disabled=Switched off! warpdrive.is_enabled.set.disabled=Switched off!
# %1 is signature name, %2 is item name, %3 is block name
warpdrive.core_signature.tooltip=Signature is set to %1$d
warpdrive.core_signature.get_missing=%3$s has no signature yet!
warpdrive.core_signature.get_same=%2$s is already linked to %1$s.
warpdrive.core_signature.get=%2$s is now linked to %1$s.
warpdrive.core_signature.set_not_supported=You can't change the signature of a %3$s.
warpdrive.core_signature.set_missing=%2$s needs to be linked first!
warpdrive.core_signature.set_same=%3$s is already linked to %1$s.
warpdrive.core_signature.set=%3$s is now linked to %1$s.
warpdrive.core_signature.status_line.defined=Signature is %1$d.\n§bRight-click a remote controller§r to apply this signature.
warpdrive.core_signature.status_line.undefined=Undefined signature.\n§bSneak right-click§r a core or controller to set it.
warpdrive.core_signature.status_line.unknown_core_signature=Unknown core signature!
warpdrive.core_signature.status_line.world_not_loaded=Core world is not loaded!
warpdrive.tooltip.item_tag.breathing_helmet=§b太空中呼吸§r消耗背包中的IC压缩空气 warpdrive.tooltip.item_tag.breathing_helmet=§b太空中呼吸§r消耗背包中的IC压缩空气
warpdrive.tooltip.item_tag.fly_in_space=§b太空喷气背包§r. warpdrive.tooltip.item_tag.fly_in_space=§b太空喷气背包§r.
warpdrive.tooltip.item_tag.no_fall_damage=§b减少摔落伤害§r. warpdrive.tooltip.item_tag.no_fall_damage=§b减少摔落伤害§r.

View file

@ -331,12 +331,13 @@ tile.warpdrive.force_field.relay.superior.name=Superior Force Field Relay
tile.warpdrive.force_field.relay.superior.tooltip=支持在其網絡內共享最多1個力場升級 tile.warpdrive.force_field.relay.superior.tooltip=支持在其網絡內共享最多1個力場升級
tile.warpdrive.movement.lift.name=升降機 tile.warpdrive.movement.lift.name=升降機
tile.warpdrive.movement.ship_controller.basic.name=Shuttle 船艦制禦器 tile.warpdrive.movement.ship_controller.basic.name=Remote Shuttle 船艦制禦器
tile.warpdrive.movement.ship_controller.advanced.name=Corvette 船艦制禦器 tile.warpdrive.movement.ship_controller.advanced.name=Remote Corvette 船艦制禦器
tile.warpdrive.movement.ship_controller.superior.name=Frigate 船艦制禦器 tile.warpdrive.movement.ship_controller.superior.name=Remote Frigate 船艦制禦器
tile.warpdrive.movement.ship_controller.exceptional.name=Capital 船艦制禦器 tile.warpdrive.movement.ship_controller.exceptional.name=Remote Capital 船艦制禦器
tile.warpdrive.movement.ship_controller.legendary.name=Planetary 船艦制禦器 tile.warpdrive.movement.ship_controller.legendary.name=Remote Planetary 船艦制禦器
tile.warpdrive.movement.ship_controller.tooltip=Link to a ship core to control it remotely. Attach a computer to open the user interface. tile.warpdrive.movement.ship_controller.tooltip=Optional block to control a ship core remotely. Attach a computer to open the user interface.
tile.warpdrive.movement.ship_controller.away_from_core=Remote controller is for remote usage, also they're optional now...
tile.warpdrive.movement.ship_core.basic.name=Shuttle 波動核心 tile.warpdrive.movement.ship_core.basic.name=Shuttle 波動核心
tile.warpdrive.movement.ship_core.advanced.name=Corvette 波動核心 tile.warpdrive.movement.ship_core.advanced.name=Corvette 波動核心
tile.warpdrive.movement.ship_core.superior.name=Frigate 波動核心 tile.warpdrive.movement.ship_core.superior.name=Frigate 波動核心
@ -661,6 +662,20 @@ warpdrive.control_channel.status_line.undefined=Undefined Control channel.\n§bU
warpdrive.is_enabled.set.enabled=Switched ON! warpdrive.is_enabled.set.enabled=Switched ON!
warpdrive.is_enabled.set.disabled=Switched off! warpdrive.is_enabled.set.disabled=Switched off!
# %1 is signature name, %2 is item name, %3 is block name
warpdrive.core_signature.tooltip=Signature is set to %1$d
warpdrive.core_signature.get_missing=%3$s has no signature yet!
warpdrive.core_signature.get_same=%2$s is already linked to %1$s.
warpdrive.core_signature.get=%2$s is now linked to %1$s.
warpdrive.core_signature.set_not_supported=You can't change the signature of a %3$s.
warpdrive.core_signature.set_missing=%2$s needs to be linked first!
warpdrive.core_signature.set_same=%3$s is already linked to %1$s.
warpdrive.core_signature.set=%3$s is now linked to %1$s.
warpdrive.core_signature.status_line.defined=Signature is %1$d.\n§bRight-click a remote controller§r to apply this signature.
warpdrive.core_signature.status_line.undefined=Undefined signature.\n§bSneak right-click§r a core or controller to set it.
warpdrive.core_signature.status_line.unknown_core_signature=Unknown core signature!
warpdrive.core_signature.status_line.world_not_loaded=Core world is not loaded!
warpdrive.tooltip.item_tag.breathing_helmet-legacyTranslation=§b空間呼吸§r 正在從您的庫存消耗IC2的壓縮空氣囊。 warpdrive.tooltip.item_tag.breathing_helmet-legacyTranslation=§b空間呼吸§r 正在從您的庫存消耗IC2的壓縮空氣囊。
warpdrive.tooltip.item_tag.breathing_helmet=§bSpace breathing§r consuming Air canisters and IC2 Compressed air cells from your inventory. warpdrive.tooltip.item_tag.breathing_helmet=§bSpace breathing§r consuming Air canisters and IC2 Compressed air cells from your inventory.
warpdrive.tooltip.item_tag.fly_in_space=§b空間噴氣背包§r. warpdrive.tooltip.item_tag.fly_in_space=§b空間噴氣背包§r.

View file

@ -1012,7 +1012,7 @@ local function data_shouldUpdateName()
for name, handlers in pairs(data_handlers) do for name, handlers in pairs(data_handlers) do
if handlers.name ~= nil then if handlers.name ~= nil then
local componentName = handlers.name() local componentName = handlers.name()
if componentName == "default" or componentName == "" then if componentName == "" then
shouldUpdateName = true shouldUpdateName = true
elseif shouldUpdateName then elseif shouldUpdateName then
data_name = componentName data_name = componentName

View file

@ -1738,7 +1738,7 @@ function radar_scanDone()
for i = 0, numResults do for i = 0, numResults do
local success, type, name, x, y, z = radar.getResult(i) local success, type, name, x, y, z = radar.getResult(i)
if success then if success then
if name == "default" then if name == "" then
name = "?" name = "?"
end end
data.radar_results[i] = { x = x, y = y, z = z, name = name, type = type } data.radar_results[i] = { x = x, y = y, z = z, name = name, type = type }

View file

@ -44,7 +44,7 @@ function ship_boot()
w.setColorNormal() w.setColorNormal()
w.writeLn("Booting Ship") w.writeLn("Booting Ship")
w.write("- internal parameters: ") w.write("- acquiring parameters: ")
ship_front, ship_right, ship_up = ship.dim_positive() ship_front, ship_right, ship_up = ship.dim_positive()
ship_back, ship_left, ship_down = ship.dim_negative() ship_back, ship_left, ship_down = ship.dim_negative()
ship_isInHyper = ship.isInHyperspace() ship_isInHyper = ship.isInHyperspace()
@ -54,7 +54,7 @@ function ship_boot()
w.writeLn("ok") w.writeLn("ok")
w.setColorNormal() w.setColorNormal()
w.write("- detecting Ship Core: ") w.write("- checking assembly : ")
local timeout = 10 local timeout = 10
local isValid, message local isValid, message
repeat repeat
@ -71,12 +71,12 @@ function ship_boot()
-- don't reboot as the player might need to set new dimensions to fix it -- don't reboot as the player might need to set new dimensions to fix it
else else
w.setColorSuccess() w.setColorSuccess()
w.writeLn("linked") w.writeLn("passed")
end end
w.sleep(0.2) w.sleep(0.2)
w.setColorNormal() w.setColorNormal()
w.write("- global position : ") w.write("- celestial position : ")
timeout = 10 timeout = 10
local pos local pos
repeat repeat
@ -100,7 +100,7 @@ function ship_boot()
w.sleep(0.2) w.sleep(0.2)
w.setColorNormal() w.setColorNormal()
w.write("- integrity check : ") w.write("- integrity check : ")
timeout = 10 timeout = 10
local shipSize local shipSize
repeat repeat

View file

@ -999,7 +999,7 @@ local function data_shouldUpdateName()
for name, handlers in pairs(data_handlers) do for name, handlers in pairs(data_handlers) do
if handlers.name ~= nil then if handlers.name ~= nil then
local componentName = handlers.name() local componentName = handlers.name()
if componentName == "default" or componentName == "" then if componentName == "" then
shouldUpdateName = true shouldUpdateName = true
elseif shouldUpdateName then elseif shouldUpdateName then
data_name = componentName data_name = componentName

View file

@ -45,7 +45,7 @@ function ship_boot()
w.setColorNormal() w.setColorNormal()
w.writeLn("Booting Ship") w.writeLn("Booting Ship")
w.write("- internal parameters: ") w.write("- acquiring parameters: ")
ship_front, ship_right, ship_up = ship.dim_positive() ship_front, ship_right, ship_up = ship.dim_positive()
ship_back, ship_left, ship_down = ship.dim_negative() ship_back, ship_left, ship_down = ship.dim_negative()
ship_isInHyper = ship.isInHyperspace() ship_isInHyper = ship.isInHyperspace()
@ -55,7 +55,7 @@ function ship_boot()
w.writeLn("ok") w.writeLn("ok")
w.setColorNormal() w.setColorNormal()
w.write("- detecting Ship Core: ") w.write("- checking assembly : ")
local timeout = 10 local timeout = 10
local isValid, message local isValid, message
repeat repeat
@ -72,12 +72,12 @@ function ship_boot()
-- don't reboot as the player might need to set new dimensions to fix it -- don't reboot as the player might need to set new dimensions to fix it
else else
w.setColorSuccess() w.setColorSuccess()
w.writeLn("linked") w.writeLn("validated")
end end
w.sleep(0.2) w.sleep(0.2)
w.setColorNormal() w.setColorNormal()
w.write("- global position : ") w.write("- celestial position : ")
timeout = 10 timeout = 10
local pos local pos
repeat repeat
@ -101,7 +101,7 @@ function ship_boot()
w.sleep(0.2) w.sleep(0.2)
w.setColorNormal() w.setColorNormal()
w.write("- integrity check : ") w.write("- integrity check : ")
timeout = 10 timeout = 10
local shipSize local shipSize
repeat repeat