Merge remote-tracking branch 'origin/1.17' into 1.17

This commit is contained in:
CreepyCre 2021-02-17 14:51:48 +01:00
commit fe827cebe3
125 changed files with 2405 additions and 164 deletions

View file

@ -115,10 +115,12 @@ dependencies {
}
modCompileOnly 'com.github.badasintended:wthit:3.0.0'
modRuntime 'com.github.badasintended:wthit:3.0.0'
modCompileOnly "me.shedaniel.cloth.api:cloth-datagen-api-v1:2.0.0"
modRuntime "me.shedaniel.cloth.api:cloth-datagen-api-v1:2.0.0"
datagenImplementation sourceSets.main.output
datagenImplementation sourceSets.main.compileClasspath
datagenImplementation "me.shedaniel.cloth.api:cloth-datagen-api-v1:2.0.0"
datagenRuntimeOnly sourceSets.main.runtimeClasspath
testImplementation('org.junit.jupiter:junit-jupiter:5.5.2')
}
@ -155,7 +157,7 @@ curseforge {
releaseType = 'alpha'
addGameVersion '1.17'
mainArtifact(file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar")) {
displayName = "[${project.minecraft_version}] Dimensional Doors ${version}"
displayName = "[21w06a] Dimensional Doors ${version}"
}
afterEvaluate {
uploadTask.dependsOn("remapJar")

View file

@ -1,9 +1,3 @@
minecraft_version=1.16.4
yarn_mappings=1.16.4+build.7
loader_version=0.10.8
fabric_version=0.29.3+1.16
mod_version=4.0.0+alpha.1
mod_version=4.0.0+alpha.2
org.gradle.jvmargs=-Xmx2048m

View file

@ -0,0 +1,61 @@
package org.dimdev.dimdoors.datagen;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import com.google.common.collect.ImmutableList;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import net.minecraft.advancement.Advancement;
import net.minecraft.data.DataCache;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.DataProvider;
import net.minecraft.util.Identifier;
public class AdvancementProvider implements DataProvider {
private static final Logger LOGGER = LogManager.getLogger();
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create();
private final DataGenerator root;
private final List<Consumer<Consumer<Advancement>>> tabGenerators = ImmutableList.of(new AdvancementTab());
public AdvancementProvider(DataGenerator dataGenerator) {
this.root = dataGenerator;
}
private static Path getOutput(Path root, Advancement advancement) {
return root.resolve("data/" + advancement.getId().getNamespace() + "/advancements/" + advancement.getId().getPath() + ".json");
}
@Override
public void run(DataCache dataCache) {
Path outputRoot = this.root.getOutput();
Set<Identifier> ids = new HashSet<>();
Consumer<Advancement> writer = advancement -> {
if (!ids.add(advancement.getId())) {
throw new IllegalStateException("Duplicate advancement " + advancement.getId());
}
Path output = getOutput(outputRoot, advancement);
try {
DataProvider.writeToPath(GSON, dataCache, advancement.createTask().toJson(), output);
} catch (IOException ex) {
LOGGER.error("Couldn't save advancement {}", output, ex);
}
};
for (Consumer<Consumer<Advancement>> generator : this.tabGenerators) {
generator.accept(writer);
}
}
@Override
public String getName() {
return "Dimdoors Advancements";
}
}

View file

@ -0,0 +1,77 @@
package org.dimdev.dimdoors.datagen;
import java.util.function.Consumer;
import org.dimdev.dimdoors.item.ModItems;
import org.dimdev.dimdoors.world.ModDimensions;
import net.minecraft.advancement.Advancement;
import net.minecraft.advancement.AdvancementDisplay;
import net.minecraft.advancement.AdvancementFrame;
import net.minecraft.advancement.criterion.ChangedDimensionCriterion;
import net.minecraft.advancement.criterion.InventoryChangedCriterion;
import net.minecraft.item.ItemConvertible;
import net.minecraft.item.Items;
import net.minecraft.predicate.entity.EntityPredicate;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier;
public class AdvancementTab implements Consumer<Consumer<Advancement>> {
static AdvancementDisplay makeDisplay(ItemConvertible item, String titleKey) {
return new AdvancementDisplay(item.asItem().getDefaultStack(),
new TranslatableText("dimdoors.advancement." + titleKey),
new TranslatableText("dimdoors.advancement." + titleKey + ".desc"),
new Identifier("dimdoors:textures/block/unravelled_fabric.png"),
AdvancementFrame.TASK,
true,
true,
false
);
}
static AdvancementDisplay makeDisplay(ItemConvertible item, String titleKey, AdvancementFrame advancementFrame) {
return new AdvancementDisplay(item.asItem().getDefaultStack(),
new TranslatableText("dimdoors.advancement." + titleKey),
new TranslatableText("dimdoors.advancement." + titleKey + ".desc"),
new Identifier("dimdoors:textures/block/unravelled_fabric.png"),
advancementFrame,
true,
true,
false
);
}
@Override
public void accept(Consumer<Advancement> advancementConsumer) {
Advancement root = Advancement.Task.create()
.display(makeDisplay(ModItems.RIFT_BLADE, "root"))
.criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(Items.ENDER_PEARL))
.build(advancementConsumer, "dimdoors:dimdoors/root");
Advancement.Task.create()
.display(makeDisplay(ModItems.IRON_DIMENSIONAL_DOOR, "public_pocket"))
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.PUBLIC))
.parent(root)
.build(advancementConsumer, "dimdoors:dimdoors/public_pocket");
Advancement.Task.create()
.display(makeDisplay(ModItems.QUARTZ_DIMENSIONAL_DOOR, "private_pocket"))
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.PERSONAL))
.parent(root)
.build(advancementConsumer, "dimdoors:dimdoors/private_pocket");
Advancement.Task.create()
.display(makeDisplay(ModItems.GOLD_DIMENSIONAL_DOOR, "dungeon"))
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.DUNGEON))
.parent(root)
.build(advancementConsumer, "dimdoors:dimdoors/dungeon");
Advancement limbo = Advancement.Task.create()
.display(makeDisplay(ModItems.UNRAVELLED_FABRIC, "limbo"))
.criterion("changed_dimension", ChangedDimensionCriterion.Conditions.to(ModDimensions.LIMBO))
.parent(root)
.build(advancementConsumer, "dimdoors:dimdoors/limbo");
Advancement.Task.create()
.display(makeDisplay(ModItems.ETERNAL_FLUID_BUCKET, "escape_limbo"))
.criterion("changed_dimension", new ChangedDimensionCriterion.Conditions(EntityPredicate.Extended.EMPTY, ModDimensions.LIMBO, null))
.parent(limbo)
.build(advancementConsumer, "dimdoors:dimdoors/escape_limbo");
}
}

View file

@ -1,24 +1,40 @@
package org.dimdev.dimdoors.datagen;
import java.nio.file.Paths;
import java.util.Map;
import java.util.Collections;
import me.shedaniel.cloth.api.datagen.v1.DataGeneratorHandler;
import me.shedaniel.cloth.api.datagen.v1.RecipeData;
import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.item.ModItems;
import net.minecraft.block.Block;
import net.minecraft.util.DyeColor;
import net.minecraft.Bootstrap;
import net.minecraft.data.DataGenerator;
public class DatagenInitializer {
public static void main(String[] args) {
import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint;
public class DatagenInitializer implements PreLaunchEntrypoint {
public static RecipeConsumer RECIPE_CONSUMER;
public static LootTableConsumer LOOT_TABLE_CONSUMER;
// How to run the data generator:-
// - Duplicate the Minecraft Client run config
// - Change the module from DimensionalDoors.main to DimensionalDoors.datagen
// - Profit
@Override
public void onPreLaunch() {
try {
Bootstrap.initialize();
ModBlocks.init();
ModItems.init();
DataGeneratorHandler handler = DataGeneratorHandler.create(Paths.get("./generated"));
RecipeData recipes = handler.getRecipes();
for (Map.Entry<DyeColor, Block> entry : ModBlocks.FABRIC_BLOCKS.entrySet()) {
// TODO
}
DataGenerator dataGenerator = new DataGenerator(Paths.get("./generated"), Collections.emptyList());
dataGenerator.install(new FabricRecipeProvider(dataGenerator));
dataGenerator.install(new AdvancementProvider(dataGenerator));
dataGenerator.install(new LootTableProvider(dataGenerator));
dataGenerator.install(RECIPE_CONSUMER = new RecipeConsumer(dataGenerator));
dataGenerator.install(LOOT_TABLE_CONSUMER = new LootTableConsumer(dataGenerator));
dataGenerator.run();
} catch (Exception e) {
throw new RuntimeException(e);
}
System.exit(0);
}
}

View file

@ -0,0 +1,48 @@
package org.dimdev.dimdoors.datagen;
import java.util.Map;
import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.item.ModItems;
import net.minecraft.advancement.criterion.InventoryChangedCriterion;
import net.minecraft.block.Block;
import net.minecraft.data.DataCache;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.DataProvider;
import net.minecraft.data.server.recipe.ShapedRecipeJsonFactory;
import net.minecraft.item.DyeItem;
import net.minecraft.util.DyeColor;
import net.minecraft.util.Identifier;
import static org.dimdev.dimdoors.datagen.DatagenInitializer.RECIPE_CONSUMER;
public class FabricRecipeProvider implements DataProvider {
private final DataGenerator dataGenerator;
public FabricRecipeProvider(DataGenerator dataGenerator) {
this.dataGenerator = dataGenerator;
}
@Override
public void run(DataCache cache) {
for (Map.Entry<DyeColor, Block> entry : ModBlocks.FABRIC_BLOCKS.entrySet()) {
DyeColor dyeColor = entry.getKey();
Block block = entry.getValue();
ShapedRecipeJsonFactory.create(block)
.group("colored_fabric")
.criterion("inventory_changed", InventoryChangedCriterion.Conditions.items(ModItems.WORLD_THREAD))
.pattern(" X ")
.pattern("XDX")
.pattern(" X ")
.input('X', ModItems.WORLD_THREAD)
.input('D', DyeItem.byColor(dyeColor))
.offerTo(RECIPE_CONSUMER, new Identifier("dimdoors", dyeColor.getName() + "_fabric"));
}
}
@Override
public String getName() {
return "Colored Fabric Recipes";
}
}

View file

@ -0,0 +1,95 @@
/*
* This is free and unencumbered software released into the public domain.
*
* Anyone is free to copy, modify, publish, use, compile, sell, or
* distribute this software, either in source code form or as a compiled
* binary, for any purpose, commercial or non-commercial, and by any
* means.
*
* In jurisdictions that recognize copyright laws, the author or authors
* of this software dedicate any and all copyright interest in the
* software to the public domain. We make this dedication for the benefit
* of the public at large and to the detriment of our heirs and
* successors. We intend this dedication to be an overt act of
* relinquishment in perpetuity of all present and future rights to this
* software under copyright law.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* For more information, please refer to <http://unlicense.org>
*/
package org.dimdev.dimdoors.datagen;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Map;
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Maps;
import com.google.common.collect.Table;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import me.shedaniel.cloth.api.datagen.v1.LootTableData;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import net.minecraft.data.DataCache;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.DataProvider;
import net.minecraft.loot.LootManager;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.context.LootContextType;
import net.minecraft.util.Identifier;
public class LootTableConsumer implements DataProvider, LootTableData {
private static final Logger LOGGER = LogManager.getLogger();
private final DataGenerator dataGenerator;
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().disableHtmlEscaping().create();
private final Table<LootContextType, Identifier, LootTable.Builder> lootTables = HashBasedTable.create();
public LootTableConsumer(DataGenerator dataGenerator) {
this.dataGenerator = dataGenerator;
}
@Override
public void register(LootContextType type, Identifier identifier, LootTable.Builder lootTable) {
this.lootTables.put(type, identifier, lootTable);
}
@Override
public void run(DataCache cache) {
Path path = this.dataGenerator.getOutput();
Map<Identifier, LootTable> map = Maps.newHashMap();
this.lootTables.rowMap().forEach((type, tableMap) -> tableMap.forEach((identifier, builder) -> {
if (map.put(identifier, builder.type(type).build()) != null) {
throw new IllegalStateException("Duplicate loot table " + identifier);
}
}));
map.forEach((identifier, lootTable) -> {
Path outputPath = getOutput(path, identifier);
try {
DataProvider.writeToPath(GSON, cache, LootManager.toJson(lootTable), outputPath);
} catch (IOException var6) {
LOGGER.error("Couldn't save loot table {}", outputPath, var6);
}
});
}
private static Path getOutput(Path rootOutput, Identifier lootTableId) {
return rootOutput.resolve("data/" + lootTableId.getNamespace() + "/loot_tables/" + lootTableId.getPath() + ".json");
}
@Override
public String getName() {
return "Loot Table Provider";
}
}

View file

@ -0,0 +1,40 @@
package org.dimdev.dimdoors.datagen;
import java.io.IOException;
import org.dimdev.dimdoors.block.ModBlocks;
import net.minecraft.block.Block;
import net.minecraft.data.DataCache;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.DataProvider;
import static org.dimdev.dimdoors.datagen.DatagenInitializer.LOOT_TABLE_CONSUMER;
public class LootTableProvider implements DataProvider {
private final DataGenerator dataGenerator;
public LootTableProvider(DataGenerator dataGenerator) {
this.dataGenerator = dataGenerator;
}
@Override
public void run(DataCache cache) throws IOException {
for (Block block : ModBlocks.FABRIC_BLOCKS.values()) {
LOOT_TABLE_CONSUMER.registerBlockDropSelfRequiresSilkTouch(block);
}
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.GOLD_DOOR);
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.QUARTZ_DOOR);
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.OAK_DIMENSIONAL_DOOR);
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.IRON_DIMENSIONAL_DOOR);
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.GOLD_DIMENSIONAL_DOOR);
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.QUARTZ_DIMENSIONAL_DOOR);
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.OAK_DIMENSIONAL_TRAPDOOR);
LOOT_TABLE_CONSUMER.registerBlockDropSelf(ModBlocks.MARKING_PLATE);
}
@Override
public String getName() {
return "Dimdoors Loot Tables";
}
}

View file

@ -0,0 +1,54 @@
package org.dimdev.dimdoors.datagen;
import java.io.IOException;
import java.nio.file.Path;
import java.util.HashSet;
import java.util.Set;
import java.util.function.Consumer;
import com.google.common.collect.Sets;
import com.google.gson.JsonObject;
import org.dimdev.dimdoors.mixin.RecipesProviderAccessor;
import net.minecraft.data.DataCache;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.DataProvider;
import net.minecraft.data.server.recipe.RecipeJsonProvider;
import net.minecraft.util.Identifier;
public class RecipeConsumer implements DataProvider, Consumer<RecipeJsonProvider> {
private final DataGenerator dataGenerator;
public RecipeConsumer(DataGenerator dataGenerator) {
this.dataGenerator = dataGenerator;
}
private final Set<RecipeJsonProvider> recipes = new HashSet<>();
@Override
public void run(DataCache cache) throws IOException {
Path path = this.dataGenerator.getOutput();
Set<Identifier> set = Sets.newHashSet();
this.recipes.forEach((recipeJsonProvider) -> {
if (!set.add(recipeJsonProvider.getRecipeId())) {
throw new IllegalStateException("Duplicate recipe " + recipeJsonProvider.getRecipeId());
} else {
RecipesProviderAccessor.callSaveRecipe(cache, recipeJsonProvider.toJson(), path.resolve("data/" + recipeJsonProvider.getRecipeId().getNamespace() + "/recipes/" + recipeJsonProvider.getRecipeId().getPath() + ".json"));
JsonObject jsonObject = recipeJsonProvider.toAdvancementJson();
if (jsonObject != null) {
RecipesProviderAccessor.callSaveRecipeAdvancement(cache, jsonObject, path.resolve("data/" + recipeJsonProvider.getRecipeId().getNamespace() + "/advancements/" + recipeJsonProvider.getAdvancementId().getPath() + ".json"));
}
}
});
}
@Override
public String getName() {
return "Recipe Provider";
}
@Override
public void accept(RecipeJsonProvider recipeJsonProvider) {
this.recipes.add(recipeJsonProvider);
}
}

View file

@ -0,0 +1,10 @@
{
"schemaVersion": 1,
"id": "dimdoors-datagen",
"version": "1.0.0",
"entrypoints": {
"preLaunch": [
"org.dimdev.dimdoors.datagen.DatagenInitializer"
]
}
}

View file

@ -92,9 +92,9 @@ public final class ModConfig implements ConfigData {
@RequiresRestart
public int gatewayGenChance = 200;
@RequiresRestart
public List<Integer> clusterDimBlacklist = new LinkedList<>();
public List<String> clusterDimBlacklist = new LinkedList<>();
@RequiresRestart
public List<Integer> gatewayDimBlacklist = new LinkedList<>();
public List<String> gatewayDimBlacklist = new LinkedList<>();
}
public static class Dungeons {

View file

@ -1,6 +1,8 @@
package org.dimdev.dimdoors.block;
import net.minecraft.util.math.Vec3d;
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.block.entity.DetachedRiftBlockEntity;
import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity;
import org.dimdev.dimdoors.util.math.MathUtil;
@ -37,8 +39,6 @@ public class DimensionalDoorBlock extends DoorBlock implements RiftProvider<Entr
return;
}
// TODO: replace with dimdoor cooldown?
if (entity.hasNetherPortalCooldown()) {
entity.resetNetherPortalCooldown();
@ -46,10 +46,16 @@ public class DimensionalDoorBlock extends DoorBlock implements RiftProvider<Entr
}
entity.resetNetherPortalCooldown();
BlockState doorState = world.getBlockState(state.get(HALF) == DoubleBlockHalf.UPPER ? pos.down() : pos);
BlockPos top = state.get(HALF) == DoubleBlockHalf.UPPER ? pos : pos.up();
BlockPos bottom = top.down();
BlockState doorState = world.getBlockState(bottom);
if (doorState.getBlock() == this && doorState.get(DoorBlock.OPEN)) { // '== this' to check if not half-broken
this.getRift(world, pos, state).teleport(entity);
if (DimensionalDoorsInitializer.getConfig().getGeneralConfig().closeDoorBehind) {
world.setBlockState(top, world.getBlockState(top).with(DoorBlock.OPEN, false));
world.setBlockState(bottom, world.getBlockState(bottom).with(DoorBlock.OPEN, false));
}
}
}

View file

@ -23,9 +23,10 @@ import net.minecraft.world.World;
public class DimensionalPortalBlock extends Block implements RiftProvider<EntranceRiftBlockEntity> {
public static DirectionProperty FACING = HorizontalFacingBlock.FACING;
public DimensionalPortalBlock(Settings settings) {
super(settings);
setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH));
this.setDefaultState(this.stateManager.getDefaultState().with(FACING, Direction.NORTH));
}
@Override
@ -52,18 +53,18 @@ public class DimensionalPortalBlock extends Block implements RiftProvider<Entran
this.getRift(world, pos, state).teleport(entity);
EntranceRiftBlockEntity rift = getRift(world, pos, state);
EntranceRiftBlockEntity rift = this.getRift(world, pos, state);
world.setBlockState(pos, ModBlocks.DETACHED_RIFT.getDefaultState());
((DetachedRiftBlockEntity) world.getBlockEntity(pos)).setData(rift.getData());
}
public BlockState rotate(BlockState state, BlockRotation rotation) {
return (BlockState)state.with(FACING, rotation.rotate((Direction)state.get(FACING)));
return state.with(FACING, rotation.rotate(state.get(FACING)));
}
public BlockState mirror(BlockState state, BlockMirror mirror) {
return state.rotate(mirror.getRotation((Direction)state.get(FACING)));
return state.rotate(mirror.getRotation(state.get(FACING)));
}
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {

View file

@ -1,8 +1,5 @@
package org.dimdev.dimdoors.block;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.block.BlockEntityProvider;
import net.minecraft.block.BlockState;
@ -19,11 +16,10 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import org.dimdev.dimdoors.util.InstanceMap;
public class FabricBlock extends Block {
FabricBlock(DyeColor color) {
super(FabricBlockSettings.of(Material.STONE, color).lightLevel(15));
super(FabricBlockSettings.of(Material.STONE, color).strength(1.2F).luminance(15));
}
@Override

View file

@ -16,22 +16,23 @@ import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
public final class ModBlocks {
private static final Map<String, Block> BLOCKS = Maps.newLinkedHashMap();
public static final Map<DyeColor, Block> FABRIC_BLOCKS = new HashMap<>();
public static final Map<DyeColor, Block> ANCIENT_FABRIC_BLOCKS = new HashMap<>();
private static final Map<DyeColor, Block> ANCIENT_FABRIC_BLOCKS = new HashMap<>();
public static final Block GOLD_DOOR = register("dimdoors:gold_door", new DoorBlock(FabricBlockSettings.of(Material.METAL, MapColor.GOLD).nonOpaque()));
public static final Block QUARTZ_DOOR = register("dimdoors:quartz_door", new DoorBlock(FabricBlockSettings.of(Material.STONE, MapColor.OFF_WHITE).nonOpaque()));
public static final Block OAK_DIMENSIONAL_DOOR = register("dimdoors:oak_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.WOOD, MapColor.OAK_TAN).nonOpaque().lightLevel(state -> 10)));
public static final Block IRON_DIMENSIONAL_DOOR = register("dimdoors:iron_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.METAL, MapColor.IRON_GRAY).nonOpaque().lightLevel(state -> 10)));
public static final Block GOLD_DIMENSIONAL_DOOR = register("dimdoors:gold_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.METAL, MapColor.GOLD).nonOpaque().lightLevel(state -> 10)));
public static final Block QUARTZ_DIMENSIONAL_DOOR = register("dimdoors:quartz_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.STONE, MapColor.OFF_WHITE).nonOpaque().lightLevel(state -> 10)));
public static final Block OAK_DIMENSIONAL_TRAPDOOR = register("dimdoors:wood_dimensional_trapdoor", new DimensionalTrapdoorBlock(FabricBlockSettings.of(Material.WOOD, MapColor.OAK_TAN).nonOpaque()));
public static final Block GOLD_DOOR = register("dimdoors:gold_door", new DoorBlock(FabricBlockSettings.of(Material.METAL, MapColor.GOLD).strength(5.0F).breakByHand(false).breakByTool(FabricToolTags.PICKAXES).nonOpaque()));
public static final Block QUARTZ_DOOR = register("dimdoors:quartz_door", new DoorBlock(FabricBlockSettings.of(Material.STONE, MapColor.OFF_WHITE).strength(5.0F).breakByHand(false).breakByTool(FabricToolTags.PICKAXES).nonOpaque()));
public static final Block OAK_DIMENSIONAL_DOOR = register("dimdoors:oak_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.WOOD, MapColor.OAK_TAN).strength(3.0F).breakByTool(FabricToolTags.AXES).breakByHand(true).nonOpaque().luminance(state -> 10)));
public static final Block IRON_DIMENSIONAL_DOOR = register("dimdoors:iron_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.METAL, MapColor.IRON_GRAY).strength(5.0F).breakByHand(false).breakByTool(FabricToolTags.PICKAXES).nonOpaque().luminance(state -> 10)));
public static final Block GOLD_DIMENSIONAL_DOOR = register("dimdoors:gold_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.METAL, MapColor.GOLD).strength(5.0F).breakByHand(false).breakByTool(FabricToolTags.PICKAXES).nonOpaque().luminance(state -> 10)));
public static final Block QUARTZ_DIMENSIONAL_DOOR = register("dimdoors:quartz_dimensional_door", new DimensionalDoorBlock(FabricBlockSettings.of(Material.STONE, MapColor.OFF_WHITE).strength(5.0F).breakByHand(false).breakByTool(FabricToolTags.PICKAXES).nonOpaque().luminance(state -> 10)));
public static final Block OAK_DIMENSIONAL_TRAPDOOR = register("dimdoors:wood_dimensional_trapdoor", new DimensionalTrapdoorBlock(FabricBlockSettings.of(Material.WOOD, MapColor.OAK_TAN).strength(3.0F).breakByTool(FabricToolTags.AXES).breakByHand(true).nonOpaque()));
public static final Block DIMENSIONAL_PORTAL = register("dimdoors:dimensional_portal", new DimensionalPortalBlock(FabricBlockSettings.of(Material.AIR).collidable(false).nonOpaque().dropsNothing().lightLevel(10)));
public static final Block DETACHED_RIFT = register("dimdoors:detached_rift", new DetachedRiftBlock(FabricBlockSettings.of(Material.AIR).noCollision().nonOpaque()));
public static final Block DIMENSIONAL_PORTAL = register("dimdoors:dimensional_portal", new DimensionalPortalBlock(FabricBlockSettings.of(Material.AIR).collidable(false).strength(-1.0F, 3600000.0F).nonOpaque().dropsNothing().luminance(10)));
public static final Block DETACHED_RIFT = register("dimdoors:detached_rift", new DetachedRiftBlock(FabricBlockSettings.of(Material.AIR).strength(-1.0F, 3600000.0F).noCollision().nonOpaque()));
public static final Block WHITE_FABRIC = registerFabric("dimdoors:white_fabric", DyeColor.WHITE);
public static final Block ORANGE_FABRIC = registerFabric("dimdoors:orange_fabric", DyeColor.ORANGE);
@ -67,8 +68,8 @@ public final class ModBlocks {
public static final Block RED_ANCIENT_FABRIC = registerAncientFabric("dimdoors:red_ancient_fabric", DyeColor.RED);
public static final Block BLACK_ANCIENT_FABRIC = registerAncientFabric("dimdoors:black_ancient_fabric", DyeColor.BLACK);
public static final Block ETERNAL_FLUID = register("dimdoors:eternal_fluid", new EternalFluidBlock(FabricBlockSettings.of(Material.STONE, MapColor.RED).lightLevel(15)));
public static final Block UNRAVELLED_FABRIC = register("dimdoors:unravelled_fabric", new UnravelledFabricBlock(FabricBlockSettings.of(Material.STONE, MapColor.BLACK).lightLevel(15)));
public static final Block ETERNAL_FLUID = register("dimdoors:eternal_fluid", new EternalFluidBlock(FabricBlockSettings.of(Material.STONE, MapColor.RED).luminance(15)));
public static final Block UNRAVELLED_FABRIC = register("dimdoors:unravelled_fabric", new UnravelledFabricBlock(FabricBlockSettings.of(Material.STONE, MapColor.BLACK).ticksRandomly().luminance(15)));
public static final Block MARKING_PLATE = register("dimdoors:marking_plate", new MarkingPlateBlock(FabricBlockSettings.of(Material.METAL, DyeColor.BLACK).nonOpaque()));
@ -98,7 +99,13 @@ public final class ModBlocks {
@Environment(EnvType.CLIENT)
public static void initClient() {
BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), ModBlocks.OAK_DIMENSIONAL_DOOR, ModBlocks.GOLD_DIMENSIONAL_DOOR, ModBlocks.IRON_DIMENSIONAL_DOOR, ModBlocks.OAK_DIMENSIONAL_TRAPDOOR, ModBlocks.QUARTZ_DIMENSIONAL_DOOR, ModBlocks.QUARTZ_DOOR);
BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(),
ModBlocks.OAK_DIMENSIONAL_DOOR,
ModBlocks.GOLD_DIMENSIONAL_DOOR,
ModBlocks.IRON_DIMENSIONAL_DOOR,
ModBlocks.OAK_DIMENSIONAL_TRAPDOOR,
ModBlocks.QUARTZ_DIMENSIONAL_DOOR,
ModBlocks.QUARTZ_DOOR);
}
public static Block ancientFabricFromDye(DyeColor color) {

View file

@ -10,6 +10,7 @@ import net.minecraft.block.BlockState;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.TickPriority;
import net.minecraft.world.WorldAccess;
public class UnravelledFabricBlock extends Block {
@ -37,7 +38,7 @@ public class UnravelledFabricBlock extends Block {
@Override
public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState newState, WorldAccess world, BlockPos pos, BlockPos posFrom) {
if (world instanceof ServerWorld) {
this.randomTick(state, (ServerWorld) world, pos, new Random());
world.getBlockTickScheduler().schedule(pos, this, 10, TickPriority.NORMAL);
}
return state;
}

View file

@ -5,15 +5,16 @@ import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3f;
public enum DefaultTransformation implements Transformer {
NONE {
DOWN {
@Override
public void transform(MatrixStack matrices) {
}
},
DIMENSIONAL_PORTAL {
UP {
@Override
public void transform(MatrixStack matrices) {
matrices.translate(0, 0, 0.5F);
}
},
NORTH_DOOR {
@ -43,6 +44,17 @@ public enum DefaultTransformation implements Transformer {
matrices.multiply(Vec3f.NEGATIVE_Y.getDegreesQuaternion(90.0F));
matrices.translate(0, 0, -0.19F);
}
},
NONE {
@Override
public void transform(MatrixStack matrices) {
}
},
DIMENSIONAL_PORTAL {
@Override
public void transform(MatrixStack matrices) {
matrices.translate(0, 0, 0.5F);
}
};
private static final DefaultTransformation[] VALUES = values();

View file

@ -8,6 +8,9 @@ import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.entity.MonolithEntity;
import org.dimdev.dimdoors.item.ModItems;
import org.dimdev.dimdoors.sound.ModSoundEvents;
import org.dimdev.dimdoors.util.Location;
import org.dimdev.dimdoors.util.TeleportUtil;
import org.dimdev.dimdoors.world.ModDimensions;
import net.minecraft.entity.ai.TargetPredicate;
import net.minecraft.entity.ai.goal.Goal;
@ -18,6 +21,8 @@ import net.minecraft.sound.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.fabricmc.fabric.api.network.ServerSidePacketRegistry;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import static net.minecraft.predicate.entity.EntityPredicates.EXCEPT_SPECTATOR;
import static org.dimdev.dimdoors.entity.MonolithEntity.MAX_AGGRO;
@ -65,7 +70,7 @@ public class MonolithAggroGoal extends Goal {
Random random = new Random();
int i = random.nextInt(64);
if (this.target instanceof ServerPlayerEntity) {
if (i < 6) {
if (i < 4) {
this.target.getInventory().armor.get(0).damage(i, random, (ServerPlayerEntity) this.target);
this.target.getInventory().armor.get(1).damage(i, random, (ServerPlayerEntity) this.target);
this.target.getInventory().armor.get(2).damage(i, random, (ServerPlayerEntity) this.target);
@ -91,14 +96,13 @@ public class MonolithAggroGoal extends Goal {
PacketByteBuf data = new PacketByteBuf(Unpooled.buffer());
data.writeInt(this.mob.getAggro());
ServerSidePacketRegistry.INSTANCE.sendToPlayer(this.target, DimensionalDoorsInitializer.MONOLITH_PARTICLE_PACKET, data);
ServerPlayNetworking.send((ServerPlayerEntity) this.target, DimensionalDoorsInitializer.MONOLITH_PARTICLE_PACKET, data);
}
// Teleport the target player if various conditions are met
if (this.mob.getAggro() >= MAX_AGGRO && DimensionalDoorsInitializer.getConfig().getMonolithsConfig().monolithTeleportation && !this.target.isCreative() && this.mob.isDangerous()) {
this.mob.setAggro(0);
//Location destination = LimboDimension.getLimboSkySpawn(player);
//TeleportUtil.teleport(player, destination, 0, 0);
this.target.teleport(this.target.getX(), this.target.getY() + 256, this.target.getZ());
this.target.world.playSound(null, new BlockPos(this.target.getPos()), ModSoundEvents.CRACK, SoundCategory.HOSTILE, 13, 1);
}
}

View file

@ -95,7 +95,6 @@ public final class ModItems {
}
));
// TODO
@RegistryObject("unstable_dimensional_door")
public static final Item UNSTABLE_DIMENSIONAL_DOOR = create(new DimensionalDoorItem(
ModBlocks.IRON_DIMENSIONAL_DOOR,
@ -122,7 +121,9 @@ public final class ModItems {
.negativeDepthFactor(80)
.positiveDepthFactor(Double.MAX_VALUE)
.weightMaximum(100)
.noLink(false).newRiftWeight(0).build()
.noLink(false)
.newRiftWeight(0)
.build()
)
));
@ -130,10 +131,18 @@ public final class ModItems {
public static final Item OAK_DIMENSIONAL_TRAPDOOR = create(new DimensionalTrapdoorItem(
ModBlocks.OAK_DIMENSIONAL_TRAPDOOR,
new Item.Settings().group(DIMENSIONAL_DOORS).maxCount(1),
rift -> rift.setDestination(new EscapeTarget(false))
rift -> rift.setDestination(
RandomTarget.builder()
.acceptedGroups(Collections.singleton(0))
.coordFactor(1)
.negativeDepthFactor(80)
.positiveDepthFactor(Double.MAX_VALUE)
.weightMaximum(100)
.noLink(false)
.newRiftWeight(0)
.build())
));
@RegistryObject("world_thread")
public static final Item WORLD_THREAD = create(new Item(new Item.Settings().group(DIMENSIONAL_DOORS)));
@ -155,6 +164,9 @@ public final class ModItems {
@RegistryObject("rift_stabilizer")
public static final Item RIFT_STABILIZER = create(new RiftStabilizerItem(new Item.Settings().maxCount(1).maxDamage(6).group(DIMENSIONAL_DOORS)));
@RegistryObject("rift_key")
public static final Item RIFT_KEY = create(new RiftKeyItem(new Item.Settings().group(DIMENSIONAL_DOORS).maxCount(1)));
@RegistryObject("dimensional_eraser")
public static final Item DIMENSIONAL_ERASER = create(new DimensionalEraserItem(new Item.Settings().maxDamage(100).group(DIMENSIONAL_DOORS)));

View file

@ -85,8 +85,7 @@ public class RiftBladeItem extends SwordItem {
player.teleport(teleportPosition.getX(), teleportPosition.getY(), teleportPosition.getZ());
player.setYaw((float) (Math.random() * 2 * Math.PI));
stack.damage(1, player, a -> {
});
stack.damage(1, player, a -> a.sendToolBreakStatus(hand));
return new TypedActionResult<>(ActionResult.SUCCESS, stack);
} else if (RaycastHelper.hitsDetachedRift(hit, world)) {
BlockHitResult blockHitResult = (BlockHitResult) hit;

View file

@ -0,0 +1,34 @@
package org.dimdev.dimdoors.item;
import java.util.List;
import dev.onyxstudios.cca.api.v3.component.ComponentV3;
import org.jetbrains.annotations.Nullable;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.text.Text;
import net.minecraft.world.World;
public class RiftKeyItem extends Item {
public RiftKeyItem(Settings settings) {
super(settings);
}
@Override
public void appendTooltip(ItemStack stack, @Nullable World world, List<Text> tooltip, TooltipContext context) {
super.appendTooltip(stack, world, tooltip, context); // TODO
}
@Override
public boolean hasGlint(ItemStack stack) {
return super.hasGlint(stack); // TODO
}
@Override
public int getMaxUseTime(ItemStack stack) {
return 30;
}
}

View file

@ -0,0 +1,23 @@
package org.dimdev.dimdoors.mixin;
import java.nio.file.Path;
import com.google.gson.JsonObject;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import net.minecraft.data.DataCache;
import net.minecraft.data.server.RecipesProvider;
@Mixin(RecipesProvider.class)
public interface RecipesProviderAccessor {
@Invoker
static void callSaveRecipe(DataCache cache, JsonObject json, Path path) {
throw new UnsupportedOperationException();
}
@Invoker
static void callSaveRecipeAdvancement(DataCache cache, JsonObject json, Path path) {
throw new UnsupportedOperationException();
}
}

View file

@ -48,6 +48,13 @@ public abstract class SchematicV2Gateway implements Gateway, BiPredicate<Structu
}
public final void generate(StructureWorldAccess world, BlockPos pos) {
if (DimensionalDoorsInitializer.getConfig()
.getWorldConfig()
.gatewayDimBlacklist
.contains(world.toServerWorld().getRegistryKey().getValue().toString())
) {
return;
}
if (!this.replaced) {
TemplateUtils.replacePlaceholders(this.schematic, world);
this.replaced = true;

View file

@ -1,11 +1,11 @@
package org.dimdev.dimdoors.world.level;
import dev.onyxstudios.cca.api.v3.component.Component;
import dev.onyxstudios.cca.api.v3.component.ComponentV3;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundTag;
public class Counter implements Component {
public class Counter implements ComponentV3 {
private final ItemStack stack;
private int counter;

View file

@ -10,11 +10,11 @@ import dev.onyxstudios.cca.api.v3.level.LevelComponentFactoryRegistry;
import dev.onyxstudios.cca.api.v3.level.LevelComponentInitializer;
import org.dimdev.dimdoors.item.ModItems;
@SuppressWarnings("UnstableApiUsage")
public class DimensionalDoorsComponents implements LevelComponentInitializer, ItemComponentInitializer {
public static final ComponentKey<DimensionalRegistry> DIMENSIONAL_REGISTRY_COMPONENT_KEY = ComponentRegistryV3.INSTANCE.getOrCreate(new Identifier("dimdoors:dimensional_registry"), DimensionalRegistry.class);
public static final ComponentKey<Counter> COUNTER_COMPONENT_KEY = ComponentRegistryV3.INSTANCE.getOrCreate(new Identifier("dimdoors:counter"), Counter.class);
@Override
public void registerLevelComponentFactories(LevelComponentFactoryRegistry registry) {
registry.register(DIMENSIONAL_REGISTRY_COMPONENT_KEY, level -> new DimensionalRegistry());

View file

@ -195,5 +195,17 @@
"dimdoors.config.screen.reload": "Reload Config",
"dimdoors.linkProperties.oneWay": "One way: %s",
"dimdoors.linkProperties.linksRemaining": "Remaining links: %s",
"dimdoors.color": "Color: "
"dimdoors.color": "Color: ",
"dimdoors.advancement.root": "Dimensional Doors",
"dimdoors.advancement.root.desc": "Venture into the depths",
"dimdoors.advancement.public_pocket": "Public Pockets",
"dimdoors.advancement.public_pocket.desc": "Enter a public pocket",
"dimdoors.advancement.private_pocket": "Private Pockets",
"dimdoors.advancement.private_pocket.desc": "Enter a private pocket",
"dimdoors.advancement.dungeon": "Dungeons",
"dimdoors.advancement.dungeon.desc": "Enter a dungeon",
"dimdoors.advancement.limbo": "Decay",
"dimdoors.advancement.limbo.desc": "Enter limbo",
"dimdoors.advancement.escape_limbo": "Escape",
"dimdoors.advancement.escape_limbo.desc": "Escape limbo"
}

View file

@ -1,6 +0,0 @@
{
"parent": "block/trapdoor_bottom",
"textures": {
"texture": "dimdoors:block/dimensional_trapdoor"
}
}

View file

@ -1,6 +0,0 @@
{
"parent": "block/trapdoor_open",
"textures": {
"texture": "dimdoors:block/dimensional_trapdoor"
}
}

View file

@ -1,6 +0,0 @@
{
"parent": "block/trapdoor_top",
"textures": {
"texture": "dimdoors:block/dimensional_trapdoor"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom",
"textures": {
"bottom": "dimdoors:block/gold_door_lower",
"top": "dimdoors:block/gold_door_upper"
"top": "dimdoors:block/gold_door_upper",
"particle": "dimdoors:block/gold_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom_rh",
"textures": {
"bottom": "dimdoors:block/gold_door_lower",
"top": "dimdoors:block/gold_door_upper"
"top": "dimdoors:block/gold_door_upper",
"particle": "dimdoors:block/gold_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top",
"textures": {
"bottom": "dimdoors:block/gold_door_lower",
"top": "dimdoors:block/gold_door_upper"
"top": "dimdoors:block/gold_door_upper",
"particle": "dimdoors:block/gold_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top_rh",
"textures": {
"bottom": "dimdoors:block/gold_door_lower",
"top": "dimdoors:block/gold_door_upper"
"top": "dimdoors:block/gold_door_upper",
"particle": "dimdoors:block/gold_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom",
"textures": {
"bottom": "dimdoors:block/iron_dimensional_door_lower",
"top": "dimdoors:block/iron_dimensional_door_upper"
"top": "dimdoors:block/iron_dimensional_door_upper",
"particle": "dimdoors:block/iron_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom_rh",
"textures": {
"bottom": "dimdoors:block/iron_dimensional_door_lower",
"top": "dimdoors:block/iron_dimensional_door_upper"
"top": "dimdoors:block/iron_dimensional_door_upper",
"particle": "dimdoors:block/iron_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top",
"textures": {
"bottom": "dimdoors:block/iron_dimensional_door_lower",
"top": "dimdoors:block/iron_dimensional_door_upper"
"top": "dimdoors:block/iron_dimensional_door_upper",
"particle": "dimdoors:block/iron_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top_rh",
"textures": {
"bottom": "dimdoors:block/iron_dimensional_door_lower",
"top": "dimdoors:block/iron_dimensional_door_upper"
"top": "dimdoors:block/iron_dimensional_door_upper",
"particle": "dimdoors:block/iron_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom",
"textures": {
"bottom": "dimdoors:block/oak_dimensional_door_lower",
"top": "dimdoors:block/oak_dimensional_door_upper"
"top": "dimdoors:block/oak_dimensional_door_upper",
"particle": "dimdoors:block/oak_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom_rh",
"textures": {
"bottom": "dimdoors:block/oak_dimensional_door_lower",
"top": "dimdoors:block/oak_dimensional_door_upper"
"top": "dimdoors:block/oak_dimensional_door_upper",
"particle": "dimdoors:block/oak_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top",
"textures": {
"bottom": "dimdoors:block/oak_dimensional_door_lower",
"top": "dimdoors:block/oak_dimensional_door_upper"
"top": "dimdoors:block/oak_dimensional_door_upper",
"particle": "dimdoors:block/oak_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top_rh",
"textures": {
"bottom": "dimdoors:block/oak_dimensional_door_lower",
"top": "dimdoors:block/oak_dimensional_door_upper"
"top": "dimdoors:block/oak_dimensional_door_upper",
"particle": "dimdoors:block/oak_dimensional_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom",
"textures": {
"bottom": "dimdoors:block/quartz_door_lower",
"top": "dimdoors:block/quartz_door_upper"
"top": "dimdoors:block/quartz_door_upper",
"particle": "dimdoors:block/quartz_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_bottom_rh",
"textures": {
"bottom": "dimdoors:block/quartz_door_lower",
"top": "dimdoors:block/quartz_door_upper"
"top": "dimdoors:block/quartz_door_upper",
"particle": "dimdoors:block/quartz_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top",
"textures": {
"bottom": "dimdoors:block/quartz_door_lower",
"top": "dimdoors:block/quartz_door_upper"
"top": "dimdoors:block/quartz_door_upper",
"particle": "dimdoors:block/quartz_door_lower"
}
}

View file

@ -2,6 +2,7 @@
"parent": "block/door_top_rh",
"textures": {
"bottom": "dimdoors:block/quartz_door_lower",
"top": "dimdoors:block/quartz_door_upper"
"top": "dimdoors:block/quartz_door_upper",
"particle": "dimdoors:block/quartz_door_lower"
}
}

View file

@ -1,3 +0,0 @@
{
"parent": "dimdoors:block/dimensional_trapdoor_bottom"
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "dimdoors:item/rift_key"
}
}

View file

@ -0,0 +1,3 @@
{
"parent": "block/oak_trapdoor"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View file

@ -1,24 +0,0 @@
{
"display": {
"icon": {
"item": "dimdoors:unravelled_fabric"
},
"title": {
"translate": "Space between Spaces"
},
"description": {
"translate": "advancements.end.root.description"
},
"background": "minecraft:textures/gui/advancements/backgrounds/end.png",
"show_toast": true,
"announce_to_chat": true
},
"criteria": {
"entered_end": {
"trigger": "minecraft:changed_dimension",
"conditions": {
"to": "private_pockets"
}
}
}
}

View file

@ -0,0 +1,32 @@
{
"parent": "dimdoors:dimdoors/root",
"display": {
"icon": {
"item": "dimdoors:gold_dimensional_door"
},
"title": {
"translate": "dimdoors.advancement.dungeon"
},
"description": {
"translate": "dimdoors.advancement.dungeon.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false,
"background": "dimdoors:textures/block/unravelled_fabric.png"
},
"criteria": {
"changed_dimension": {
"trigger": "minecraft:changed_dimension",
"conditions": {
"to": "dimdoors:dungeon_pockets"
}
}
},
"requirements": [
[
"changed_dimension"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "dimdoors:dimdoors/limbo",
"display": {
"icon": {
"item": "dimdoors:eternal_fluid_bucket"
},
"title": {
"translate": "dimdoors.advancement.escape_limbo"
},
"description": {
"translate": "dimdoors.advancement.escape_limbo.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false,
"background": "dimdoors:textures/block/unravelled_fabric.png"
},
"criteria": {
"changed_dimension": {
"trigger": "minecraft:changed_dimension",
"conditions": {
"from": "dimdoors:limbo"
}
}
},
"requirements": [
[
"changed_dimension"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "dimdoors:dimdoors/root",
"display": {
"icon": {
"item": "dimdoors:unravelled_fabric"
},
"title": {
"translate": "dimdoors.advancement.limbo"
},
"description": {
"translate": "dimdoors.advancement.limbo.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false,
"background": "dimdoors:textures/block/unravelled_fabric.png"
},
"criteria": {
"changed_dimension": {
"trigger": "minecraft:changed_dimension",
"conditions": {
"to": "dimdoors:limbo"
}
}
},
"requirements": [
[
"changed_dimension"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "dimdoors:dimdoors/root",
"display": {
"icon": {
"item": "dimdoors:quartz_dimensional_door"
},
"title": {
"translate": "dimdoors.advancement.private_pocket"
},
"description": {
"translate": "dimdoors.advancement.private_pocket.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false,
"background": "dimdoors:textures/block/unravelled_fabric.png"
},
"criteria": {
"changed_dimension": {
"trigger": "minecraft:changed_dimension",
"conditions": {
"to": "dimdoors:personal_pockets"
}
}
},
"requirements": [
[
"changed_dimension"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "dimdoors:dimdoors/root",
"display": {
"icon": {
"item": "dimdoors:iron_dimensional_door"
},
"title": {
"translate": "dimdoors.advancement.public_pocket"
},
"description": {
"translate": "dimdoors.advancement.public_pocket.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false,
"background": "dimdoors:textures/block/unravelled_fabric.png"
},
"criteria": {
"changed_dimension": {
"trigger": "minecraft:changed_dimension",
"conditions": {
"to": "dimdoors:public_pockets"
}
}
},
"requirements": [
[
"changed_dimension"
]
]
}

View file

@ -0,0 +1,36 @@
{
"display": {
"icon": {
"item": "dimdoors:rift_blade",
"nbt": "{Damage:0}"
},
"title": {
"translate": "dimdoors.advancement.root"
},
"description": {
"translate": "dimdoors.advancement.root.desc"
},
"frame": "task",
"show_toast": true,
"announce_to_chat": true,
"hidden": false,
"background": "dimdoors:textures/block/unravelled_fabric.png"
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "minecraft:ender_pearl"
}
]
}
}
},
"requirements": [
[
"inventory_changed"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:black_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:black_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:blue_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:blue_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:brown_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:brown_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:cyan_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:cyan_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:gray_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:gray_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:green_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:green_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:light_blue_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:light_blue_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:light_gray_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:light_gray_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:lime_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:lime_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:magenta_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:magenta_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:orange_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:orange_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:pink_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:pink_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:purple_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:purple_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:red_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:red_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:white_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:white_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"dimdoors:yellow_fabric"
]
},
"criteria": {
"inventory_changed": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
{
"item": "dimdoors:world_thread"
}
]
}
},
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "dimdoors:yellow_fabric"
}
}
},
"requirements": [
[
"inventory_changed",
"has_the_recipe"
]
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:black_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:blue_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:brown_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:cyan_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:gold_dimensional_door"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:gold_door"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:gray_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:green_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:unstable_dimensional_door"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:light_blue_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:light_gray_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:lime_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:magenta_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:marking_plate"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:oak_dimensional_door"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:orange_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:pink_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:purple_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:quartz_dimensional_door"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:quartz_door"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:red_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:white_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:wood_dimensional_trapdoor"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}

View file

@ -0,0 +1,30 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:item",
"name": "dimdoors:yellow_fabric"
}
],
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
]
}
]
}

View file

@ -0,0 +1,21 @@
{
"type": "dimdoors:schematic",
"id": "v2/custom/lantredom",
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [0],
"rift_data": "rift_data/pocket_entrance"
},
{
"type": "dimdoors:rift_data",
"ids": [2],
"rift_data": "rift_data/available_link"
},
{
"type": "dimdoors:relative",
"point_a": 1,
"point_b": 3
}
]
}

View file

@ -0,0 +1,21 @@
{
"type": "dimdoors:schematic",
"id": "v2/custom/lantredom_end",
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [0],
"rift_data": "rift_data/pocket_entrance"
},
{
"type": "dimdoors:rift_data",
"ids": [2],
"rift_data": "rift_data/available_link"
},
{
"type": "dimdoors:relative",
"point_a": 1,
"point_b": 3
}
]
}

View file

@ -0,0 +1,21 @@
{
"type": "dimdoors:schematic",
"id": "v2/custom/lantredom_red",
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [0],
"rift_data": "rift_data/pocket_entrance"
},
{
"type": "dimdoors:rift_data",
"ids": [2],
"rift_data": "rift_data/available_link"
},
{
"type": "dimdoors:relative",
"point_a": 1,
"point_b": 3
}
]
}

Some files were not shown because too many files have changed in this diff Show more