Stable rift signature

This commit is contained in:
Runemoro 2018-01-02 04:40:12 -05:00
parent 3ea7e958f0
commit 8f1ef8c7bf
17 changed files with 193 additions and 61 deletions

View file

@ -44,6 +44,7 @@ public final class ModelManager {
register(ModItems.RIFT_BLADE); register(ModItems.RIFT_BLADE);
register(ModItems.RIFT_REMOVER); register(ModItems.RIFT_REMOVER);
register(ModItems.RIFT_SIGNATURE); register(ModItems.RIFT_SIGNATURE);
register(ModItems.STABILIZED_RIFT_SIGNATURE);
register(ModItems.BOOTS_WOVEN_WORLD_THREAD); register(ModItems.BOOTS_WOVEN_WORLD_THREAD);
register(ModItems.CHESTPLATE_WOVEN_WORLD_THREAD); register(ModItems.CHESTPLATE_WOVEN_WORLD_THREAD);
register(ModItems.HELMET_WOVEN_WORLD_THREAD); register(ModItems.HELMET_WOVEN_WORLD_THREAD);

View file

@ -91,5 +91,8 @@ public final class CraftingManager {
event.getRegistry().register(makeShapedRecipe(new ItemStack(ModItems.RIFT_SIGNATURE), event.getRegistry().register(makeShapedRecipe(new ItemStack(ModItems.RIFT_SIGNATURE),
" x ", "xyx", "xxx", 'x', Items.GOLD_INGOT, 'y', ModItems.STABLE_FABRIC)); " x ", "xyx", "xxx", 'x', Items.GOLD_INGOT, 'y', ModItems.STABLE_FABRIC));
event.getRegistry().register(makeShapedRecipe(new ItemStack(ModItems.STABILIZED_RIFT_SIGNATURE),
" x ", "xyx", "xxx", 'x', ModItems.STABLE_FABRIC, 'y', ModItems.RIFT_SIGNATURE));
} }
} }

View file

@ -0,0 +1,17 @@
package org.dimdev.dimdoors.shared;
import lombok.*;
import net.minecraft.nbt.NBTTagCompound;
import org.dimdev.ddutils.Location;
import org.dimdev.ddutils.nbt.INBTStorable;
import org.dimdev.ddutils.nbt.NBTUtils;
import org.dimdev.ddutils.nbt.SavedToNBT;
@ToString @AllArgsConstructor @NoArgsConstructor
@SavedToNBT public class RotatedLocation implements INBTStorable {
@Getter @SavedToNBT /*private*/ Location location;
@Getter @SavedToNBT /*private*/ float yaw;
@Override public NBTTagCompound writeToNBT(NBTTagCompound nbt) { return NBTUtils.writeToNBT(this, nbt); }
@Override public void readFromNBT(NBTTagCompound nbt) { NBTUtils.readFromNBT(this, nbt); }
}

View file

@ -1,6 +1,5 @@
package org.dimdev.dimdoors.shared.items; package org.dimdev.dimdoors.shared.items;
import lombok.*;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.*; import net.minecraft.util.*;
@ -9,14 +8,12 @@ import net.minecraft.util.text.translation.I18n;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import org.dimdev.ddutils.Location; import org.dimdev.ddutils.Location;
import org.dimdev.ddutils.nbt.INBTStorable;
import org.dimdev.ddutils.nbt.NBTUtils;
import org.dimdev.ddutils.nbt.SavedToNBT;
import org.dimdev.dimdoors.DimDoors; import org.dimdev.dimdoors.DimDoors;
import net.minecraft.client.util.ITooltipFlag; import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
import org.dimdev.dimdoors.shared.RotatedLocation;
import org.dimdev.dimdoors.shared.blocks.ModBlocks; import org.dimdev.dimdoors.shared.blocks.ModBlocks;
import org.dimdev.dimdoors.shared.rifts.GlobalDestination; import org.dimdev.dimdoors.shared.rifts.GlobalDestination;
import org.dimdev.dimdoors.shared.rifts.TileEntityRift; import org.dimdev.dimdoors.shared.rifts.TileEntityRift;
@ -31,7 +28,7 @@ public class ItemRiftSignature extends Item {
public ItemRiftSignature() { public ItemRiftSignature() {
setMaxStackSize(1); setMaxStackSize(1);
setMaxDamage(10000); setMaxDamage(1);
setCreativeTab(DimDoors.DIM_DOORS_CREATIVE_TAB); setCreativeTab(DimDoors.DIM_DOORS_CREATIVE_TAB);
setUnlocalizedName(ID); setUnlocalizedName(ID);
setRegistryName(new ResourceLocation(DimDoors.MODID, ID)); setRegistryName(new ResourceLocation(DimDoors.MODID, ID));
@ -57,7 +54,7 @@ public class ItemRiftSignature extends Item {
} }
pos = pos.offset(side); pos = pos.offset(side);
Transform source = getSource(stack); RotatedLocation source = getSource(stack);
if (source != null) { if (source != null) {
// Place a rift at the destination point // Place a rift at the destination point
@ -67,22 +64,22 @@ public class ItemRiftSignature extends Item {
rift1.setRotation(source.getYaw(), 0); rift1.setRotation(source.getYaw(), 0);
rift1.register(); rift1.register();
// Place a rift at the destination point // Place a rift at the source point
World sourceWorld = source.getLocation().getWorld(); World sourceWorld = source.getLocation().getWorld();
sourceWorld.setBlockState(source.location.getPos(), ModBlocks.RIFT.getDefaultState()); sourceWorld.setBlockState(source.getLocation().getPos(), ModBlocks.RIFT.getDefaultState());
TileEntityRift rift2 = (TileEntityRift) source.getLocation().getTileEntity(); TileEntityRift rift2 = (TileEntityRift) source.getLocation().getTileEntity();
rift2.setSingleDestination(new GlobalDestination(rift1.getLocation())); rift2.setSingleDestination(new GlobalDestination(rift1.getLocation()));
rift2.setRotation(source.getYaw(), 0); rift2.setRotation(source.getYaw(), 0);
rift2.register(); rift2.register();
stack.damageItem(5000, player); // TODO: calculate damage based on position stack.damageItem(1, player); // TODO: calculate damage based on position?
clearSource(stack); clearSource(stack);
DimDoors.chat(player, "Rift Created"); DimDoors.chat(player, "Rift Created");
world.playSound(player, player.getPosition(), ModSounds.RIFT_END, SoundCategory.BLOCKS, 0.6f, 1); world.playSound(player, player.getPosition(), ModSounds.RIFT_END, SoundCategory.BLOCKS, 0.6f, 1);
} else { } else {
// The link signature has not been used. Store its current target as the first location. // The link signature has not been used. Store its current target as the first location.
setSource(stack, new Transform(new Location(world, pos), player.rotationYaw)); setSource(stack, new RotatedLocation(new Location(world, pos), player.rotationYaw));
DimDoors.chat(player, "Location Stored in Rift Signature"); DimDoors.chat(player, "Location Stored in Rift Signature");
world.playSound(player, player.getPosition(), ModSounds.RIFT_START, SoundCategory.BLOCKS, 0.6f, 1); world.playSound(player, player.getPosition(), ModSounds.RIFT_START, SoundCategory.BLOCKS, 0.6f, 1);
} }
@ -90,7 +87,7 @@ public class ItemRiftSignature extends Item {
return EnumActionResult.SUCCESS; return EnumActionResult.SUCCESS;
} }
public static void setSource(ItemStack itemStack, Transform destination) { public static void setSource(ItemStack itemStack, RotatedLocation destination) {
if (!itemStack.hasTagCompound()) itemStack.setTagCompound(new NBTTagCompound()); if (!itemStack.hasTagCompound()) itemStack.setTagCompound(new NBTTagCompound());
itemStack.getTagCompound().setTag("destination", destination.writeToNBT(new NBTTagCompound())); itemStack.getTagCompound().setTag("destination", destination.writeToNBT(new NBTTagCompound()));
} }
@ -101,9 +98,9 @@ public class ItemRiftSignature extends Item {
} }
} }
public static Transform getSource(ItemStack itemStack) { public static RotatedLocation getSource(ItemStack itemStack) {
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("destination")) { if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("destination")) {
Transform transform = new Transform(); RotatedLocation transform = new RotatedLocation();
transform.readFromNBT(itemStack.getTagCompound().getCompoundTag("destination")); transform.readFromNBT(itemStack.getTagCompound().getCompoundTag("destination"));
return transform; return transform;
} else { } else {
@ -114,20 +111,11 @@ public class ItemRiftSignature extends Item {
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, World worldIn, List<String> tooltip, ITooltipFlag flagIn) { public void addInformation(ItemStack stack, World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
Transform transform = getSource(stack); RotatedLocation transform = getSource(stack);
if (transform != null) { if (transform != null) {
tooltip.add(I18n.translateToLocalFormatted("info.rift_signature.bound", transform.getLocation().getX(), transform.getLocation().getY(), transform.getLocation().getZ(), transform.getLocation().getDim())); tooltip.add(I18n.translateToLocalFormatted("info.rift_signature.bound", transform.getLocation().getX(), transform.getLocation().getY(), transform.getLocation().getZ(), transform.getLocation().getDim()));
} else { } else {
translateAndAdd("info.rift_signature.unbound", tooltip); translateAndAdd("info.rift_signature.unbound", tooltip);
} }
} }
@ToString @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PRIVATE)
@SavedToNBT public static class Transform implements INBTStorable {
@Getter @SavedToNBT /*private*/ Location location;
@Getter @SavedToNBT /*private*/ float yaw;
@Override public NBTTagCompound writeToNBT(NBTTagCompound nbt) { return NBTUtils.writeToNBT(this, nbt); }
@Override public void readFromNBT(NBTTagCompound nbt) { NBTUtils.readFromNBT(this, nbt); }
}
} }

View file

@ -0,0 +1,121 @@
package org.dimdev.dimdoors.shared.items;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.dimdev.ddutils.Location;
import org.dimdev.dimdoors.DimDoors;
import org.dimdev.dimdoors.shared.RotatedLocation;
import org.dimdev.dimdoors.shared.blocks.ModBlocks;
import org.dimdev.dimdoors.shared.rifts.GlobalDestination;
import org.dimdev.dimdoors.shared.rifts.TileEntityRift;
import org.dimdev.dimdoors.shared.sound.ModSounds;
import java.util.List;
import static org.dimdev.ddutils.I18nUtils.translateAndAdd;
public class ItemStabilizedRiftSignature extends Item { // TODO: common superclass with rift signature
public static final String ID = "stabilized_rift_signature";
public ItemStabilizedRiftSignature() {
setMaxStackSize(1);
setMaxDamage(20);
setCreativeTab(DimDoors.DIM_DOORS_CREATIVE_TAB);
setUnlocalizedName(ID);
setRegistryName(new ResourceLocation(DimDoors.MODID, ID));
}
@SideOnly(Side.CLIENT)
@Override
public boolean hasEffect(ItemStack stack) {
return stack.getTagCompound() != null && stack.getTagCompound().hasKey("destination");
}
@Override
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
ItemStack stack = player.getHeldItem(hand);
// Return false on the client side to pass this request to the server
if (world.isRemote) {
return EnumActionResult.FAIL;
}
// Fail if the player can't place a block there TODO: spawn protection, other plugin support
if (!player.canPlayerEdit(pos, side.getOpposite(), stack)) {
return EnumActionResult.PASS;
}
pos = pos.offset(side);
RotatedLocation source = getSource(stack);
if (source != null) {
// Place a rift at the destination point
world.setBlockState(pos, ModBlocks.RIFT.getDefaultState());
TileEntityRift rift1 = (TileEntityRift) world.getTileEntity(pos);
rift1.setSingleDestination(new GlobalDestination(source.getLocation()));
rift1.setRotation(source.getYaw(), 0);
rift1.register();
// Place a rift at the source point
if (!source.getLocation().getBlockState().getBlock().equals(ModBlocks.RIFT)) {
World sourceWorld = source.getLocation().getWorld();
sourceWorld.setBlockState(source.getLocation().getPos(), ModBlocks.RIFT.getDefaultState());
TileEntityRift rift2 = (TileEntityRift) source.getLocation().getTileEntity();
rift2.setRotation(source.getYaw(), 0);
rift2.register();
}
stack.damageItem(1, player);
DimDoors.chat(player, "Rift Created");
world.playSound(player, player.getPosition(), ModSounds.RIFT_END, SoundCategory.BLOCKS, 0.6f, 1);
} else {
// The link signature has not been used. Store its current target as the first location.
setSource(stack, new RotatedLocation(new Location(world, pos), player.rotationYaw));
DimDoors.chat(player, "Location Stored in Rift Signature");
world.playSound(player, player.getPosition(), ModSounds.RIFT_START, SoundCategory.BLOCKS, 0.6f, 1);
}
return EnumActionResult.SUCCESS;
}
public static void setSource(ItemStack itemStack, RotatedLocation destination) {
if (!itemStack.hasTagCompound()) itemStack.setTagCompound(new NBTTagCompound());
itemStack.getTagCompound().setTag("destination", destination.writeToNBT(new NBTTagCompound()));
}
public static void clearSource(ItemStack itemStack) {
if (itemStack.hasTagCompound()) {
itemStack.getTagCompound().removeTag("destination");
}
}
public static RotatedLocation getSource(ItemStack itemStack) {
if (itemStack.hasTagCompound() && itemStack.getTagCompound().hasKey("destination")) {
RotatedLocation transform = new RotatedLocation();
transform.readFromNBT(itemStack.getTagCompound().getCompoundTag("destination"));
return transform;
} else {
return null;
}
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
RotatedLocation transform = getSource(stack);
if (transform != null) {
tooltip.add(I18n.translateToLocalFormatted("info.stabilized_rift_signature.bound", transform.getLocation().getX(), transform.getLocation().getY(), transform.getLocation().getZ(), transform.getLocation().getDim()));
} else {
translateAndAdd("info.stabilized_rift_signature.unbound", tooltip);
}
}
}

View file

@ -29,6 +29,7 @@ public final class ModItems {
public static final ItemRiftBlade RIFT_BLADE = new ItemRiftBlade(); public static final ItemRiftBlade RIFT_BLADE = new ItemRiftBlade();
public static final ItemRiftRemover RIFT_REMOVER = new ItemRiftRemover(); public static final ItemRiftRemover RIFT_REMOVER = new ItemRiftRemover();
public static final ItemRiftSignature RIFT_SIGNATURE = new ItemRiftSignature(); public static final ItemRiftSignature RIFT_SIGNATURE = new ItemRiftSignature();
public static final ItemStabilizedRiftSignature STABILIZED_RIFT_SIGNATURE = new ItemStabilizedRiftSignature();
// Armors // Armors
public static final ItemWovenWorldThreadArmor HELMET_WOVEN_WORLD_THREAD = new ItemWovenWorldThreadArmor("helmet_woven_world_thread", 1, EntityEquipmentSlot.HEAD); public static final ItemWovenWorldThreadArmor HELMET_WOVEN_WORLD_THREAD = new ItemWovenWorldThreadArmor("helmet_woven_world_thread", 1, EntityEquipmentSlot.HEAD);
@ -56,6 +57,7 @@ public final class ModItems {
RIFT_BLADE, RIFT_BLADE,
RIFT_REMOVER, RIFT_REMOVER,
RIFT_SIGNATURE, RIFT_SIGNATURE,
STABILIZED_RIFT_SIGNATURE,
HELMET_WOVEN_WORLD_THREAD, HELMET_WOVEN_WORLD_THREAD,
CHESTPLATE_WOVEN_WORLD_THREAD, CHESTPLATE_WOVEN_WORLD_THREAD,
LEGGINGS_WOVEN_WORLD_THREAD, LEGGINGS_WOVEN_WORLD_THREAD,

View file

@ -60,14 +60,14 @@ info.rift_remover1=um ihn und jegliche Spalte
info.rift_remover2=in der Nähe zu entfernen. info.rift_remover2=in der Nähe zu entfernen.
info.rift_signature.bound=Führt zu(%d, %d, %d) in Dimension #%d info.rift_signature.bound=Führt zu(%d, %d, %d) in Dimension #%d
info.rift_signature.unbound0=Erster Klick speichert die Position; info.rift_signature.unbound0=Erster Klick speichert die Position;
info.rift_signature.unbound1=zweiter Klick kreiert ein Paar von Spalten, info.rift_signature.unbound1=zweiter Klick kreiert ein Paar von Spalten,
info.rift_signature.unbound2=welche zu den zwei Positionen führen. info.rift_signature.unbound2=welche zu den zwei Positionen führen.
info.rift_signature.stable0=Erster Klick speichert die Position, info.stabilized_rift_signature.bound=Führt zu(%d, %d, %d) in Dimension #%d
info.rift_signature.stable1=weitere Klicks kreieren Spalte, die info.stabilized_rift_signature.unbound0=Erster Klick speichert die Position,
info.rift_signature.stable2=die erste und die aktuelle Position verbinden. info.stabilized_rift_signature.unbound1=weitere Klicks kreieren Spalte, die
info.stabilized_rift_signature.unbound2=die erste und die aktuelle Position verbinden.
info.unstable_dimensional_door=Vorsicht: Führt zu einem zufälligen Ziel info.unstable_dimensional_door=Vorsicht: Führt zu einem zufälligen Ziel

View file

@ -66,14 +66,14 @@ info.rift_remover1=to remove it and
info.rift_remover2=any nearby rifts. info.rift_remover2=any nearby rifts.
info.rift_signature.bound=Leads to (%d, %d, %d) at dimension #%d info.rift_signature.bound=Leads to (%d, %d, %d) at dimension #%d
info.rift_signature.unbound0=First click stores a location; info.rift_signature.unbound0=First click stores a location;
info.rift_signature.unbound1=second click creates a pair of info.rift_signature.unbound1=second click creates a pair of
info.rift_signature.unbound2=rifts linking the two locations. info.rift_signature.unbound2=rifts linking the two locations.
info.rift_signature.stable0=First click stores a location, info.stabilized_rift_signature.bound=Leads to (%d, %d, %d) at dimension #%d
info.rift_signature.stable1=other clicks create rifts linking info.stabilized_rift_signature.unbound0=First click stores a location,
info.rift_signature.stable2=the first and last locations together. info.stabilized_rift_signature.unbound1=other clicks create rifts linking
info.stabilized_rift_signature.unbound2=the first and last locations together.
info.unstable_dimensional_door=Caution: Leads to random destination info.unstable_dimensional_door=Caution: Leads to random destination

View file

@ -61,14 +61,14 @@ info.rift_remover1=exposée pour l'enlever ainsi
info.rift_remover2=que celles à proximité. info.rift_remover2=que celles à proximité.
info.rift_signature.bound=Mène aux coordonnées (%d, %d, %d) à la dimension #%d info.rift_signature.bound=Mène aux coordonnées (%d, %d, %d) à la dimension #%d
info.rift_signature.unbound0=Le premier clic stocke un emplacement ; info.rift_signature.unbound0=Le premier clic stocke un emplacement ;
info.rift_signature.unbound1=le deuxième clic crée une paire de info.rift_signature.unbound1=le deuxième clic crée une paire de
info.rift_signature.unbound2=fissures qui lient les deux emplacements. info.rift_signature.unbound2=fissures qui lient les deux emplacements.
info.rift_signature.stable0=Le premier clic stocke un emplacement, info.stabilized_rift_signature.bound=Mène aux coordonnées (%d, %d, %d) à la dimension #%d
info.rift_signature.stable1=les autres clics créent des fissurent qui lient info.stabilized_rift_signature.unbound0=Le premier clic stocke un emplacement,
info.rift_signature.stable2=le premier et les derniers emplacements ensemble. info.stabilized_rift_signature.unbound1=les autres clics créent des fissurent qui lient
info.stabilized_rift_signature.unbound2=le premier et les derniers emplacements ensemble.
info.unstable_dimensional_door=Attention : mène vers une destination aléatoire info.unstable_dimensional_door=Attention : mène vers une destination aléatoire

View file

@ -60,14 +60,14 @@ info.rift_remover1=esposta per rimuovere quello
info.rift_remover2=e altre fratture vicine. info.rift_remover2=e altre fratture vicine.
info.rift_signature.bound=Porta a (%d, %d, %d) nella dimensione #%d info.rift_signature.bound=Porta a (%d, %d, %d) nella dimensione #%d
info.rift_signature.unbound0=Al primo clic salva la posizione; al info.rift_signature.unbound0=Al primo clic salva la posizione; al
info.rift_signature.unbound1=secondo clic crea un paio di fratture info.rift_signature.unbound1=secondo clic crea un paio di fratture
info.rift_signature.unbound2=che collegano le due posizioni. info.rift_signature.unbound2=che collegano le due posizioni.
info.rift_signature.stable0=Al primo clic salva la posizione; al info.stabilized_rift_signature.bound=Porta a (%d, %d, %d) nella dimensione #%d
info.rift_signature.stable1=secondo clic crea fratture che info.stabilized_rift_signature.unbound0=Al primo clic salva la posizione; al
info.rift_signature.stable2=collegano la prima e ultima posizione. info.stabilized_rift_signature.unbound1=secondo clic crea fratture che
info.stabilized_rift_signature.unbound2=collegano la prima e ultima posizione.
info.unstable_dimensional_door=Attenziione: Porta a una destinazione casuale info.unstable_dimensional_door=Attenziione: Porta a una destinazione casuale

View file

@ -60,14 +60,14 @@ info.rift_remover1=om het te verwijderen en
info.rift_remover2=alle dichtbijzijnde scheuren. info.rift_remover2=alle dichtbijzijnde scheuren.
info.rift_signature.bound=Leidt naar (%d, %d, %d) in dimensie #%d info.rift_signature.bound=Leidt naar (%d, %d, %d) in dimensie #%d
info.rift_signature.unbound0=De eerste klik slaat een locatie op; info.rift_signature.unbound0=De eerste klik slaat een locatie op;
info.rift_signature.unbound1=de tweede creëert een paar scheuren info.rift_signature.unbound1=de tweede creëert een paar scheuren
info.rift_signature.unbound2=die beide locaties met elkaar verbinden. info.rift_signature.unbound2=die beide locaties met elkaar verbinden.
info.rift_signature.stable0=De eerste klik slaat een locatie op, info.stabilized_rift_signature.bound=Leidt naar (%d, %d, %d) in dimensie #%d
info.rift_signature.stable1=andere klikken creëren scheuren die de eerste info.stabilized_rift_signature.unbound0=De eerste klik slaat een locatie op,
info.rift_signature.stable2=en laatste locaties met elkaar verbinden. info.stabilized_rift_signature.unbound1=andere klikken creëren scheuren die de eerste
info.stabilized_rift_signature.unbound2=en laatste locaties met elkaar verbinden.
info.unstable_dimensional_door=Pas op: Leidt naar een willekeurige bestemming info.unstable_dimensional_door=Pas op: Leidt naar een willekeurige bestemming

View file

@ -62,14 +62,14 @@ info.rift_remover1=expusa pentru a sterge acea
info.rift_remover2=fisură și ori ce fisuri apropiate. info.rift_remover2=fisură și ori ce fisuri apropiate.
info.rift_signature.bound=Duce la (%d, %d, %d) în dimensiunea #%d info.rift_signature.bound=Duce la (%d, %d, %d) în dimensiunea #%d
info.rift_signature.unbound0=Primul clic stochează o locație; info.rift_signature.unbound0=Primul clic stochează o locație;
info.rift_signature.unbound1=al doilea clic crează o pereche info.rift_signature.unbound1=al doilea clic crează o pereche
info.rift_signature.unbound2=de fisuri conectând cele doua locații. info.rift_signature.unbound2=de fisuri conectând cele doua locații.
info.rift_signature.stable0=Primul clic stochează o locație; info.stabilized_rift_signature.bound=Duce la (%d, %d, %d) în dimensiunea #%d
info.rift_signature.stable1=alte clicuri crează fisuri conectând info.stabilized_rift_signature.unbound0=Primul clic stochează o locație;
info.rift_signature.stable2=prima și ultima conectiuni împreună. info.stabilized_rift_signature.unbound1=alte clicuri crează fisuri conectând
info.stabilized_rift_signature.unbound2=prima și ultima conectiuni împreună.
info.unstable_dimensional_door=Atenție: Duce la o destinație aleatorie info.unstable_dimensional_door=Atenție: Duce la o destinație aleatorie

View file

@ -60,14 +60,14 @@ info.rift_remover1=чтобы убрать его и
info.rift_remover2=другие ближайшие разломы. info.rift_remover2=другие ближайшие разломы.
info.rift_signature.bound=Ведёт в (%d, %d, %d) в измерение #%d info.rift_signature.bound=Ведёт в (%d, %d, %d) в измерение #%d
info.rift_signature.unbound0=Первое нажатие сохраняет расположение; info.rift_signature.unbound0=Первое нажатие сохраняет расположение;
info.rift_signature.unbound1=второе нажатие создаёт пару info.rift_signature.unbound1=второе нажатие создаёт пару
info.rift_signature.unbound2=разломов, соединяющих два расположения. info.rift_signature.unbound2=разломов, соединяющих два расположения.
info.rift_signature.stable0=Первое нажатие сохраняет расположение, info.stabilized_rift_signature.bound=Ведёт в (%d, %d, %d) в измерение #%d
info.rift_signature.stable1=остальные нажатия создают разломы, соединяющие info.stabilized_rift_signature.unbound0=Первое нажатие сохраняет расположение,
info.rift_signature.stable2=первое и последнее расположения вместе. info.stabilized_rift_signature.unbound1=остальные нажатия создают разломы, соединяющие
info.stabilized_rift_signature.unbound2=первое и последнее расположения вместе.
info.unstable_dimensional_door=Внимание: Ведёт неизвестно куда info.unstable_dimensional_door=Внимание: Ведёт неизвестно куда

View file

@ -60,14 +60,14 @@ info.rift_remover1=来移除它以及附近的其他
info.rift_remover2=裂痕. info.rift_remover2=裂痕.
info.rift_signature.bound=指向(%d, %d, %d) 位于#%d info.rift_signature.bound=指向(%d, %d, %d) 位于#%d
info.rift_signature.unbound0=第一次点击记录一个位置; info.rift_signature.unbound0=第一次点击记录一个位置;
info.rift_signature.unbound1=第二次点击在两地间创造 info.rift_signature.unbound1=第二次点击在两地间创造
info.rift_signature.unbound2=一对相互连接的裂痕. info.rift_signature.unbound2=一对相互连接的裂痕.
info.rift_signature.stable0=首次点击记录一个位置, info.stabilized_rift_signature.bound=指向(%d, %d, %d) 位于#%d
info.rift_signature.stable1=再次点击生成连接两地的 info.stabilized_rift_signature.unbound0=首次点击记录一个位置,
info.rift_signature.stable2=裂痕. info.stabilized_rift_signature.unbound1=再次点击生成连接两地的
info.stabilized_rift_signature.unbound2=裂痕.
info.unstable_dimensional_door=注意: 将会随机传送 info.unstable_dimensional_door=注意: 将会随机传送

View file

@ -1,6 +0,0 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "dimdoors:items/stabilized_rift_sig"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/handheld",
"textures": {
"layer0": "dimdoors:items/stabilized_rift_signature"
}
}