From 9350b913ff69d32ad708b3a0b1ff229001aa07cb Mon Sep 17 00:00:00 2001 From: Runemoro Date: Sat, 27 Jan 2018 04:22:33 -0500 Subject: [PATCH] Get ready to convert the schematics - Simplified code to have a single blockstate loop and made everything simpler - Palette no longer contains unused IDs such as sandstone or door default blockstates - Schematics use placeholders for doors and monolith to make updating them not require changing all the schematics - Fixed bug where book wasn't being translated - Make a library with default destinations and link properties - Remove translateIdCrude, since the schematic conversion code won't be run from outside the dev environment anymore - Looked at net.minecraft.util.datafix to check if there were any updates that needed to be done - Added error checking code to make sure everything is being converted correctly - Removed schematic info generator, that will be added to a separate tool that can run on the new schematics (once the old ones are replaced) - Manually checked the NBT to make sure everything is ok - Fixed the schematic containing sandstone at y=0 (it was obvious it needed to be ancient fabric) - Changed door item ids from "dimensional_door" to "iron_dimensional_door" and from "warp_dimensional_door" to "oak_dimensional_door" to match vanilla (we might want to implement more/all wood types in the future, so it's better to do it now rather than have to convert all schematics) and renamed "rift" - Added "powered" to note blocks NBT (checked which were powered before) - Added "CookTimeTotal" to furnace NBT - Fix the_nexus having SenseiKiwi's hideout door being converted to a dimensional door --- .../java/org/dimdev/ddutils/StringUtils.java | 72 --- .../java/org/dimdev/ddutils/nbt/NBTUtils.java | 7 - .../org/dimdev/ddutils/schem/Schematic.java | 11 +- .../blocks/BlockDimensionalDoorIron.java | 2 +- .../blocks/BlockDimensionalDoorWood.java | 2 +- .../shared/items/ItemDimensionalDoorIron.java | 2 +- .../shared/items/ItemDimensionalDoorWarp.java | 2 +- .../items/ItemDimensionalTrapdoorWood.java | 2 +- .../pockets/DefaultDungeonDestinations.java | 67 +++ .../shared/pockets/PocketTemplate.java | 97 +++- .../shared/pockets/SchematicHandler.java | 7 +- .../dimdoors/shared/tools/Initializer.java | 29 ++ .../shared/tools/SchematicConverter.java | 456 +++++++----------- ...Generator.java => SchematicGenerator.java} | 46 +- .../world/gateways/BaseSchematicGateway.java | 2 +- ...l_door.json => iron_dimensional_door.json} | 64 +-- ...al_door.json => oak_dimensional_door.json} | 64 +-- .../resources/assets/dimdoors/lang/de_DE.lang | 24 +- .../resources/assets/dimdoors/lang/en_US.lang | 18 +- .../resources/assets/dimdoors/lang/fr_CA.lang | 24 +- .../resources/assets/dimdoors/lang/it_IT.lang | 24 +- .../resources/assets/dimdoors/lang/nl_NL.lang | 24 +- .../resources/assets/dimdoors/lang/ro_RO.lang | 24 +- .../resources/assets/dimdoors/lang/ru_RU.lang | 24 +- .../resources/assets/dimdoors/lang/zh_CN.lang | 24 +- .../models/block/dimensional_door_bottom.json | 7 - .../block/dimensional_door_bottom_rh.json | 7 - .../models/block/dimensional_door_top.json | 7 - .../models/block/dimensional_door_top_rh.json | 7 - .../block/iron_dimensional_door_bottom.json | 7 + .../iron_dimensional_door_bottom_rh.json | 7 + .../block/iron_dimensional_door_top.json | 7 + .../block/iron_dimensional_door_top_rh.json | 7 + .../block/oak_dimensional_door_bottom.json | 7 + .../block/oak_dimensional_door_bottom_rh.json | 7 + .../block/oak_dimensional_door_top.json | 7 + .../block/oak_dimensional_door_top_rh.json | 7 + .../block/warp_dimensional_door_bottom.json | 7 - .../warp_dimensional_door_bottom_rh.json | 7 - .../block/warp_dimensional_door_top.json | 7 - .../block/warp_dimensional_door_top_rh.json | 7 - ...l_door.json => iron_dimensional_door.json} | 2 +- ...al_door.json => oak_dimensional_door.json} | 2 +- ...er.png => iron_dimensional_door_lower.png} | Bin ...er.png => iron_dimensional_door_upper.png} | Bin ...wer.png => oak_dimensional_door_lower.png} | Bin ...per.png => oak_dimensional_door_upper.png} | Bin ...nal_door.png => iron_dimensional_door.png} | Bin ...onal_door.png => oak_dimensional_door.png} | Bin 49 files changed, 605 insertions(+), 629 deletions(-) delete mode 100644 src/main/java/org/dimdev/ddutils/StringUtils.java create mode 100644 src/main/java/org/dimdev/dimdoors/shared/pockets/DefaultDungeonDestinations.java create mode 100644 src/main/java/org/dimdev/dimdoors/shared/tools/Initializer.java rename src/main/java/org/dimdev/dimdoors/shared/tools/{PocketSchematicGenerator.java => SchematicGenerator.java} (85%) rename src/main/resources/assets/dimdoors/blockstates/{warp_dimensional_door.json => iron_dimensional_door.json} (54%) rename src/main/resources/assets/dimdoors/blockstates/{dimensional_door.json => oak_dimensional_door.json} (54%) delete mode 100644 src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom.json delete mode 100644 src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom_rh.json delete mode 100644 src/main/resources/assets/dimdoors/models/block/dimensional_door_top.json delete mode 100644 src/main/resources/assets/dimdoors/models/block/dimensional_door_top_rh.json create mode 100644 src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom.json create mode 100644 src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom_rh.json create mode 100644 src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top.json create mode 100644 src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top_rh.json create mode 100644 src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom.json create mode 100644 src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom_rh.json create mode 100644 src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top.json create mode 100644 src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top_rh.json delete mode 100644 src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom.json delete mode 100644 src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom_rh.json delete mode 100644 src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top.json delete mode 100644 src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top_rh.json rename src/main/resources/assets/dimdoors/models/item/{warp_dimensional_door.json => iron_dimensional_door.json} (50%) rename src/main/resources/assets/dimdoors/models/item/{dimensional_door.json => oak_dimensional_door.json} (50%) rename src/main/resources/assets/dimdoors/textures/blocks/{dimensional_door_lower.png => iron_dimensional_door_lower.png} (100%) rename src/main/resources/assets/dimdoors/textures/blocks/{dimensional_door_upper.png => iron_dimensional_door_upper.png} (100%) rename src/main/resources/assets/dimdoors/textures/blocks/{warp_dimensional_door_lower.png => oak_dimensional_door_lower.png} (100%) rename src/main/resources/assets/dimdoors/textures/blocks/{warp_dimensional_door_upper.png => oak_dimensional_door_upper.png} (100%) rename src/main/resources/assets/dimdoors/textures/items/{dimensional_door.png => iron_dimensional_door.png} (100%) rename src/main/resources/assets/dimdoors/textures/items/{warp_dimensional_door.png => oak_dimensional_door.png} (100%) diff --git a/src/main/java/org/dimdev/ddutils/StringUtils.java b/src/main/java/org/dimdev/ddutils/StringUtils.java deleted file mode 100644 index 382a526e..00000000 --- a/src/main/java/org/dimdev/ddutils/StringUtils.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.dimdev.ddutils; - -import java.util.ArrayList; -import java.util.List; - -/** - * - * @author Robijnvogel - */ -public final class StringUtils { - - public static int simpleSearch(String[] array, String searchKey) { - for (int i = 0; i < array.length; i++) { - String entry = array[i]; - if (entry.equals(searchKey)) { - return i; - } - } - return -1; - } - - public static char flipCase(char in) { - if (Character.isUpperCase(in)) { - return Character.toLowerCase(in); - } else { - return Character.toUpperCase(in); - } - } - - public static List getAsStringList(Integer[] integers) { - List< String> list = new ArrayList<>(); - for (int integer : integers) { - list.add(String.valueOf(integer)); - } - return list; - } - - public static List getMatchingStrings(String template, List comparables, boolean caseSensitive) { - if (template.equals("")) { - return comparables; - } - List< String> results = new ArrayList<>(); - for (String comparable : comparables) { - if (isStartOfString(template, comparable, caseSensitive)) { - results.add(comparable); - } - } - return results; - } - - public static boolean isStartOfString(String template, String comparable, boolean caseSensitive) { - if (comparable.length() < template.length()) { - return false; - } else if (template.equals("")) { - return true; - } - for (int i = 0; i < template.length(); i++) { - char tChar = template.charAt(i); - char cChar = comparable.charAt(i); - if (tChar != cChar && !caseSensitive && flipCase(tChar) == cChar) { - return false; - } - } - return true; - } - -} diff --git a/src/main/java/org/dimdev/ddutils/nbt/NBTUtils.java b/src/main/java/org/dimdev/ddutils/nbt/NBTUtils.java index 4a00883d..03fdd76a 100644 --- a/src/main/java/org/dimdev/ddutils/nbt/NBTUtils.java +++ b/src/main/java/org/dimdev/ddutils/nbt/NBTUtils.java @@ -5,15 +5,8 @@ import net.minecraft.nbt.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import org.dimdev.ddutils.StringUtils; - public final class NBTUtils { - public final static int NBT_COMPOUND_TAG_ID = StringUtils.simpleSearch(NBTTagCompound.NBT_TYPES, "COMPOUND"); - public final static int STRING_TAG_ID = StringUtils.simpleSearch(NBTTagCompound.NBT_TYPES, "STRING"); - //Arrays.binarySearch(NBTTagCompound.NBT_TYPES, "COMPOUND", new StringComparator()); does not seem to work?; - //netiher does Arrays.binarySearch(NBTTagCompound.NBT_TYPES, "COMPOUND", String::compareTo); - public static NBTTagCompound writeToNBT(Object obj, NBTTagCompound nbt) { try { Class callingClass = Class.forName(new Exception().getStackTrace()[1].getClassName()); diff --git a/src/main/java/org/dimdev/ddutils/schem/Schematic.java b/src/main/java/org/dimdev/ddutils/schem/Schematic.java index e7602771..82f06a5b 100644 --- a/src/main/java/org/dimdev/ddutils/schem/Schematic.java +++ b/src/main/java/org/dimdev/ddutils/schem/Schematic.java @@ -60,7 +60,7 @@ public class Schematic { this.width = width; this.height = height; this.length = length; - blockData = new short[width][length][height]; + blockData = new short[width][height][length]; palette.add(Blocks.AIR.getDefaultState()); paletteMax++; creationDate = System.currentTimeMillis(); @@ -87,6 +87,8 @@ public class Schematic { if (nbt.hasKey("Date")) { //Date is not required schematic.creationDate = metadataCompound.getLong("Date"); + } else { + schematic.creationDate = -1; } if (nbt.hasKey("RequiredMods")) { //RequiredMods is not required (ironically) NBTTagList requiredModsTagList = (NBTTagList) metadataCompound.getTag("RequiredMods"); @@ -175,7 +177,7 @@ public class Schematic { NBTTagCompound metadataCompound = new NBTTagCompound(); if (author != null) metadataCompound.setString("Author", author); // Author is not required metadataCompound.setString("Name", name); - metadataCompound.setLong("Date", creationDate); + if (creationDate != -1) metadataCompound.setLong("Date", creationDate); NBTTagList requiredModsTagList = new NBTTagList(); for (String requiredMod : requiredMods) { requiredModsTagList.appendTag(new NBTTagString(requiredMod)); @@ -366,10 +368,15 @@ public class Schematic { adjustedEntityNBT.setUniqueId("UUID", UUID.randomUUID()); Entity entity = EntityList.createEntityFromNBT(adjustedEntityNBT, world); + // TODO: check if it is in pocket bounds world.spawnEntity(entity); } } + public IBlockState getBlockState(int x, int y, int z) { + return palette.get(blockData[x][y][z]); + } + public void setBlockState(int x, int y, int z, IBlockState state) { if (palette.contains(state)) { blockData[x][y][z] = (short) palette.indexOf(state); // TODO: optimize this (there must be some efficient list implementations) diff --git a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorIron.java b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorIron.java index 547506ef..84bc612f 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorIron.java +++ b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorIron.java @@ -14,7 +14,7 @@ import java.util.Random; public class BlockDimensionalDoorIron extends BlockDimensionalDoor { - public static final String ID = "dimensional_door"; + public static final String ID = "iron_dimensional_door"; public BlockDimensionalDoorIron() { super(Material.IRON); diff --git a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java index 84c95414..09c7d6e6 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java +++ b/src/main/java/org/dimdev/dimdoors/shared/blocks/BlockDimensionalDoorWood.java @@ -15,7 +15,7 @@ import java.util.Random; public class BlockDimensionalDoorWood extends BlockDimensionalDoor { - public static final String ID = "warp_dimensional_door"; + public static final String ID = "oak_dimensional_door"; public BlockDimensionalDoorWood() { super(Material.WOOD); diff --git a/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorIron.java b/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorIron.java index a89bddc5..c5c5569f 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorIron.java +++ b/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorIron.java @@ -25,6 +25,6 @@ public class ItemDimensionalDoorIron extends ItemDimensionalDoor { @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flagIn) { - tooltip.addAll(I18nUtils.translateMultiline("info.dimensional_door")); + tooltip.addAll(I18nUtils.translateMultiline("info.iron_dimensional_door")); } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorWarp.java b/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorWarp.java index f824691e..fc446beb 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorWarp.java +++ b/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalDoorWarp.java @@ -25,6 +25,6 @@ public class ItemDimensionalDoorWarp extends ItemDimensionalDoor { @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flagIn) { - tooltip.addAll(I18nUtils.translateMultiline("info.warp_dimensional_door")); + tooltip.addAll(I18nUtils.translateMultiline("info.oak_dimensional_door")); } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalTrapdoorWood.java b/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalTrapdoorWood.java index 27c56290..2bd78e43 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalTrapdoorWood.java +++ b/src/main/java/org/dimdev/dimdoors/shared/items/ItemDimensionalTrapdoorWood.java @@ -26,6 +26,6 @@ public class ItemDimensionalTrapdoorWood extends ItemDimensionalTrapdoor { @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.addAll(I18nUtils.translateMultiline("info.wood_dimensional_trapdoor")); + tooltip.addAll(I18nUtils.translateMultiline("info.dimensional_trapdoor")); } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/pockets/DefaultDungeonDestinations.java b/src/main/java/org/dimdev/dimdoors/shared/pockets/DefaultDungeonDestinations.java new file mode 100644 index 00000000..fcd00315 --- /dev/null +++ b/src/main/java/org/dimdev/dimdoors/shared/pockets/DefaultDungeonDestinations.java @@ -0,0 +1,67 @@ +package org.dimdev.dimdoors.shared.pockets; + +import org.dimdev.dimdoors.shared.rifts.RiftDestination; +import org.dimdev.dimdoors.shared.rifts.destinations.AvailableLinkDestination; +import org.dimdev.dimdoors.shared.rifts.destinations.PocketEntranceMarker; +import org.dimdev.dimdoors.shared.rifts.destinations.PocketExitMarker; +import org.dimdev.dimdoors.shared.rifts.registry.LinkProperties; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; + +public final class DefaultDungeonDestinations { // TODO: lower weights? + + public static final LinkProperties pocketLinkProperties = LinkProperties.builder() + .groups(new HashSet<>(Arrays.asList(0, 1))) + .linksRemaining(1).build(); + + public static final LinkProperties overworldLinkProperties = LinkProperties.builder() + .groups(new HashSet<>(Arrays.asList(0, 1))) + .entranceWeight(50) + .linksRemaining(1).build(); + + public static final RiftDestination deeperDungeonDestination = AvailableLinkDestination.builder() + .acceptedGroups(Collections.singleton(0)) + .coordFactor(1) + .negativeDepthFactor(10000) + .positiveDepthFactor(160) + .weightMaximum(100) + .newRiftWeight(1).build(); + + public static final RiftDestination shallowerDungeonDestination = AvailableLinkDestination.builder() + .acceptedGroups(Collections.singleton(0)) + .coordFactor(1) + .negativeDepthFactor(160) + .positiveDepthFactor(10000) + .weightMaximum(100) + .newRiftWeight(1).build(); + + public static final RiftDestination overworldDestination = AvailableLinkDestination.builder() + .acceptedGroups(Collections.singleton(0)) + .coordFactor(1) + .negativeDepthFactor(0.00000000001) // The division result is cast to an int, so Double.MIN_VALUE would cause an overflow + .positiveDepthFactor(Double.POSITIVE_INFINITY) + .weightMaximum(100) + .newRiftWeight(1).build(); + + public static final RiftDestination twoWayPocketEntrance = PocketEntranceMarker.builder() + .weight(1) + .ifDestination(PocketExitMarker.builder().build()) + .otherwiseDestination(AvailableLinkDestination.builder() + .acceptedGroups(Collections.singleton(0)) + .coordFactor(1) + .negativeDepthFactor(80) + .positiveDepthFactor(10000) + .weightMaximum(100) + .newRiftWeight(1).build()).build(); + + public static final RiftDestination gatewayDestination = AvailableLinkDestination.builder() + .acceptedGroups(Collections.singleton(0)) + .coordFactor(1) // TODO: lower value? + .negativeDepthFactor(Double.POSITIVE_INFINITY) + .positiveDepthFactor(160) // TODO: lower value? + .weightMaximum(300) // Link further away + .newRiftWeight(1) + .build(); +} diff --git a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java index dd1694e1..6343b273 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java +++ b/src/main/java/org/dimdev/dimdoors/shared/pockets/PocketTemplate.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; +import net.minecraft.block.state.IBlockState; import net.minecraft.inventory.IInventory; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -19,6 +20,7 @@ import org.dimdev.ddutils.WorldUtils; import org.dimdev.ddutils.math.MathUtils; import org.dimdev.ddutils.schem.Schematic; import org.dimdev.dimdoors.DimDoors; +import org.dimdev.dimdoors.shared.entities.EntityMonolith; import org.dimdev.dimdoors.shared.rifts.RiftDestination; import org.dimdev.dimdoors.shared.rifts.TileEntityRift; import org.dimdev.dimdoors.shared.rifts.destinations.PocketEntranceMarker; @@ -29,9 +31,7 @@ import org.dimdev.dimdoors.shared.tileentities.TileEntityEntranceRift; import org.dimdev.pocketlib.Pocket; import org.dimdev.pocketlib.PocketRegistry; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; +import java.util.*; /** * @author Robijnvogel @@ -57,6 +57,95 @@ public class PocketTemplate { } } + public void replacePlaceholders() { // TODO: it should be possible to place a schematic without replacing placeholders + // Replace placeholders (some schematics will contain them) + List tileEntities = new ArrayList<>(); + for (NBTTagCompound tileEntityNBT : schematic.tileEntities) { + if (tileEntityNBT.hasKey("placeholder")) { + int x = tileEntityNBT.getInteger("x"); + int y = tileEntityNBT.getInteger("y"); + int z = tileEntityNBT.getInteger("z"); + + IBlockState state = schematic.palette.get(schematic.blockData[x][y][z]); + + NBTTagCompound newNBT; + switch (tileEntityNBT.getString("placeholder")) { + case "deeper_depth_door": + TileEntityEntranceRift rift = (TileEntityEntranceRift) state.getBlock().createTileEntity(null, state); + rift.setPos(new BlockPos(x, y, z)); + rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); + rift.setDestination(DefaultDungeonDestinations.deeperDungeonDestination); + newNBT = rift.serializeNBT(); + break; + case "shallower_depth_door": + /*TileEntityEntranceRift*/ rift = (TileEntityEntranceRift) state.getBlock().createTileEntity(null, state); + rift.setPos(new BlockPos(x, y, z)); + rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); + rift.setDestination(DefaultDungeonDestinations.shallowerDungeonDestination); + newNBT = rift.serializeNBT(); + break; + case "overworld_door": + /*TileEntityEntranceRift*/ rift = (TileEntityEntranceRift) state.getBlock().createTileEntity(null, state); + rift.setPos(new BlockPos(x, y, z)); + rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); + rift.setDestination(DefaultDungeonDestinations.overworldDestination); + newNBT = rift.serializeNBT(); + break; + case "pocket_entrance_door": + /*TileEntityEntranceRift*/ rift = (TileEntityEntranceRift) state.getBlock().createTileEntity(null, state); + rift.setPos(new BlockPos(x, y, z)); + rift.setProperties(DefaultDungeonDestinations.pocketLinkProperties); + rift.setDestination(DefaultDungeonDestinations.twoWayPocketEntrance); + newNBT = rift.serializeNBT(); + break; + case "gateway_portal": + /*TileEntityEntranceRift*/ rift = (TileEntityEntranceRift) state.getBlock().createTileEntity(null, state); + rift.setPos(new BlockPos(x, y, z)); + rift.setProperties(DefaultDungeonDestinations.overworldLinkProperties); + rift.setDestination(DefaultDungeonDestinations.gatewayDestination); + rift.setCloseAfterPassThrough(true); + newNBT = rift.serializeNBT(); + break; + default: + throw new RuntimeException("Unknown tile entity placeholder: " + tileEntityNBT.getString("placeholder")); + } + // TODO: allow overriding some placeholder properties by copying other properties (not placeholder and x/y/z) to the new nbt + tileEntities.add(newNBT); + } else { + tileEntities.add(tileEntityNBT); + } + } + schematic.tileEntities = tileEntities; + + + List entities = new ArrayList<>(); + for (NBTTagCompound entitiesNBT : schematic.entities) { + if (entitiesNBT.hasKey("placeholder")) { + double x = entitiesNBT.getDouble("x"); + double y = entitiesNBT.getDouble("y"); + double z = entitiesNBT.getDouble("z"); + float yaw = entitiesNBT.getFloat("yaw"); + float pitch = entitiesNBT.getFloat("pitch"); + + NBTTagCompound newNBT; + switch (entitiesNBT.getString("placeholder")) { + case "monolith": + EntityMonolith monolith = new EntityMonolith(null); + monolith.setLocationAndAngles(x, y, z, yaw, pitch); + newNBT = monolith.serializeNBT(); + break; + default: + throw new RuntimeException("Unknown entity placeholder: " + entitiesNBT.getString("placeholder")); + } + // TODO: allow overriding some placeholder properties by copying other properties (not placeholder and x/y/z) to the new nbt + entities.add(newNBT); + } else { + entities.add(entitiesNBT); + } + } + schematic.entities = entities; + } + public void place(Pocket pocket) { pocket.setSize(size); int gridSize = PocketRegistry.instance(pocket.getDim()).getGridSize(); @@ -79,8 +168,8 @@ public class PocketTemplate { int yBase = 0; int zBase = pocket.getZ() * gridSize * 16; + // Fill chests and make rift list List rifts = new ArrayList<>(); - for (NBTTagCompound tileEntityNBT : schematic.tileEntities) { BlockPos pos = new BlockPos( xBase + tileEntityNBT.getInteger("x"), diff --git a/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java b/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java index 37eb2fad..1475afc1 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java +++ b/src/main/java/org/dimdev/dimdoors/shared/pockets/SchematicHandler.java @@ -82,7 +82,9 @@ public class SchematicHandler { // TODO: parts of this should be moved to the or if (file.isDirectory() || !file.getName().endsWith(".schem")) continue; try { Schematic schematic = Schematic.loadFromNBT(CompressedStreamTools.readCompressed(new FileInputStream(file))); - templates.add(new PocketTemplate(SAVED_POCKETS_GROUP_NAME, file.getName(), null, null, null, schematic, -1, 0)); + PocketTemplate template = new PocketTemplate(SAVED_POCKETS_GROUP_NAME, file.getName(), null, null, null, schematic, -1, 0); + template.replacePlaceholders(); + templates.add(template); } catch (IOException e) { DimDoors.log.error("Error reading schematic " + file.getName() + ": " + e); } @@ -149,7 +151,7 @@ public class SchematicHandler { // TODO: parts of this should be moved to the or try { schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream); if (!schematicNBT.hasKey("Version")) { - schematic = SchematicConverter.convertSchematic(schematicNBT, template.getId(), template.getName(), template.getAuthor()); + schematic = SchematicConverter.convertSchematic(schematicNBT, template.getId(), template.getAuthor()); } else { schematic = Schematic.loadFromNBT(schematicNBT); } @@ -171,6 +173,7 @@ public class SchematicHandler { // TODO: parts of this should be moved to the or DimDoors.log.warn("Schematic " + template.getId() + " was bigger than specified in its json file and therefore wasn't loaded"); } template.setSchematic(schematic); + template.replacePlaceholders(); } return validTemplates; } diff --git a/src/main/java/org/dimdev/dimdoors/shared/tools/Initializer.java b/src/main/java/org/dimdev/dimdoors/shared/tools/Initializer.java new file mode 100644 index 00000000..c4843590 --- /dev/null +++ b/src/main/java/org/dimdev/dimdoors/shared/tools/Initializer.java @@ -0,0 +1,29 @@ +package org.dimdev.dimdoors.shared.tools; + +import net.minecraft.block.Block; +import net.minecraft.init.Bootstrap; +import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.common.DummyModContainer; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.fml.common.ModMetadata; +import net.minecraftforge.registries.GameData; +import net.minecraftforge.registries.RegistryManager; +import org.dimdev.dimdoors.DimDoors; +import org.dimdev.dimdoors.server.ServerProxy; +import org.dimdev.dimdoors.shared.blocks.ModBlocks; + +public final class Initializer { + public static void initialize() { + Bootstrap.register(); + ModMetadata md = new ModMetadata(); + md.modId = DimDoors.MODID; + ModContainer mc = new DummyModContainer(md); + Loader.instance().setupTestHarness(mc); + Loader.instance().setActiveModContainer(mc); + ModBlocks.registerBlocks(new RegistryEvent.Register(GameData.BLOCKS, RegistryManager.ACTIVE.getRegistry(GameData.BLOCKS))); + new ServerProxy().registerTileEntities(); + new ServerProxy().registerRiftDestinations(); + Loader.instance().setActiveModContainer(null); + } +} diff --git a/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java b/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java index 90839212..3cd00f03 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java +++ b/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicConverter.java @@ -11,128 +11,41 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagString; import net.minecraft.tileentity.*; -import net.minecraft.util.EnumFacing; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3i; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; -import org.dimdev.ddutils.nbt.NBTUtils; +import net.minecraftforge.common.util.Constants; import org.dimdev.ddutils.schem.Schematic; import org.dimdev.dimdoors.DimDoors; +import org.dimdev.dimdoors.shared.blocks.BlockDimensionalDoor; +import org.dimdev.dimdoors.shared.blocks.BlockDimensionalDoorWood; import org.dimdev.dimdoors.shared.blocks.ModBlocks; -import org.dimdev.dimdoors.shared.entities.EntityMonolith; import org.dimdev.dimdoors.shared.items.ModItems; -import org.dimdev.dimdoors.shared.rifts.destinations.AvailableLinkDestination; -import org.dimdev.dimdoors.shared.rifts.destinations.PocketEntranceMarker; -import org.dimdev.dimdoors.shared.rifts.destinations.PocketExitMarker; -import org.dimdev.dimdoors.shared.rifts.registry.LinkProperties; -import org.dimdev.dimdoors.shared.tileentities.TileEntityEntranceRift; import javax.annotation.Nonnull; -import java.util.*; +import java.util.ArrayList; +import java.util.List; -/** - * @author Robijnvogel - */ public final class SchematicConverter { private final static int LOCKED_CHEST_ID = 95; private final static int POTION_ID = 373; private final static int WRITTEN_BOOK_ID = 387; - private final static int NBT_COMPOUND_TAG_ID = NBTUtils.NBT_COMPOUND_TAG_ID; - private final static int STRING_TAG_ID = NBTUtils.NBT_COMPOUND_TAG_ID; - private static final boolean GENERATE_DUNGEON_INFO = true; + public static Schematic convertSchematic(NBTTagCompound nbt, String schematicId, String author) { + Schematic schematic = new Schematic(nbt.getShort("Width"), nbt.getShort("Height"), nbt.getShort("Length")); - public static Schematic convertSchematic(NBTTagCompound nbt, String schematicId, String name, String author) { - Schematic schematic = new Schematic(); - - schematic.version = 1; //already the default value + schematic.name = schematicId; schematic.author = author; - schematic.name = name; // This is passed as an argument by the SchematicHandler. The name is taken from the JSONs - schematic.creationDate = System.currentTimeMillis(); + schematic.creationDate = -1; // Old schematics had no creation date schematic.requiredMods = new String[]{DimDoors.MODID}; - schematic.width = nbt.getShort("Width"); - schematic.height = nbt.getShort("Height"); - schematic.length = nbt.getShort("Length"); - schematic.offset = new int[]{0, 0, 0}; - - // Schematic info - int ironDimDoors = 0; - int warpDoors = 0; - int monoliths = 0; - int chests = 0; - int dispensers = 0; - int allPistonBases = 0; - int tnt = 0; - int diamondBlocks = 0; - int goldBlocks = 0; - int ironBlocks = 0; - - byte[] blockIdArray = nbt.getByteArray("Blocks"); - byte[] addId = nbt.getByteArray("AddBlocks"); - Map palletteMap = new HashMap<>(); // block ID -> palette index - byte currentPalletteIndex = 0; - for (int i = 0; i < blockIdArray.length; i++) { - int id; - if (i >> 1 >= addId.length) { - id = (short) (blockIdArray[i] & 0xFF); - } else if ((i & 1) == 0) { - id = (short) (((addId[i >> 1] & 0x0F) << 8) + (blockIdArray[i] & 0xFF)); - } else { - id = (short) (((addId[i >> 1] & 0xF0) << 4) + (blockIdArray[i] & 0xFF)); - } - if (palletteMap.containsKey(id)) { - blockIdArray[i] = palletteMap.get(id); - } else { - - IBlockState block = Blocks.AIR.getDefaultState(); //air is the default - if (id <= 159 && id != LOCKED_CHEST_ID) { - block = Block.getBlockById(id).getDefaultState(); - } else { - switch (id) { - case 1973: - block = ModBlocks.FABRIC.getDefaultState(); - break; - case 1975: - block = ModBlocks.WARP_DIMENSIONAL_DOOR.getDefaultState(); - break; - case 1970: - block = ModBlocks.DIMENSIONAL_DOOR.getDefaultState(); - break; - case 1979: - block = ModBlocks.DIMENSIONAL_PORTAL.getDefaultState(); - break; - case 220: - block = ModBlocks.ANCIENT_FABRIC.getDefaultState(); - break; - case LOCKED_CHEST_ID: // Locked chest's ID was replaced with stained glass in 1.7.2 - DimDoors.log.error("Schematic contained a locked chest, which was removed in 1.7.2."); - break; - } - } - - if (id != 0 && block.getBlock().getRegistryName().toString().equals("minecraft:air")) { - throw new RuntimeException("Unknown ID " + id + " in schematic " + schematicId); - } - if (block.equals(Blocks.IRON_DOOR)) { - block = ModBlocks.DIMENSIONAL_DOOR.getDefaultState(); - } - if (block.equals(Blocks.OAK_DOOR)) { - block = ModBlocks.WARP_DIMENSIONAL_DOOR.getDefaultState(); - } - schematic.palette.add(block); - palletteMap.put(id, currentPalletteIndex); - blockIdArray[i] = currentPalletteIndex; - currentPalletteIndex++; - } - } - + // List tileEntityPositions = new ArrayList<>(); if (nbt.hasKey("TileEntities")) { - NBTTagList tileEntitiesNBT = nbt.getTagList("TileEntities", NBT_COMPOUND_TAG_ID); + NBTTagList tileEntitiesNBT = nbt.getTagList("TileEntities", Constants.NBT.TAG_COMPOUND); if (!tileEntitiesNBT.hasNoTags()) { for (int i = 0; i < tileEntitiesNBT.tagCount(); i++) { NBTTagCompound tileEntityNBT = tileEntitiesNBT.getCompoundTagAt(i); @@ -144,12 +57,13 @@ public final class SchematicConverter { switch (tileEntityNBT.getString("id")) { case "TileEntityDimDoor": case "TileEntityRift": - continue; // remove all Rifts from the Doors. These will get added back later + continue; // Remove all Rifts from the Doors. These will get added back later + case "Furnace": + tileEntityNBT.setInteger("CookTimeTotal", 0); case "Chest": case "Trap": - case "Hopper": - case "Furnace": //there aren't any other kinds of inventories in the old schematics. At least not with contents - NBTTagList items = tileEntityNBT.getTagList("Items", NBT_COMPOUND_TAG_ID); + case "Hopper": // There aren't any other kinds of inventories in the old schematics. + NBTTagList items = tileEntityNBT.getTagList("Items", Constants.NBT.TAG_COMPOUND); for (int j = 0; j < items.tagCount(); j++) { NBTTagCompound itemTag = items.getCompoundTagAt(j); int oldID = itemTag.getInteger("id"); @@ -187,7 +101,7 @@ public final class SchematicConverter { case WRITTEN_BOOK_ID: item = Item.getItemById(oldID); NBTTagCompound subTag = itemTag.getCompoundTag("tag"); - NBTTagList oldPages = subTag.getTagList("pages", STRING_TAG_ID); + NBTTagList oldPages = subTag.getTagList("pages", Constants.NBT.TAG_STRING); //DimDoors.log.info("Written book has " + oldPages.tagCount() + " pages." + (oldPages.tagCount() == 0 ? " STRING_TAG_ID is " + STRING_TAG_ID : "")); NBTTagList newPages = new NBTTagList(); for (NBTBase pageNBTBase : oldPages) { @@ -197,7 +111,7 @@ public final class SchematicConverter { String newPage = ITextComponent.Serializer.componentToJson(new TextComponentString(oldPage)); //substitutes paragraph break characters with "\n" NBTTagString newPageNBT = new NBTTagString(newPage); //this HAS to be created new, because a change doesn't propagate up to pageNBTBase completely. Only the first word gets read from the tag list eventually. I don't know why, but it does. newPages.appendTag(newPageNBT); - //DimDoors.log.info("Converted written book page: \n{ " + oldPage + "\n into: \n" + newPageNBT.getString() + "\n."); + DimDoors.log.info("Converted written book page: \n{ " + oldPage + "\n into: \n" + newPageNBT.getString() + "\n."); } subTag.setTag("pages", newPages); break; @@ -212,12 +126,11 @@ public final class SchematicConverter { } } - itemTag.removeTag("id"); //not sure if needed, but just to be sure... - String newID = item.getRegistryName().toString(); //item.getItemStackDisplayName(ItemStack.EMPTY); - itemTag.setString("id", newID); + itemTag.setString("id", item.getRegistryName().toString()); //item.getItemStackDisplayName(ItemStack.EMPTY); if (oldMeta != newMeta) { itemTag.setInteger("Damage", newMeta); } + DimDoors.log.info("Item: " + item.getRegistryName()); //DimDoors.log.info("ID of itemstack in inventory set from " + oldID + " to '" + newID + "'."); } break; @@ -227,223 +140,188 @@ public final class SchematicConverter { tileEntityNBT.setString("Text3", ITextComponent.Serializer.componentToJson(new TextComponentString(tileEntityNBT.getString("Text3")))); tileEntityNBT.setString("Text4", ITextComponent.Serializer.componentToJson(new TextComponentString(tileEntityNBT.getString("Text4")))); break; + case "Note": + tileEntityNBT.setBoolean("powered", false); + break; default: break; } String oldID = tileEntityNBT.getString("id"); - String newID = translateId(oldID); + String newID = translateId(oldID).toString(); tileEntityNBT.setString("id", newID); schematic.tileEntities.add(tileEntityNBT); } } } + // - byte[] dataIntArray = nbt.getByteArray("Data"); - schematic.blockData = new short[schematic.width][schematic.height][schematic.length]; + // + byte[] idArray = nbt.getByteArray("Blocks"); + byte[] addIdArray = nbt.getByteArray("AddBlocks"); + byte[] metaArray = nbt.getByteArray("Data"); + IBlockState lastWasSandstone; + int entranceCount = 0; for (int x = 0; x < schematic.width; x++) { - for (int y = 0; y < schematic.height; y++) { - for (int z = 0; z < schematic.length; z++) { - int blockInt = blockIdArray[x + z * schematic.width + y * schematic.width * schematic.length]; //according to the documentation on https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-1.md - int metadata = dataIntArray[x + z * schematic.width + y * schematic.width * schematic.length]; //according to the documentation on https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-1.md - - IBlockState baseState = schematic.palette.get(blockInt); //this is the default blockstate except for ancient fabric - if (baseState == baseState.getBlock().getDefaultState() || baseState.getBlock().equals(ModBlocks.FABRIC) || baseState.getBlock().equals(ModBlocks.ANCIENT_FABRIC)) { //should only be false if {@code baseState} is ancient fabric - IBlockState blockState; - if (baseState.getBlock().equals(ModBlocks.FABRIC) || baseState.getBlock().equals(ModBlocks.ANCIENT_FABRIC)) { - blockState = baseState; - } else { - //noinspection deprecation - blockState = baseState.getBlock().getStateFromMeta(metadata); - } - if (schematic.palette.contains(blockState)) { //check whether or not this blockstate is already in the list - blockInt = schematic.palette.indexOf(blockState); - } else { - schematic.palette.add(blockState); - //DimDoors.log.info("New blockstate detected. Original blockInt = " + blockInt + " and blockState is " + blockState); - blockInt = schematic.palette.size() - 1; - } - Block block = blockState.getBlock(); - - //counting blocks and features - if (block.equals(Blocks.DIAMOND_BLOCK)) { - diamondBlocks++; - } else if (block.equals(Blocks.GOLD_BLOCK)) { - goldBlocks++; - } else if (block.equals(Blocks.IRON_BLOCK)) { - ironBlocks++; - } else if (block.equals(Blocks.PISTON) || block.equals(Blocks.STICKY_PISTON)) { - allPistonBases++; - } else if (block.equals(Blocks.TNT)) { - tnt++; - } else if (block.equals(Blocks.CHEST)) { - chests++; - } else if (block.equals(Blocks.DISPENSER)) { - dispensers++; - } else if (block.equals(Blocks.END_PORTAL_FRAME)) { - monoliths++; - } else if (block.equals(ModBlocks.DIMENSIONAL_DOOR)) { - ironDimDoors++; - } else if (block.equals(ModBlocks.WARP_DIMENSIONAL_DOOR)) { - warpDoors++; - } - - //Monoliths, Rifts and missing TileEntities - if (block.equals(Blocks.END_PORTAL_FRAME)) { - // I think it's safe to assume that air is present - blockInt = schematic.palette.indexOf(Blocks.AIR.getDefaultState()); - EntityMonolith monolith = new EntityMonolith(null); - EnumFacing facing = blockState.getValue(BlockEndPortalFrame.FACING); - monolith.setLocationAndAngles(x + 0.5d, y, z + 0.5d, facing.getHorizontalAngle(), 0); - schematic.entities.add(monolith.serializeNBT()); - } else if (block.equals(ModBlocks.DIMENSIONAL_DOOR) || block.equals(ModBlocks.WARP_DIMENSIONAL_DOOR) || block.equals(ModBlocks.DIMENSIONAL_PORTAL)) { - //DimDoors.log.info("Door found: " + block.getUnlocalizedName()); - if (blockState.getProperties().get(BlockDoor.HALF).equals(BlockDoor.EnumDoorHalf.LOWER)) { //LOWER? seriously Runemoro? Fuck you. XD - TileEntityEntranceRift rift = (TileEntityEntranceRift) block.createTileEntity(null, blockState); - rift.setPos(new BlockPos(x, y, z)); - - rift.setProperties(LinkProperties.builder() - .groups(new HashSet<>(Arrays.asList(0, 1))) - .linksRemaining(1).build()); - - if (block.equals(ModBlocks.DIMENSIONAL_DOOR)) { - rift.setDestination(AvailableLinkDestination.builder() - .acceptedGroups(Collections.singleton(0)) - .coordFactor(1) - .negativeDepthFactor(10000) - .positiveDepthFactor(80) - .weightMaximum(100) - .newRiftWeight(1).build()); - } else if (block.equals(ModBlocks.WARP_DIMENSIONAL_DOOR)) { - IBlockState stateBelow = schematic.palette.get(schematic.blockData[x][y - 1][z]); - if (stateBelow.getBlock().equals(Blocks.SANDSTONE)) { - rift.setProperties(null); // TODO: this should be removed once the linking equations are made symmetric - rift.setDestination(AvailableLinkDestination.builder() - .acceptedGroups(Collections.singleton(0)) - .coordFactor(1) - .negativeDepthFactor(0.00000000001) // The division result is cast to an int, so Double.MIN_VALUE would cause an overflow - .positiveDepthFactor(Double.POSITIVE_INFINITY) - .weightMaximum(100) - .newRiftWeight(1).build()); - //change the sandstone to the block below it. - if (y >= 2) { - schematic.blockData[x][y - 1][z] = schematic.blockData[x][y - 2][z]; - } else { - //this only happens for one of the old schematics - schematic.blockData[x][y - 1][z] = schematic.blockData[x + 1][y][z]; - //DimDoors.log.error("Someone placed a door on a sandstone block at the bottom of a schematic. This causes problems and should be remedied. Schematic name: " + schematicId); - } - } else { - rift.setDestination(PocketEntranceMarker.builder() - .weight(1) - .ifDestination(PocketExitMarker.builder().build()) - .otherwiseDestination(AvailableLinkDestination.builder() - .acceptedGroups(Collections.singleton(0)) - .coordFactor(1) - .negativeDepthFactor(80) - .positiveDepthFactor(10000) - .weightMaximum(100) - .newRiftWeight(1).build()).build()); - } - } else if (block.equals(ModBlocks.DIMENSIONAL_PORTAL)) { - rift.setProperties(LinkProperties.builder() - .groups(new HashSet<>(Arrays.asList(0, 1))) - .entranceWeight(50) - .linksRemaining(1).build()); - rift.setDestination(AvailableLinkDestination.builder() - .acceptedGroups(Collections.singleton(0)) - .coordFactor(1) // TODO: lower value? - .negativeDepthFactor(Double.POSITIVE_INFINITY) - .positiveDepthFactor(80) // TODO: lower value? - .weightMaximum(300) // Link further away - .newRiftWeight(1) - .build()); - rift.setCloseAfterPassThrough(true); - } - rift.markStateChanged(); - - schematic.tileEntities.add(rift.serializeNBT()); - } - } else if (block.hasTileEntity(blockState) && !tileEntityPositions.contains(new Vec3i(x, y, z))) { - TileEntity tileEntity = block.createTileEntity(null, blockState); - tileEntity.setPos(new BlockPos(x, y, z)); - //tileEntitiesNBT.appendTag(tileEntity.serializeNBT()); - schematic.tileEntities.add(tileEntity.serializeNBT()); - //DimDoors.log.info("Adding missing tile entity at " + new Vec3i(x, y, z) + " (state = " + blockState + ")"); - } - } else { // if this is ancient fabric - blockInt = schematic.palette.indexOf(baseState); + for (int z = 0; z < schematic.length; z++) { + lastWasSandstone = null; + for (int y = 0; y < schematic.height; y++) { + // Get the ID and meta at that position. See https://minecraft.gamepedia.com/Schematic_file_format + int index = x + z * schematic.width + y * schematic.width * schematic.length; + int id; + if (index >> 1 >= addIdArray.length) { + id = (short) (idArray[index] & 0xFF); + } else if ((index & 1) == 0) { + id = (short) (((addIdArray[index >> 1] & 0x0F) << 8) + (idArray[index] & 0xFF)); + } else { + id = (short) (((addIdArray[index >> 1] & 0xF0) << 4) + (idArray[index] & 0xFF)); + } + int meta = metaArray[index]; + + IBlockState state = getState(id, meta); + Block block = state.getBlock(); + + // Monoliths + if (block == Blocks.END_PORTAL_FRAME) { + NBTTagCompound monolithPlaceholder = new NBTTagCompound(); + monolithPlaceholder.setString("placeholder", "monolith"); + monolithPlaceholder.setDouble("x", x + 0.5d); + monolithPlaceholder.setDouble("y", y); + monolithPlaceholder.setDouble("z", x + 0.5d); + + monolithPlaceholder.setFloat("yaw", state.getValue(BlockEndPortalFrame.FACING).getHorizontalAngle()); + monolithPlaceholder.setFloat("pitch", 0); + + schematic.entities.add(monolithPlaceholder); + state = Blocks.AIR.getDefaultState(); + block = Blocks.AIR; + } + + // Fix for the_nexus having a second door (SenseiKiwi's hideout) being an entrance + if (schematicId.equals("the_nexus") && y > 10 && block instanceof BlockDimensionalDoorWood) { + block = Blocks.OAK_DOOR; + //noinspection deprecation + state = block.getStateFromMeta(meta); + } + + // Doors + if (block instanceof BlockDimensionalDoor && state.getValue(BlockDoor.HALF) == BlockDoor.EnumDoorHalf.LOWER) { + NBTTagCompound riftPlaceholder = new NBTTagCompound(); + riftPlaceholder.setInteger("x", x); + riftPlaceholder.setInteger("y", y); + riftPlaceholder.setInteger("z", z); + + if (block == ModBlocks.DIMENSIONAL_DOOR) { + riftPlaceholder.setString("placeholder", "deeper_depth_door"); + } else if (block == ModBlocks.WARP_DIMENSIONAL_DOOR) { + if (lastWasSandstone != null) { + riftPlaceholder.setString("placeholder", "overworld_door"); + } else { + riftPlaceholder.setString("placeholder", "pocket_entrance_door"); + entranceCount++; + } + } else if (block == ModBlocks.DIMENSIONAL_PORTAL) { + riftPlaceholder.setString("placeholder", "gateway_portal"); + } + + schematic.tileEntities.add(riftPlaceholder); + } else if (block.hasTileEntity(state) && !tileEntityPositions.contains(new Vec3i(x, y, z))) { + TileEntity tileEntity = block.createTileEntity(null, state); + tileEntity.setPos(new BlockPos(x, y, z)); + schematic.tileEntities.add(tileEntity.serializeNBT()); + // DimDoors.log.info("Adding missing tile entity at " + new Vec3i(x, y, z) + " (state = " + state + ")"); + } + + if (lastWasSandstone != null) { + if (state.getBlock() == ModBlocks.WARP_DIMENSIONAL_DOOR) { + if (y >= 2) { + schematic.setBlockState(x, y - 1, z, schematic.getBlockState(x, y - 2, z)); + } else { + DimDoors.log.error("Sandstone under warp door found at y = 0 in schematic " + schematicId); + if (schematicId.equals("small_rotunda_with_exit")) { + schematic.setBlockState(x, y - 1, z, ModBlocks.FABRIC.getDefaultState()); + } else { + schematic.setBlockState(x, y - 1, z, lastWasSandstone); + } + } + } else { + schematic.setBlockState(x, y - 1, z, lastWasSandstone); + } + } + + // There aren't any non-default sandstone blocks + if (block == Blocks.SANDSTONE) { + lastWasSandstone = state; + } else { + lastWasSandstone = null; + try { + schematic.setBlockState(x, y, z, state); + } catch (IndexOutOfBoundsException e) { + DimDoors.log.error("...", e); + } } - assert blockInt >= 0; - schematic.blockData[x][y][z] = (short) blockInt; } } } - if (!nbt.getTag("Entities").hasNoTags()) { - throw new RuntimeException("Schematic contains entities, but those aren't implemented in the conversion code"); - } - schematic.paletteMax = schematic.palette.size() - 1; + // - if (GENERATE_DUNGEON_INFO) { - DimDoors.log.info(schematicId + "," + ironDimDoors + "," + warpDoors + "," + monoliths + "," + chests + "," - + dispensers + "," + allPistonBases + "," + tnt + "," + diamondBlocks + "," + goldBlocks + "," + ironBlocks); + if (!nbt.getTag("Entities").hasNoTags()) { + throw new RuntimeException("Schematic contains entities, but those aren't implemented in the conversion code."); } return schematic; } - @Nonnull - private static String translateId(String id) { // TODO - ResourceLocation location; - switch (id) { - case "Sign": - location = TileEntity.getKey(TileEntitySign.class); - break; - case "Music": - location = TileEntity.getKey(TileEntityNote.class); - break; - case "Trap": - location = TileEntity.getKey(TileEntityDispenser.class); - break; - case "Comparator": - location = TileEntity.getKey(TileEntityComparator.class); - break; - case "Hopper": - location = TileEntity.getKey(TileEntityHopper.class); - break; - case "Furnace": - location = TileEntity.getKey(TileEntityFurnace.class); - break; - case "Chest": - location = TileEntity.getKey(TileEntityChest.class); - break; - default: - throw new RuntimeException("Tile entity ID " + id + " not supported by conversion code"); + private static IBlockState getState(int id, int meta) { + Block block = Blocks.AIR; + if (id <= 159 && id != LOCKED_CHEST_ID) { + block = Block.getBlockById(id); + } else { + switch (id) { + case 1973: + return ModBlocks.FABRIC.getDefaultState(); + case 1975: + return ModBlocks.WARP_DIMENSIONAL_DOOR.getStateFromMeta(meta); + case 1970: + return ModBlocks.DIMENSIONAL_DOOR.getStateFromMeta(meta); + case 1979: + return ModBlocks.DIMENSIONAL_PORTAL.getStateFromMeta(meta); + case 220: + return ModBlocks.ANCIENT_FABRIC.getDefaultState(); + case LOCKED_CHEST_ID: // Locked chest's ID was replaced with stained glass in 1.7.2 + DimDoors.log.error("Schematic contained a locked chest, which was removed in 1.7.2."); + break; + } } - if (location == null) { - DimDoors.log.error("Resourcelocation of TileEntity with old ID: " + id + " was null. If you want to complain about log spam; " + (id.equals("Hopper") ? "it is very likely that it's FoamFix causing this. Please update it to at least version 0.9.0-1.12.2!" : "we have no idea what causes this, so please report it.")); - location = translateIdCrude(id); + + if (id != 0 && block.getRegistryName().toString().equals("minecraft:air")) { + throw new RuntimeException("Unknown ID " + id + " in schematic"); } - return location.toString(); + + if (block.equals(Blocks.IRON_DOOR)) return ModBlocks.DIMENSIONAL_DOOR.getStateFromMeta(meta); + if (block.equals(Blocks.OAK_DOOR)) return ModBlocks.WARP_DIMENSIONAL_DOOR.getStateFromMeta(meta); + //noinspection deprecation + return block.getStateFromMeta(meta); } @Nonnull - private static ResourceLocation translateIdCrude(String id) { + private static ResourceLocation translateId(String id) { switch (id) { case "Sign": - return new ResourceLocation("minecraft:sign"); + return TileEntity.getKey(TileEntitySign.class); case "Music": - return new ResourceLocation("minecraft:noteblock"); + return TileEntity.getKey(TileEntityNote.class); case "Trap": - return new ResourceLocation("minecraft:dispenser"); + return TileEntity.getKey(TileEntityDispenser.class); case "Comparator": - return new ResourceLocation("minecraft:comparator"); + return TileEntity.getKey(TileEntityComparator.class); case "Hopper": - return new ResourceLocation("minecraft:hopper"); + return TileEntity.getKey(TileEntityHopper.class); case "Furnace": - return new ResourceLocation("minecraft:furnace"); + return TileEntity.getKey(TileEntityFurnace.class); case "Chest": + return TileEntity.getKey(TileEntityChest.class); default: - return new ResourceLocation("minecraft:chest"); + throw new RuntimeException("Tile entity ID " + id + " not supported by conversion code"); } } diff --git a/src/main/java/org/dimdev/dimdoors/shared/tools/PocketSchematicGenerator.java b/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicGenerator.java similarity index 85% rename from src/main/java/org/dimdev/dimdoors/shared/tools/PocketSchematicGenerator.java rename to src/main/java/org/dimdev/dimdoors/shared/tools/SchematicGenerator.java index ad224e2f..c74e49b1 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/tools/PocketSchematicGenerator.java +++ b/src/main/java/org/dimdev/dimdoors/shared/tools/SchematicGenerator.java @@ -1,22 +1,12 @@ package org.dimdev.dimdoors.shared.tools; -import net.minecraft.block.Block; import net.minecraft.block.BlockDoor; import net.minecraft.block.state.IBlockState; -import net.minecraft.init.Bootstrap; import net.minecraft.item.EnumDyeColor; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.fml.common.DummyModContainer; -import net.minecraftforge.fml.common.Loader; -import net.minecraftforge.fml.common.ModContainer; -import net.minecraftforge.fml.common.ModMetadata; -import net.minecraftforge.registries.GameData; -import net.minecraftforge.registries.RegistryManager; import org.dimdev.ddutils.schem.Schematic; import org.dimdev.dimdoors.DimDoors; -import org.dimdev.dimdoors.server.ServerProxy; import org.dimdev.dimdoors.shared.blocks.BlockDimensionalDoor; import org.dimdev.dimdoors.shared.blocks.BlockFabric; import org.dimdev.dimdoors.shared.blocks.BlockFabricAncient; @@ -37,25 +27,11 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -/** - * @author Robijnvogel - */ -public final class PocketSchematicGenerator { +public final class SchematicGenerator { // Run "gradlew generatePocketSchematics" to generate the pocket schematics @SuppressWarnings("UseOfSystemOutOrSystemErr") - public static void main(String... args) throws IOException, NoSuchMethodException, NoSuchFieldException, IllegalAccessException { - // Register blocks and tile entities to be able to run this without starting Minecraft - Bootstrap.register(); - ModMetadata md = new ModMetadata(); - md.modId = DimDoors.MODID; - ModContainer mc = new DummyModContainer(md); - Loader.instance().setupTestHarness(mc); - Loader.instance().setActiveModContainer(mc); - ModBlocks.registerBlocks(new RegistryEvent.Register(GameData.BLOCKS, RegistryManager.ACTIVE.getRegistry(GameData.BLOCKS))); - new ServerProxy().registerTileEntities(); - new ServerProxy().registerRiftDestinations(); - Loader.instance().setActiveModContainer(null); + public static void main(String... args) throws IOException { // Parse arguments File schematicDir; @@ -72,6 +48,9 @@ public final class PocketSchematicGenerator { schematicDir = new File("schematics/"); } + // Register blocks and tile entities to be able to run this without starting Minecraft + Initializer.initialize(); + // Generate the schematics List schematics = generatePocketSchematics(); @@ -116,16 +95,19 @@ public final class PocketSchematicGenerator { PrivatePocketExitDestination.builder().build(),// exit rift destination null)); - schematics.add(generateBlank("blank_pocket", + schematics.add(generateBlank( + "blank_pocket", pocketSize, ModBlocks.ANCIENT_FABRIC.getDefaultState(), ModBlocks.FABRIC.getDefaultState())); - schematics.add(generateFrame("void_pocket", + schematics.add(generateFrame( + "void_pocket", pocketSize, ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.COLOR, EnumDyeColor.LIGHT_BLUE))); - schematics.add(generateResizableFrame("resizable_pocket", + schematics.add(generateResizableFrame( + "resizable_pocket", pocketSize, ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.COLOR, EnumDyeColor.ORANGE))); } @@ -137,7 +119,7 @@ public final class PocketSchematicGenerator { // Set schematic info Schematic schematic = new Schematic(baseName + "_" + pocketSize, "DimDoors", size, size, size); - schematic.requiredMods = new String[] { DimDoors.MODID }; + schematic.requiredMods = new String[]{DimDoors.MODID}; // Set block data for (int x = 0; x < size; x++) { @@ -189,7 +171,7 @@ public final class PocketSchematicGenerator { // Set schematic info Schematic schematic = new Schematic(baseName + "_" + chunkSize, "DimDoors", size, size, size); - schematic.requiredMods = new String[] { DimDoors.MODID }; + schematic.requiredMods = new String[]{DimDoors.MODID}; // Set block data for (int x = 0; x < size; x++) { @@ -215,7 +197,7 @@ public final class PocketSchematicGenerator { // Set schematic info Schematic schematic = new Schematic(baseName + "_" + chunkSize, "DimDoors", size, size, size); - schematic.requiredMods = new String[] { DimDoors.MODID }; + schematic.requiredMods = new String[]{DimDoors.MODID}; // Set block data for (int x = 0; x < size; x++) { diff --git a/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java b/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java index d9ce1d4b..d5a5c753 100644 --- a/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java +++ b/src/main/java/org/dimdev/dimdoors/shared/world/gateways/BaseSchematicGateway.java @@ -35,7 +35,7 @@ public abstract class BaseSchematicGateway extends BaseGateway { if (streamOpened) { try { schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream); - schematic = SchematicConverter.convertSchematic(schematicNBT, id, null, null); + schematic = SchematicConverter.convertSchematic(schematicNBT, id, null); schematicDataStream.close(); } catch (IOException ex) { DimDoors.log.error("Schematic file for " + id + " could not be read as a valid schematic NBT file.", ex); diff --git a/src/main/resources/assets/dimdoors/blockstates/warp_dimensional_door.json b/src/main/resources/assets/dimdoors/blockstates/iron_dimensional_door.json similarity index 54% rename from src/main/resources/assets/dimdoors/blockstates/warp_dimensional_door.json rename to src/main/resources/assets/dimdoors/blockstates/iron_dimensional_door.json index 1bf0d887..9186758e 100644 --- a/src/main/resources/assets/dimdoors/blockstates/warp_dimensional_door.json +++ b/src/main/resources/assets/dimdoors/blockstates/iron_dimensional_door.json @@ -1,36 +1,36 @@ { "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "dimdoors:warp_dimensional_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "dimdoors:warp_dimensional_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "dimdoors:warp_dimensional_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "dimdoors:warp_dimensional_door_top", "y": 180 } + "facing=east,half=lower,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_bottom" }, + "facing=south,half=lower,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_bottom", "y": 90 }, + "facing=west,half=lower,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_bottom", "y": 180 }, + "facing=north,half=lower,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_bottom", "y": 270 }, + "facing=east,half=lower,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_bottom_rh" }, + "facing=south,half=lower,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_bottom_rh", "y": 90 }, + "facing=west,half=lower,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_bottom_rh", "y": 180 }, + "facing=north,half=lower,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_bottom_rh", "y": 270 }, + "facing=east,half=lower,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_bottom_rh", "y": 90 }, + "facing=south,half=lower,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_bottom_rh", "y": 180 }, + "facing=west,half=lower,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_bottom_rh", "y": 270 }, + "facing=north,half=lower,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_bottom_rh" }, + "facing=east,half=lower,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_bottom", "y": 270 }, + "facing=south,half=lower,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_bottom" }, + "facing=west,half=lower,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_bottom", "y": 90 }, + "facing=north,half=lower,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_bottom", "y": 180 }, + "facing=east,half=upper,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_top" }, + "facing=south,half=upper,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_top", "y": 90 }, + "facing=west,half=upper,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_top", "y": 180 }, + "facing=north,half=upper,hinge=left,open=false": { "model": "dimdoors:iron_dimensional_door_top", "y": 270 }, + "facing=east,half=upper,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_top_rh" }, + "facing=south,half=upper,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_top_rh", "y": 90 }, + "facing=west,half=upper,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_top_rh", "y": 180 }, + "facing=north,half=upper,hinge=right,open=false": { "model": "dimdoors:iron_dimensional_door_top_rh", "y": 270 }, + "facing=east,half=upper,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_top_rh", "y": 90 }, + "facing=south,half=upper,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_top_rh", "y": 180 }, + "facing=west,half=upper,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_top_rh", "y": 270 }, + "facing=north,half=upper,hinge=left,open=true": { "model": "dimdoors:iron_dimensional_door_top_rh" }, + "facing=east,half=upper,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_top", "y": 270 }, + "facing=south,half=upper,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_top" }, + "facing=west,half=upper,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_top", "y": 90 }, + "facing=north,half=upper,hinge=right,open=true": { "model": "dimdoors:iron_dimensional_door_top", "y": 180 } } } diff --git a/src/main/resources/assets/dimdoors/blockstates/dimensional_door.json b/src/main/resources/assets/dimdoors/blockstates/oak_dimensional_door.json similarity index 54% rename from src/main/resources/assets/dimdoors/blockstates/dimensional_door.json rename to src/main/resources/assets/dimdoors/blockstates/oak_dimensional_door.json index 4b7bb7b0..a1d341df 100644 --- a/src/main/resources/assets/dimdoors/blockstates/dimensional_door.json +++ b/src/main/resources/assets/dimdoors/blockstates/oak_dimensional_door.json @@ -1,36 +1,36 @@ { "variants": { - "facing=east,half=lower,hinge=left,open=false": { "model": "dimdoors:dimensional_door_bottom" }, - "facing=south,half=lower,hinge=left,open=false": { "model": "dimdoors:dimensional_door_bottom", "y": 90 }, - "facing=west,half=lower,hinge=left,open=false": { "model": "dimdoors:dimensional_door_bottom", "y": 180 }, - "facing=north,half=lower,hinge=left,open=false": { "model": "dimdoors:dimensional_door_bottom", "y": 270 }, - "facing=east,half=lower,hinge=right,open=false": { "model": "dimdoors:dimensional_door_bottom_rh" }, - "facing=south,half=lower,hinge=right,open=false": { "model": "dimdoors:dimensional_door_bottom_rh", "y": 90 }, - "facing=west,half=lower,hinge=right,open=false": { "model": "dimdoors:dimensional_door_bottom_rh", "y": 180 }, - "facing=north,half=lower,hinge=right,open=false": { "model": "dimdoors:dimensional_door_bottom_rh", "y": 270 }, - "facing=east,half=lower,hinge=left,open=true": { "model": "dimdoors:dimensional_door_bottom_rh", "y": 90 }, - "facing=south,half=lower,hinge=left,open=true": { "model": "dimdoors:dimensional_door_bottom_rh", "y": 180 }, - "facing=west,half=lower,hinge=left,open=true": { "model": "dimdoors:dimensional_door_bottom_rh", "y": 270 }, - "facing=north,half=lower,hinge=left,open=true": { "model": "dimdoors:dimensional_door_bottom_rh" }, - "facing=east,half=lower,hinge=right,open=true": { "model": "dimdoors:dimensional_door_bottom", "y": 270 }, - "facing=south,half=lower,hinge=right,open=true": { "model": "dimdoors:dimensional_door_bottom" }, - "facing=west,half=lower,hinge=right,open=true": { "model": "dimdoors:dimensional_door_bottom", "y": 90 }, - "facing=north,half=lower,hinge=right,open=true": { "model": "dimdoors:dimensional_door_bottom", "y": 180 }, - "facing=east,half=upper,hinge=left,open=false": { "model": "dimdoors:dimensional_door_top" }, - "facing=south,half=upper,hinge=left,open=false": { "model": "dimdoors:dimensional_door_top", "y": 90 }, - "facing=west,half=upper,hinge=left,open=false": { "model": "dimdoors:dimensional_door_top", "y": 180 }, - "facing=north,half=upper,hinge=left,open=false": { "model": "dimdoors:dimensional_door_top", "y": 270 }, - "facing=east,half=upper,hinge=right,open=false": { "model": "dimdoors:dimensional_door_top_rh" }, - "facing=south,half=upper,hinge=right,open=false": { "model": "dimdoors:dimensional_door_top_rh", "y": 90 }, - "facing=west,half=upper,hinge=right,open=false": { "model": "dimdoors:dimensional_door_top_rh", "y": 180 }, - "facing=north,half=upper,hinge=right,open=false": { "model": "dimdoors:dimensional_door_top_rh", "y": 270 }, - "facing=east,half=upper,hinge=left,open=true": { "model": "dimdoors:dimensional_door_top_rh", "y": 90 }, - "facing=south,half=upper,hinge=left,open=true": { "model": "dimdoors:dimensional_door_top_rh", "y": 180 }, - "facing=west,half=upper,hinge=left,open=true": { "model": "dimdoors:dimensional_door_top_rh", "y": 270 }, - "facing=north,half=upper,hinge=left,open=true": { "model": "dimdoors:dimensional_door_top_rh" }, - "facing=east,half=upper,hinge=right,open=true": { "model": "dimdoors:dimensional_door_top", "y": 270 }, - "facing=south,half=upper,hinge=right,open=true": { "model": "dimdoors:dimensional_door_top" }, - "facing=west,half=upper,hinge=right,open=true": { "model": "dimdoors:dimensional_door_top", "y": 90 }, - "facing=north,half=upper,hinge=right,open=true": { "model": "dimdoors:dimensional_door_top", "y": 180 } + "facing=east,half=lower,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_bottom" }, + "facing=south,half=lower,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_bottom", "y": 90 }, + "facing=west,half=lower,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_bottom", "y": 180 }, + "facing=north,half=lower,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_bottom", "y": 270 }, + "facing=east,half=lower,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_bottom_rh" }, + "facing=south,half=lower,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_bottom_rh", "y": 90 }, + "facing=west,half=lower,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_bottom_rh", "y": 180 }, + "facing=north,half=lower,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_bottom_rh", "y": 270 }, + "facing=east,half=lower,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_bottom_rh", "y": 90 }, + "facing=south,half=lower,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_bottom_rh", "y": 180 }, + "facing=west,half=lower,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_bottom_rh", "y": 270 }, + "facing=north,half=lower,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_bottom_rh" }, + "facing=east,half=lower,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_bottom", "y": 270 }, + "facing=south,half=lower,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_bottom" }, + "facing=west,half=lower,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_bottom", "y": 90 }, + "facing=north,half=lower,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_bottom", "y": 180 }, + "facing=east,half=upper,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_top" }, + "facing=south,half=upper,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_top", "y": 90 }, + "facing=west,half=upper,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_top", "y": 180 }, + "facing=north,half=upper,hinge=left,open=false": { "model": "dimdoors:oak_dimensional_door_top", "y": 270 }, + "facing=east,half=upper,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_top_rh" }, + "facing=south,half=upper,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_top_rh", "y": 90 }, + "facing=west,half=upper,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_top_rh", "y": 180 }, + "facing=north,half=upper,hinge=right,open=false": { "model": "dimdoors:oak_dimensional_door_top_rh", "y": 270 }, + "facing=east,half=upper,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_top_rh", "y": 90 }, + "facing=south,half=upper,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_top_rh", "y": 180 }, + "facing=west,half=upper,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_top_rh", "y": 270 }, + "facing=north,half=upper,hinge=left,open=true": { "model": "dimdoors:oak_dimensional_door_top_rh" }, + "facing=east,half=upper,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_top", "y": 270 }, + "facing=south,half=upper,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_top" }, + "facing=west,half=upper,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_top", "y": 90 }, + "facing=north,half=upper,hinge=right,open=true": { "model": "dimdoors:oak_dimensional_door_top", "y": 180 } } } diff --git a/src/main/resources/assets/dimdoors/lang/de_DE.lang b/src/main/resources/assets/dimdoors/lang/de_DE.lang index fc184127..e96e43eb 100644 --- a/src/main/resources/assets/dimdoors/lang/de_DE.lang +++ b/src/main/resources/assets/dimdoors/lang/de_DE.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=Dimensional Doors: Items tile.gold_door.name=Goldtür tile.quartz_door.name=Quarztür -tile.dimensional_door.name=Dimensionaltür +tile.iron_dimensional_door.name=Dimensionaltür tile.gold_dimensional_door.name=Goldene Dimensionaltür tile.quartz_dimensional_door.name=Persönliche Dimensionaltür tile.chaos_dimensional_door.name=Instabile Tür -tile.warp_dimensional_door.name=Warp-Tür +tile.oak_dimensional_door.name=Warp-Tür tile.dimensional_trapdoor.name=Transdimensionale Falltür tile.dimensional_portal.name=Vergängliche Tür @@ -21,11 +21,11 @@ tile.rift.name=Spalt item.gold_door.name=Goldtür item.quartz_door.name=Quarztür -item.dimensional_door.name=Dimensionaltür +item.iron_dimensional_door.name=Dimensionaltür item.gold_dimensional_door.name=Goldene Dimensionaltür item.quartz_dimensional_door.name=Persönliche Dimensionaltür item.chaos_dimensional_door.name=Instabile Tür -item.warp_dimensional_door.name=Warp-Tür +item.oak_dimensional_door.name=Warp-Tür item.rift_key=Spaltschlüssel item.rift_signature.name=Spaltsignatur @@ -40,10 +40,10 @@ item.stable_fabric.name=Stabiler Stoff info.rift_key.bound=Gebunden info.rift_key.unbound=Nicht gebunden -info.dimensional_door0=Platziere auf dem Block unterhalb eines Spalts, -info.dimensional_door1=um diesen Spalt zu aktivieren, oder -info.dimensional_door2=irgendwo anders, um eine -info.dimensional_door3=kleine Dimension to erschaffen. +info.iron_dimensional_door0=Platziere auf dem Block unterhalb eines Spalts, +info.iron_dimensional_door1=um diesen Spalt zu aktivieren, oder +info.iron_dimensional_door2=irgendwo anders, um eine +info.iron_dimensional_door3=kleine Dimension to erschaffen. info.gold_dimensional_door0=Ähnlich einer Dimensionaltür, info.gold_dimensional_door1=aber hält die kleine Dimension geladen, @@ -71,9 +71,9 @@ info.stabilized_rift_signature.unbound2=die erste und die aktuelle Position verb info.chaos_dimensional_door=Vorsicht: Führt zu einem zufälligen Ziel -info.warp_dimensional_door0=Platziere auf dem Block unterhalb eines -info.warp_dimensional_door1=Spalts, um ein Portal zu erstellen, -info.warp_dimensional_door2=oder platziere irgendwo in einer -info.warp_dimensional_door3=kleinen Dimension, um sie zu verlassen. +info.oak_dimensional_door0=Platziere auf dem Block unterhalb eines +info.oak_dimensional_door1=Spalts, um ein Portal zu erstellen, +info.oak_dimensional_door2=oder platziere irgendwo in einer +info.oak_dimensional_door3=kleinen Dimension, um sie zu verlassen. entity.dimdoors.monolith.name=Monolith diff --git a/src/main/resources/assets/dimdoors/lang/en_US.lang b/src/main/resources/assets/dimdoors/lang/en_US.lang index d3e0fd61..8db70644 100644 --- a/src/main/resources/assets/dimdoors/lang/en_US.lang +++ b/src/main/resources/assets/dimdoors/lang/en_US.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=Dimensional Doors Items tile.gold_door.name=Golden Door tile.quartz_door.name=Quartz Door -tile.dimensional_door.name=Dimensional Door +tile.iron_dimensional_door.name=Dimensional Door tile.gold_dimensional_door.name=Golden Dimensional Door tile.quartz_dimensional_door.name=Personal Dimensional Door tile.chaos_dimensional_door.name=Chaos Door -tile.warp_dimensional_door.name=Warp Door +tile.oak_dimensional_door.name=Warp Door tile.dimensional_trapdoor.name=Transdimensional Trapdoor tile.dimensional_portal.name=Transient Portal @@ -52,11 +52,11 @@ tile.rift.name=Rift Scar item.gold_door.name=Golden Door item.quartz_door.name=Quartz Door -item.dimensional_door.name=Dimensional Door +item.iron_dimensional_door.name=Dimensional Door item.gold_dimensional_door.name=Golden Dimensional Door item.quartz_dimensional_door.name=Personal Dimensional Door item.chaos_dimensional_door.name=Chaos Door -item.warp_dimensional_door.name=Warp Door +item.oak_dimensional_door.name=Warp Door item.rift_key=Rift Key item.rift_signature.name=Rift Signature @@ -81,10 +81,10 @@ item.chestplate_woven_world_thread.name=Woven World Thread Chestplate info.rift_key.bound=Bound info.rift_key.unbound=Unbound -info.dimensional_door0=Place on the block under a rift -info.dimensional_door1=to activate that rift or place -info.dimensional_door2=anywhere else to create a -info.dimensional_door3=pocket dimension. +info.iron_dimensional_door0=Place on the block under a rift +info.iron_dimensional_door1=to activate that rift or place +info.iron_dimensional_door2=anywhere else to create a +info.iron_dimensional_door3=pocket dimension. info.gold_dimensional_door0=Similar to a Dimensional Door info.gold_dimensional_door1=but keeps a pocket dimension @@ -112,7 +112,7 @@ info.stabilized_rift_signature.unbound2=the first and last locations together. info.chaos_dimensional_door=Caution: Leads to random destination -info.warp_dimensional_door0=Place on the block under a rift to create a portal, or place anywhere in a pocket dimension to exit. +info.oak_dimensional_door0=Place on the block under a rift to create a portal, or place anywhere in a pocket dimension to exit. entity.dimdoors.monolith.name=Monolith diff --git a/src/main/resources/assets/dimdoors/lang/fr_CA.lang b/src/main/resources/assets/dimdoors/lang/fr_CA.lang index 3bb1f3cb..959d75e9 100644 --- a/src/main/resources/assets/dimdoors/lang/fr_CA.lang +++ b/src/main/resources/assets/dimdoors/lang/fr_CA.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=Objets Dimensional Doors tile.gold_door.name=Porte dorée tile.quartz_door.name=Porte de quartz -tile.dimensional_door.name=Porte dimensionnelle +tile.iron_dimensional_door.name=Porte dimensionnelle tile.gold_dimensional_door.name=Porte dorée dimensionnelle tile.quartz_dimensional_door.name=Porte dimensionnelle personnelle tile.chaos_dimensional_door.name=Porte instable -tile.warp_dimensional_door.name=Porte-raccourci +tile.oak_dimensional_door.name=Porte-raccourci tile.dimensional_trapdoor.name=Trappe transdimensionnelle tile.dimensional_portal.name=Portail dimensionel @@ -38,11 +38,11 @@ tile.rift.name=Fissure item.gold_door.name=Porte dorée item.quartz_door.name=Porte de quartz -item.dimensional_door.name=Porte dimensionnelle +item.iron_dimensional_door.name=Porte dimensionnelle item.gold_dimensional_door.name=Porte dorée dimensionnelle item.quartz_dimensional_door.name=Porte dimensionnelle personnelle item.chaos_dimensional_door.name=Porte instable -item.warp_dimensional_door.name=Porte-raccourci +item.oak_dimensional_door.name=Porte-raccourci item.rift_key=Clé de fissure item.rift_signature.name=Signature de fissure @@ -57,10 +57,10 @@ item.stable_fabric.name=Étoffe stable info.rift_key.bound=Liée info.rift_key.unbound=Non liée -info.dimensional_door0=Placez sur le bloc sous une fissure -info.dimensional_door1=pour activer cette fissure ou placez -info.dimensional_door2=n'importe où ailleurs pour créer une -info.dimensional_door3=dimension de poche. +info.iron_dimensional_door0=Placez sur le bloc sous une fissure +info.iron_dimensional_door1=pour activer cette fissure ou placez +info.iron_dimensional_door2=n'importe où ailleurs pour créer une +info.iron_dimensional_door3=dimension de poche. info.gold_dimensional_door0=Similaire à une porte dimensionnelle info.gold_dimensional_door1=mais garde une dimension de poche @@ -88,9 +88,9 @@ info.stabilized_rift_signature.unbound2=le premier et les derniers emplacements info.chaos_dimensional_door=Attention : mène vers une destination aléatoire -info.warp_dimensional_door0=Placez sur le bloc sous une -info.warp_dimensional_door1=fissure pour créer un portail, -info.warp_dimensional_door2=ou placez n'importe où dans une -info.warp_dimensional_door3=dimension de poche pour sortir. +info.oak_dimensional_door0=Placez sur le bloc sous une +info.oak_dimensional_door1=fissure pour créer un portail, +info.oak_dimensional_door2=ou placez n'importe où dans une +info.oak_dimensional_door3=dimension de poche pour sortir. entity.dimdoors.monolith.name=Monolithe diff --git a/src/main/resources/assets/dimdoors/lang/it_IT.lang b/src/main/resources/assets/dimdoors/lang/it_IT.lang index 73c1d0b9..719357a0 100644 --- a/src/main/resources/assets/dimdoors/lang/it_IT.lang +++ b/src/main/resources/assets/dimdoors/lang/it_IT.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=Dimensional Doors oggetti tile.gold_door.name=Porta d'oro tile.quartz_door.name=Porta di quarzo -tile.dimensional_door.name=Porta dimensionale +tile.iron_dimensional_door.name=Porta dimensionale tile.gold_dimensional_door.name=Porta d'oro dimensionale tile.quartz_dimensional_door.name=Porta dimensionale personale tile.chaos_dimensional_door.name=Porta instabile -tile.warp_dimensional_door.name=Porta distorta +tile.oak_dimensional_door.name=Porta distorta tile.dimensional_trapdoor.name=Botola transdimensionale tile.dimensional_portal.name=Porta transitoria @@ -21,11 +21,11 @@ tile.rift.name=Frattura item.gold_door.name=Porta d'oro item.quartz_door.name=Porta di quarzo -item.dimensional_door.name=Porta dimensionale +item.iron_dimensional_door.name=Porta dimensionale item.gold_dimensional_door.name=Porta d'oro dimensionale item.quartz_dimensional_door.name=Porta dimensionale personale item.chaos_dimensional_door.name=Porta instabile -item.warp_dimensional_door.name=Porta distorta +item.oak_dimensional_door.name=Porta distorta item.rift_key=Chiave per frattura item.rift_signature.name=Segno di frattura @@ -40,10 +40,10 @@ item.stable_fabric.name=Tessuto stabile info.rift_key.bound=Legato info.rift_key.unbound=Non legato -info.dimensional_door0=Piazzalo sul blocco sotto una -info.dimensional_door1=frattura per attivarla o piazzalo -info.dimensional_door2=da qualunque altra parte per creare -info.dimensional_door3=una dimensione tascabile. +info.iron_dimensional_door0=Piazzalo sul blocco sotto una +info.iron_dimensional_door1=frattura per attivarla o piazzalo +info.iron_dimensional_door2=da qualunque altra parte per creare +info.iron_dimensional_door3=una dimensione tascabile. info.gold_dimensional_door0=Simile a una Porta dimensionale info.gold_dimensional_door1=ma tiene la dimensione tascabile @@ -71,9 +71,9 @@ info.stabilized_rift_signature.unbound2=collegano la prima e ultima posizione. info.chaos_dimensional_door=Attenziione: Porta a una destinazione casuale -info.warp_dimensional_door0=Piazzalo sul blocco sotto una -info.warp_dimensional_door1=frattura per creare un portale, -info.warp_dimensional_door2=o piazzalo da qualunque altra parte -info.warp_dimensional_door3=in una dimensione tascabile per uscire. +info.oak_dimensional_door0=Piazzalo sul blocco sotto una +info.oak_dimensional_door1=frattura per creare un portale, +info.oak_dimensional_door2=o piazzalo da qualunque altra parte +info.oak_dimensional_door3=in una dimensione tascabile per uscire. entity.dimdoors.monolith.name=Monolito diff --git a/src/main/resources/assets/dimdoors/lang/nl_NL.lang b/src/main/resources/assets/dimdoors/lang/nl_NL.lang index f8d49b1a..0d7cf0dc 100644 --- a/src/main/resources/assets/dimdoors/lang/nl_NL.lang +++ b/src/main/resources/assets/dimdoors/lang/nl_NL.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=Dimensional Doors Voorwerpen tile.gold_door.name=Gouden Deur tile.quartz_door.name=Kwartsen Deur -tile.dimensional_door.name=Dimensiedeur +tile.iron_dimensional_door.name=Dimensiedeur tile.gold_dimensional_door.name=Gouden Dimensiedeur tile.quartz_dimensional_door.name=Persoonlijke Dimensiedeur tile.chaos_dimensional_door.name=Chaos Deur -tile.warp_dimensional_door.name=Verdraaideur +tile.oak_dimensional_door.name=Verdraaideur tile.dimensional_trapdoor.name=Transdimensionale Valdeur tile.dimensional_portal.name=Vergankelijk Portaal @@ -52,11 +52,11 @@ tile.rift.name=Scheur Wond item.gold_door.name=Gouden Deur item.quartz_door.name=Kwartsen Deur -item.dimensional_door.name=Dimensiedeur +item.iron_dimensional_door.name=Dimensiedeur item.gold_dimensional_door.name=Gouden Dimensiedeur item.quartz_dimensional_door.name=Persoonlijke Dimensiedeur item.chaos_dimensional_door.name=Chaos Deur -item.warp_dimensional_door.name=Verdraaideur +item.oak_dimensional_door.name=Verdraaideur item.rift_key=Scheur Sleutel item.rift_signature.name=Scheurtekening @@ -71,10 +71,10 @@ item.stable_fabric.name=Stabiel Weefsel info.rift_key.bound=Gebonden info.rift_key.unbound=Ontbonden -info.dimensional_door0=Plaats op het blok onder een scheur -info.dimensional_door1=om deze scheur te activeren of -info.dimensional_door2=op een andere plaats om een -info.dimensional_door3=publieke broekzak-dimensie te creëren. +info.iron_dimensional_door0=Plaats op het blok onder een scheur +info.iron_dimensional_door1=om deze scheur te activeren of +info.iron_dimensional_door2=op een andere plaats om een +info.iron_dimensional_door3=publieke broekzak-dimensie te creëren. info.gold_dimensional_door0=Net als een Dimensiedeur, maar houdt info.gold_dimensional_door1=een broekzak dimensie geladen als @@ -102,9 +102,9 @@ info.stabilized_rift_signature.unbound2=en laatste locaties met elkaar verbinden info.chaos_dimensional_door=Pas op: Leidt naar een willekeurige bestemming -info.warp_dimensional_door0=Plaats op het blok onder een scheur -info.warp_dimensional_door1=om een portaal te creëren, -info.warp_dimensional_door2=of plaats het ergens in een -info.warp_dimensional_door3=broekzak dimensie om deze te verlaten. +info.oak_dimensional_door0=Plaats op het blok onder een scheur +info.oak_dimensional_door1=om een portaal te creëren, +info.oak_dimensional_door2=of plaats het ergens in een +info.oak_dimensional_door3=broekzak dimensie om deze te verlaten. entity.dimdoors.monolith.name=Monoliet diff --git a/src/main/resources/assets/dimdoors/lang/ro_RO.lang b/src/main/resources/assets/dimdoors/lang/ro_RO.lang index 603df335..6831745e 100644 --- a/src/main/resources/assets/dimdoors/lang/ro_RO.lang +++ b/src/main/resources/assets/dimdoors/lang/ro_RO.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=Obiecte Dimensional Doors tile.gold_door.name=Ușă de aur tile.quartz_door.name=Ușă de cuarț -tile.dimensional_door.name=Ușă dimensională +tile.iron_dimensional_door.name=Ușă dimensională tile.gold_dimensional_door.name=Ușă dimensională de aur tile.quartz_dimensional_door.name=Ușă dimensională de cuarț tile.chaos_dimensional_door.name=Ușă instabilă -tile.warp_dimensional_door.name=Ușă de distorsiune +tile.oak_dimensional_door.name=Ușă de distorsiune tile.dimensional_trapdoor.name=Trapă transdimensională tile.dimensional_portal.name=Portal dimensional @@ -38,11 +38,11 @@ tile.rift.name=Fisură item.gold_door.name=Ușă de aur item.quartz_door.name=Ușă de cuarț -item.dimensional_door.name=Ușă dimensională +item.iron_dimensional_door.name=Ușă dimensională item.gold_dimensional_door.name=Ușă dimensională de aur item.quartz_dimensional_door.name=Ușă dimensională de cuarț item.chaos_dimensional_door.name=Ușă instabilă -item.warp_dimensional_door.name=Ușă de distorsiune +item.oak_dimensional_door.name=Ușă de distorsiune item.rift_key=Cheie de fisură item.rift_signature.name=Semnătură de fisură @@ -57,10 +57,10 @@ item.stable_fabric.name=Ață stabilă info.rift_key.bound=Legat info.rift_key.unbound=Dezlegat -info.dimensional_door0=Plasează pe blocul de sub o fisură -info.dimensional_door1=pentru a activa acea fisură sau -info.dimensional_door2=oriunde altundeva pentru a crea -info.dimensional_door3=o dimensiune de buzunar. +info.iron_dimensional_door0=Plasează pe blocul de sub o fisură +info.iron_dimensional_door1=pentru a activa acea fisură sau +info.iron_dimensional_door2=oriunde altundeva pentru a crea +info.iron_dimensional_door3=o dimensiune de buzunar. info.gold_dimensional_door0=Similară la o ușă dimensională info.gold_dimensional_door1=doar că păstrează o dimensiune @@ -89,9 +89,9 @@ info.stabilized_rift_signature.unbound2=prima și ultima conectiuni împreună. info.chaos_dimensional_door=Atenție: Duce la o destinație aleatorie -info.warp_dimensional_door0=Plasează pe blocul sub o fisură -info.warp_dimensional_door1=pentru a crea un portal sau -info.warp_dimensional_door2=plasează ori unde într-o dimensiune -info.warp_dimensional_door3=de buzunar pentru a ieșii. +info.oak_dimensional_door0=Plasează pe blocul sub o fisură +info.oak_dimensional_door1=pentru a crea un portal sau +info.oak_dimensional_door2=plasează ori unde într-o dimensiune +info.oak_dimensional_door3=de buzunar pentru a ieșii. entity.dimdoors.monolith.name=Monolit diff --git a/src/main/resources/assets/dimdoors/lang/ru_RU.lang b/src/main/resources/assets/dimdoors/lang/ru_RU.lang index fe70bf50..9e7249df 100644 --- a/src/main/resources/assets/dimdoors/lang/ru_RU.lang +++ b/src/main/resources/assets/dimdoors/lang/ru_RU.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=Dimensional Doors: Предметы tile.gold_door.name=Золотая дверь tile.quartz_door.name=Кварцевая дверь -tile.dimensional_door.name=Пространственная дверь +tile.iron_dimensional_door.name=Пространственная дверь tile.gold_dimensional_door.name=Золотая пространственная дверь tile.quartz_dimensional_door.name=Личная пространственная дверь tile.chaos_dimensional_door.name=Нестабильная дверь -tile.warp_dimensional_door.name=Дверь искажения +tile.oak_dimensional_door.name=Дверь искажения tile.dimensional_trapdoor.name=Межпространственный люк tile.dimensional_portal.name=Временная дверь @@ -21,11 +21,11 @@ tile.rift.name=Разлом item.gold_door.name=Золотая дверь item.quartz_door.name=Кварцевая дверь -item.dimensional_door.name=Пространственная дверь +item.iron_dimensional_door.name=Пространственная дверь item.gold_dimensional_door.name=Золотая пространственная дверь item.quartz_dimensional_door.name=Личная пространственная дверь item.chaos_dimensional_door.name=Нестабильная дверь -item.warp_dimensional_door.name=Дверь искажения +item.oak_dimensional_door.name=Дверь искажения item.rift_key=Ключ разлома item.rift_signature.name=Подписыватель разлома @@ -40,10 +40,10 @@ item.stable_fabric.name=Стабильная ткань info.rift_key.bound=Связан info.rift_key.unbound=Не связан -info.dimensional_door0=Поставьте на блок под разломом, -info.dimensional_door1=чтобы активировать этот разлом или -info.dimensional_door2=поставьте куда угодно, чтобы создать -info.dimensional_door3=карманное измерение. +info.iron_dimensional_door0=Поставьте на блок под разломом, +info.iron_dimensional_door1=чтобы активировать этот разлом или +info.iron_dimensional_door2=поставьте куда угодно, чтобы создать +info.iron_dimensional_door3=карманное измерение. info.gold_dimensional_door0=Схожа с пространственной дверью, info.gold_dimensional_door1=но она также держит карманное измерение @@ -71,9 +71,9 @@ info.stabilized_rift_signature.unbound2=первое и последнее ра info.chaos_dimensional_door=Внимание: Ведёт неизвестно куда -info.warp_dimensional_door0=Поставьте на блок под -info.warp_dimensional_door1=разломом, чтобы создать портал -info.warp_dimensional_door2=или поставьте куда угодно в -info.warp_dimensional_door3=карманном измерении, чтобы выйти из него. +info.oak_dimensional_door0=Поставьте на блок под +info.oak_dimensional_door1=разломом, чтобы создать портал +info.oak_dimensional_door2=или поставьте куда угодно в +info.oak_dimensional_door3=карманном измерении, чтобы выйти из него. entity.dimdoors.monolith.name=Монолит diff --git a/src/main/resources/assets/dimdoors/lang/zh_CN.lang b/src/main/resources/assets/dimdoors/lang/zh_CN.lang index 94a59479..3a53f1cc 100644 --- a/src/main/resources/assets/dimdoors/lang/zh_CN.lang +++ b/src/main/resources/assets/dimdoors/lang/zh_CN.lang @@ -3,11 +3,11 @@ itemGroup.dimensional_doors_creative_tab=次元门物品 tile.gold_door.name=金门 tile.quartz_door.name=石英门 -tile.dimensional_door.name=次元门 +tile.iron_dimensional_door.name=次元门 tile.gold_dimensional_door.name=金制次元门 tile.quartz_dimensional_door.name=私人次元门 tile.chaos_dimensional_door.name=不稳定的门 -tile.warp_dimensional_door.name=扭曲之门 +tile.oak_dimensional_door.name=扭曲之门 tile.dimensional_trapdoor.name=空间活板门 tile.dimensional_portal.name=瞬息之门 @@ -21,11 +21,11 @@ tile.rift.name=裂痕 item.gold_door.name=金门 item.quartz_door.name=石英门 -item.dimensional_door.name=次元门 +item.iron_dimensional_door.name=次元门 item.gold_dimensional_door.name=金制次元门 item.quartz_dimensional_door.name=私人次元门 item.chaos_dimensional_door.name=不稳定的门 -item.warp_dimensional_door.name=扭曲之门 +item.oak_dimensional_door.name=扭曲之门 item.rift_key=裂痕钥匙 item.rift_signature.name=裂痕印记 @@ -40,10 +40,10 @@ item.stable_fabric.name=稳定构造 info.rift_key.bound=绑定 info.rift_key.unbound=取消绑定 -info.dimensional_door0=放在裂痕下方的方块上 -info.dimensional_door1=来激活裂痕 -info.dimensional_door2=或放在任意地点生成 -info.dimensional_door3=一个口袋次元. +info.iron_dimensional_door0=放在裂痕下方的方块上 +info.iron_dimensional_door1=来激活裂痕 +info.iron_dimensional_door2=或放在任意地点生成 +info.iron_dimensional_door3=一个口袋次元. info.gold_dimensional_door0=类似于次元门 info.gold_dimensional_door1=但它放在次元内部时 @@ -71,9 +71,9 @@ info.stabilized_rift_signature.unbound2=裂痕. info.chaos_dimensional_door=注意: 将会随机传送 -info.warp_dimensional_door0=放在裂痕下方的方块上 -info.warp_dimensional_door1=来制造传送门, -info.warp_dimensional_door2=放在口袋次元中 -info.warp_dimensional_door3=以退出空间. +info.oak_dimensional_door0=放在裂痕下方的方块上 +info.oak_dimensional_door1=来制造传送门, +info.oak_dimensional_door2=放在口袋次元中 +info.oak_dimensional_door3=以退出空间. entity.dimdoors.monolith.name=巨石 diff --git a/src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom.json b/src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom.json deleted file mode 100644 index 8c5dd1b2..00000000 --- a/src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "dimdoors:blocks/dimensional_door_lower", - "top": "dimdoors:blocks/dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom_rh.json b/src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom_rh.json deleted file mode 100644 index ec656de7..00000000 --- a/src/main/resources/assets/dimdoors/models/block/dimensional_door_bottom_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "dimdoors:blocks/dimensional_door_lower", - "top": "dimdoors:blocks/dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/block/dimensional_door_top.json b/src/main/resources/assets/dimdoors/models/block/dimensional_door_top.json deleted file mode 100644 index 573f71b7..00000000 --- a/src/main/resources/assets/dimdoors/models/block/dimensional_door_top.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "dimdoors:blocks/dimensional_door_lower", - "top": "dimdoors:blocks/dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/block/dimensional_door_top_rh.json b/src/main/resources/assets/dimdoors/models/block/dimensional_door_top_rh.json deleted file mode 100644 index f7316528..00000000 --- a/src/main/resources/assets/dimdoors/models/block/dimensional_door_top_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "dimdoors:blocks/dimensional_door_lower", - "top": "dimdoors:blocks/dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom.json b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom.json new file mode 100644 index 00000000..50596019 --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "dimdoors:blocks/iron_dimensional_door_lower", + "top": "dimdoors:blocks/iron_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom_rh.json b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom_rh.json new file mode 100644 index 00000000..55ebf5c8 --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_bottom_rh.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "dimdoors:blocks/iron_dimensional_door_lower", + "top": "dimdoors:blocks/iron_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top.json b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top.json new file mode 100644 index 00000000..ee16bf8e --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top", + "textures": { + "bottom": "dimdoors:blocks/iron_dimensional_door_lower", + "top": "dimdoors:blocks/iron_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top_rh.json b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top_rh.json new file mode 100644 index 00000000..11505eb1 --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/iron_dimensional_door_top_rh.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "dimdoors:blocks/iron_dimensional_door_lower", + "top": "dimdoors:blocks/iron_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom.json b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom.json new file mode 100644 index 00000000..6c748e7e --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom", + "textures": { + "bottom": "dimdoors:blocks/oak_dimensional_door_lower", + "top": "dimdoors:blocks/oak_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom_rh.json b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom_rh.json new file mode 100644 index 00000000..cd520746 --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_bottom_rh.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_bottom_rh", + "textures": { + "bottom": "dimdoors:blocks/oak_dimensional_door_lower", + "top": "dimdoors:blocks/oak_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top.json b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top.json new file mode 100644 index 00000000..050883a1 --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top", + "textures": { + "bottom": "dimdoors:blocks/oak_dimensional_door_lower", + "top": "dimdoors:blocks/oak_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top_rh.json b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top_rh.json new file mode 100644 index 00000000..2fcb5b3d --- /dev/null +++ b/src/main/resources/assets/dimdoors/models/block/oak_dimensional_door_top_rh.json @@ -0,0 +1,7 @@ +{ + "parent": "block/door_top_rh", + "textures": { + "bottom": "dimdoors:blocks/oak_dimensional_door_lower", + "top": "dimdoors:blocks/oak_dimensional_door_upper" + } +} diff --git a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom.json b/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom.json deleted file mode 100644 index 73198021..00000000 --- a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_bottom", - "textures": { - "bottom": "dimdoors:blocks/warp_dimensional_door_lower", - "top": "dimdoors:blocks/warp_dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom_rh.json b/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom_rh.json deleted file mode 100644 index 2116597c..00000000 --- a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_bottom_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_bottom_rh", - "textures": { - "bottom": "dimdoors:blocks/warp_dimensional_door_lower", - "top": "dimdoors:blocks/warp_dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top.json b/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top.json deleted file mode 100644 index d31bc984..00000000 --- a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_top", - "textures": { - "bottom": "dimdoors:blocks/warp_dimensional_door_lower", - "top": "dimdoors:blocks/warp_dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top_rh.json b/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top_rh.json deleted file mode 100644 index 0fbad6b1..00000000 --- a/src/main/resources/assets/dimdoors/models/block/warp_dimensional_door_top_rh.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/door_top_rh", - "textures": { - "bottom": "dimdoors:blocks/warp_dimensional_door_lower", - "top": "dimdoors:blocks/warp_dimensional_door_upper" - } -} diff --git a/src/main/resources/assets/dimdoors/models/item/warp_dimensional_door.json b/src/main/resources/assets/dimdoors/models/item/iron_dimensional_door.json similarity index 50% rename from src/main/resources/assets/dimdoors/models/item/warp_dimensional_door.json rename to src/main/resources/assets/dimdoors/models/item/iron_dimensional_door.json index 404b80e0..ed6ee1d6 100644 --- a/src/main/resources/assets/dimdoors/models/item/warp_dimensional_door.json +++ b/src/main/resources/assets/dimdoors/models/item/iron_dimensional_door.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "dimdoors:items/warp_dimensional_door" + "layer0": "dimdoors:items/iron_dimensional_door" } } diff --git a/src/main/resources/assets/dimdoors/models/item/dimensional_door.json b/src/main/resources/assets/dimdoors/models/item/oak_dimensional_door.json similarity index 50% rename from src/main/resources/assets/dimdoors/models/item/dimensional_door.json rename to src/main/resources/assets/dimdoors/models/item/oak_dimensional_door.json index 5d442666..54a49108 100644 --- a/src/main/resources/assets/dimdoors/models/item/dimensional_door.json +++ b/src/main/resources/assets/dimdoors/models/item/oak_dimensional_door.json @@ -1,6 +1,6 @@ { "parent": "item/generated", "textures": { - "layer0": "dimdoors:items/dimensional_door" + "layer0": "dimdoors:items/oak_dimensional_door" } } diff --git a/src/main/resources/assets/dimdoors/textures/blocks/dimensional_door_lower.png b/src/main/resources/assets/dimdoors/textures/blocks/iron_dimensional_door_lower.png similarity index 100% rename from src/main/resources/assets/dimdoors/textures/blocks/dimensional_door_lower.png rename to src/main/resources/assets/dimdoors/textures/blocks/iron_dimensional_door_lower.png diff --git a/src/main/resources/assets/dimdoors/textures/blocks/dimensional_door_upper.png b/src/main/resources/assets/dimdoors/textures/blocks/iron_dimensional_door_upper.png similarity index 100% rename from src/main/resources/assets/dimdoors/textures/blocks/dimensional_door_upper.png rename to src/main/resources/assets/dimdoors/textures/blocks/iron_dimensional_door_upper.png diff --git a/src/main/resources/assets/dimdoors/textures/blocks/warp_dimensional_door_lower.png b/src/main/resources/assets/dimdoors/textures/blocks/oak_dimensional_door_lower.png similarity index 100% rename from src/main/resources/assets/dimdoors/textures/blocks/warp_dimensional_door_lower.png rename to src/main/resources/assets/dimdoors/textures/blocks/oak_dimensional_door_lower.png diff --git a/src/main/resources/assets/dimdoors/textures/blocks/warp_dimensional_door_upper.png b/src/main/resources/assets/dimdoors/textures/blocks/oak_dimensional_door_upper.png similarity index 100% rename from src/main/resources/assets/dimdoors/textures/blocks/warp_dimensional_door_upper.png rename to src/main/resources/assets/dimdoors/textures/blocks/oak_dimensional_door_upper.png diff --git a/src/main/resources/assets/dimdoors/textures/items/dimensional_door.png b/src/main/resources/assets/dimdoors/textures/items/iron_dimensional_door.png similarity index 100% rename from src/main/resources/assets/dimdoors/textures/items/dimensional_door.png rename to src/main/resources/assets/dimdoors/textures/items/iron_dimensional_door.png diff --git a/src/main/resources/assets/dimdoors/textures/items/warp_dimensional_door.png b/src/main/resources/assets/dimdoors/textures/items/oak_dimensional_door.png similarity index 100% rename from src/main/resources/assets/dimdoors/textures/items/warp_dimensional_door.png rename to src/main/resources/assets/dimdoors/textures/items/oak_dimensional_door.png