Added Leak properly, completed implmenting assets for blocks and items (along with all lang entries), Added black/whitelist for what worlds will cause you to go to limbo upon eath, and REI foudnation.

This commit is contained in:
Waterpicker 2023-08-13 01:30:13 -05:00
parent 05aa26e2d0
commit 9091b77aa3
35 changed files with 279 additions and 101 deletions

View file

@ -19,6 +19,9 @@ dependencies {
modApi("com.github.DimensionalDevelopment:poly2tri.java:0.1.1")
modApi("com.sk89q.worldedit:worldedit-core:${project.properties["worldedit"]}")
modCompileOnly("me.shedaniel:RoughlyEnoughItems-api:${project.properties["rei_version"]}")
modCompileOnly("me.shedaniel:RoughlyEnoughItems-default-plugin:${project.properties["rei_version"]}")
}
sourceSets.main {

View file

@ -1,7 +1,6 @@
package org.dimdev.dimdoors;
import dev.architectury.event.events.client.ClientPlayerEvent;
import dev.architectury.event.events.common.ChunkEvent;
import dev.architectury.event.events.common.InteractionEvent;
import dev.architectury.injectables.annotations.ExpectPlatform;
import dev.architectury.networking.NetworkChannel;
@ -60,7 +59,7 @@ import org.dimdev.dimdoors.world.ModBiomes;
import org.dimdev.dimdoors.world.ModDimensions;
import org.dimdev.dimdoors.world.decay.DecayPredicate;
import org.dimdev.dimdoors.world.decay.DecayProcessor;
import org.dimdev.dimdoors.world.decay.LimboDecay;
import org.dimdev.dimdoors.world.decay.Decay;
import org.dimdev.dimdoors.world.feature.ModFeatures;
import org.dimdev.dimdoors.world.pocket.type.AbstractPocket;
import org.dimdev.dimdoors.world.pocket.type.addon.PocketAddon;
@ -104,8 +103,6 @@ public class DimensionalDoors {
public static void init() {
dimDoorsMod = Platform.getMod(MOD_ID);
dimDoorsMod.registerConfigurationScreen(ModMenu::getConfigScreen); //TODO: Move to client.
registerRegistries();
ModRecipeTypes.init();
@ -134,7 +131,7 @@ public class DimensionalDoors {
initBuiltinPacks();
ReloadListenerRegistry.register(PackType.SERVER_DATA, PocketLoader.getInstance());
ReloadListenerRegistry.register(PackType.SERVER_DATA, LimboDecay.DecayLoader.getInstance());
ReloadListenerRegistry.register(PackType.SERVER_DATA, Decay.DecayLoader.getInstance());
ReloadListenerRegistry.register(PackType.SERVER_DATA, DoorRiftDataLoader.getInstance());
@ -188,4 +185,8 @@ public class DimensionalDoors {
public static DimensionalDoorBlockRegistrar getDimensionalDoorBlockRegistrar() {
return dimensionalDoorBlockRegistrar;
}
public static Mod getDimDoorsMod() {
return dimDoorsMod;
}
}

View file

@ -8,17 +8,16 @@ import me.shedaniel.cloth.clothconfig.shadowed.blue.endless.jankson.Jankson;
import me.shedaniel.clothconfig2.gui.entries.SelectionListEntry;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.EnvironmentInterface;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.NotNull;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.*;
import static me.shedaniel.autoconfig.annotation.ConfigEntry.Category;
import static me.shedaniel.autoconfig.annotation.ConfigEntry.Gui.*;
@ -51,6 +50,10 @@ public final class ModConfig implements ConfigData {
@Category("doors")
private Doors doors = new Doors();
@TransitiveObject
@Category("decay")
private Decay decay = new Decay();
public General getGeneralConfig() {
return this.general;
}
@ -83,6 +86,10 @@ public final class ModConfig implements ConfigData {
return this.doors;
}
public Decay getDecayConfig() {
return decay;
}
public static class General {
@Tooltip public double teleportOffset = 0;
@Tooltip public boolean riftBoundingBoxInCreative;
@ -160,11 +167,31 @@ public final class ModConfig implements ConfigData {
}
public static class Limbo {
@Tooltip public boolean universalLimbo = false;
@CollapsibleObject
@RequiresRestart
@Tooltip private WorldList worldsLeadingToLimbo = new WorldList(List.of(), true);
@Tooltip public boolean hardcoreLimbo = false;
@Tooltip public double decaySpreadChance = 1.0;
@Tooltip public int limboDecay = 40;
@Tooltip public float limboBlocksCorruptingOverworldAmount = 5;
public boolean shouldUseLimbo(ResourceKey<Level> level) {
return worldsLeadingToLimbo.blacklist != worldsLeadingToLimbo.list.contains(level.location().toString());
}
public static final class WorldList {
@Tooltip public List<String> list;
@Tooltip public boolean blacklist;
public WorldList(List<String> list, boolean blacklist) {
this.list = list;
this.blacklist = blacklist;
}
}
}
public static class Decay {
@Tooltip public double decaySpreadChance = 1.0;
@Tooltip public int decayDelay = 40;
}
public static class Graphics {

View file

@ -1,5 +1,6 @@
package org.dimdev.dimdoors.block;
import dev.architectury.core.block.ArchitecturyLiquidBlock;
import dev.architectury.registry.client.rendering.RenderTypeRegistry;
import dev.architectury.registry.registries.DeferredRegister;
import dev.architectury.registry.registries.RegistrySupplier;
@ -19,6 +20,7 @@ import net.minecraft.world.level.material.MaterialColor;
import org.dimdev.dimdoors.DimensionalDoors;
import org.dimdev.dimdoors.block.door.DimensionalDoorBlock;
import org.dimdev.dimdoors.block.door.DimensionalTrapdoorBlock;
import org.dimdev.dimdoors.fluid.ModFluids;
import java.util.HashMap;
import java.util.Map;
@ -115,9 +117,9 @@ public final class ModBlocks {
public static final RegistrySupplier<Block> BLACK_ANCIENT_FABRIC = registerAncientFabric(DyeColor.BLACK);
private static final BlockBehaviour.Properties UNRAVELLED_FABRIC_BLOCK_SETTINGS = of(Material.STONE, MaterialColor.COLOR_BLACK).randomTicks().lightLevel(state -> 15).strength(0.3F, 0.3F);
public static final RegistrySupplier<LiquidBlock> ETERNAL_FLUID = register("eternal_fluid", () -> {
return new EternalFluidBlock(of(Material.LAVA, MaterialColor.COLOR_RED).lightLevel(state -> 15));
});
public static final RegistrySupplier<LiquidBlock> ETERNAL_FLUID = registerWithoutTab("eternal_fluid", () -> new EternalFluidBlock(of(Material.LAVA, MaterialColor.COLOR_RED).lightLevel(state -> 15)));
public static final RegistrySupplier<LiquidBlock> LEAK = registerWithoutTab("leak", () -> new ArchitecturyLiquidBlock(ModFluids.LEAK, of(WATER)));
public static final RegistrySupplier<Block> DECAYED_BLOCK = registerWithoutTab("decayed_block", () -> new UnravelledFabricBlock(UNRAVELLED_FABRIC_BLOCK_SETTINGS));
@ -218,14 +220,13 @@ public final class ModBlocks {
public static final RegistrySupplier<Block> UNRAVELED_SPIKE = register("unraveled_spike", () -> new PointedDripstoneBlock(of(UNRAVELLED_FABRIC.get()).lightLevel(state -> 0))); //TODO: make this proper class later
public static final RegistrySupplier<Block> GRITTY_STONE = register("gritty_stone", () -> new Block(of(STONE)));
public static final RegistrySupplier<Block> LEAK = register("leak", () -> new Block(of(WATER)));
public static void init() {
BLOCKS.register();
BLOCK_ITEMS.register();
}
private static RegistrySupplier<Block> registerWithoutTab(String name, Supplier<Block> block) {
private static <T extends Block> RegistrySupplier<T> registerWithoutTab(String name, Supplier<T> block) {
return BLOCKS.register(name, block);
}

View file

@ -6,7 +6,7 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import org.dimdev.dimdoors.world.decay.LimboDecay;
import org.dimdev.dimdoors.world.decay.Decay;
public class RealitySpongeBlock extends Block {
@ -20,8 +20,7 @@ public class RealitySpongeBlock extends Block {
BlockPos currentPos = pos.relative(direction);
if(!world.isEmptyBlock(currentPos)) {
System.out.println("Decaying.");
LimboDecay.decayBlock(world, currentPos, state);
Decay.decayBlock(world, currentPos, state);
}
}
}

View file

@ -7,7 +7,7 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState;
import org.dimdev.dimdoors.world.ModDimensions;
import org.dimdev.dimdoors.world.decay.LimboDecay;
import org.dimdev.dimdoors.world.decay.Decay;
public class UnravelledFabricBlock extends Block {
public static final String ID = "unravelled_fabric";
@ -19,7 +19,7 @@ public class UnravelledFabricBlock extends Block {
@Override
public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) {
if (ModDimensions.isLimboDimension(world)) {
LimboDecay.applySpreadDecay(world, pos);
Decay.applySpreadDecay(world, pos);
}
}
}

View file

@ -3,11 +3,22 @@ package org.dimdev.dimdoors.client;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import dev.architectury.event.events.client.ClientReloadShadersEvent;
import dev.architectury.registry.menu.MenuRegistry;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.gui.registry.GuiRegistry;
import me.shedaniel.autoconfig.gui.registry.api.GuiProvider;
import me.shedaniel.autoconfig.gui.registry.api.GuiRegistryAccess;
import me.shedaniel.autoconfig.util.Utils;
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.ShaderInstance;
import net.minecraft.network.chat.Component;
import org.dimdev.dimdoors.DimensionalDoors;
import org.dimdev.dimdoors.ModConfig;
import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes;
import org.dimdev.dimdoors.client.config.ModMenu;
import org.dimdev.dimdoors.client.screen.TesselatingLoomScreen;
import org.dimdev.dimdoors.entity.ModEntityTypes;
import org.dimdev.dimdoors.network.client.ClientPacketHandler;
@ -15,9 +26,21 @@ import org.dimdev.dimdoors.particle.ModParticleTypes;
import org.dimdev.dimdoors.screen.ModScreenHandlerTypes;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Environment(EnvType.CLIENT)
public class DimensionalDoorsClient {
private static final ConfigEntryBuilder ENTRY_BUILDER = ConfigEntryBuilder.create();
public static void init() {
MenuRegistry.registerScreenFactory(ModScreenHandlerTypes.TESSELATING_LOOM.get(), TesselatingLoomScreen::new);
ModEntityTypes.initClient();
@ -26,6 +49,10 @@ public class DimensionalDoorsClient {
ModBlocks.initClient();
ModEntityModelLayers.initClient();
AutoConfig.getGuiRegistry(ModConfig.class).registerPredicateProvider((i18n, field, config, defaults, registry) -> Collections.singletonList(ENTRY_BUILDER
.startStrList(Component.translatable(i18n), ((Set<String>) Utils.getUnsafely(field, config, defaults)).stream().toList())
.setSaveConsumer(newValue -> Utils.setUnsafely(field, config, newValue.stream().collect(Collectors.toSet()))).build()), isSetOfType(String.class));
// DimensionRenderering.initClient();
registerListeners();
@ -33,6 +60,28 @@ public class DimensionalDoorsClient {
ClientPacketHandler.init();
}
private static Predicate<Field> isListOfType(Type... types) {
return field -> {
if (List.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType) {
Type[] args = ((ParameterizedType) field.getGenericType()).getActualTypeArguments();
return args.length == 1 && Stream.of(types).anyMatch(type -> Objects.equals(args[0], type));
} else {
return false;
}
};
}
private static Predicate<Field> isSetOfType(Type... types) {
return field -> {
if (Set.class.isAssignableFrom(field.getType()) && field.getGenericType() instanceof ParameterizedType) {
Type[] args = ((ParameterizedType) field.getGenericType()).getActualTypeArguments();
return args.length == 1 && Stream.of(types).anyMatch(type -> Objects.equals(args[0], type));
} else {
return false;
}
};
}
private static void registerListeners() {
ClientReloadShadersEvent.EVENT.register((provider, sink) -> {
try {

View file

@ -23,6 +23,12 @@ public class ModFluids {
public static final RegistrySupplier<? extends Fluid> FLOWING_ETERNAL_FLUID = register("flowing_eternal_fluid", () -> new ArchitecturyFlowingFluid.Flowing(ModFluids.ETERNAL_FLUID_ATTRIBUTES));
public static final RegistrySupplier<? extends FlowingFluid> ETERNAL_FLUID = register("eternal_fluid", () -> new ArchitecturyFlowingFluid.Source(ModFluids.ETERNAL_FLUID_ATTRIBUTES));
public static final ArchitecturyFluidAttributes LEAK_ATTRIBUTES = SimpleArchitecturyFluidAttributes.ofSupplier(() -> ModFluids.FLOWING_LEAK, () -> ModFluids.LEAK).block(ModBlocks.LEAK).bucketItem(ModItems.LEAK_BUCKET)
.sourceTexture(DimensionalDoors.id("block/leak_still"))
.flowingTexture(DimensionalDoors.id("block/leak_flow"));
public static final RegistrySupplier<? extends Fluid> FLOWING_LEAK = register("flowing_leak_fluid", () -> new ArchitecturyFlowingFluid.Flowing(ModFluids.LEAK_ATTRIBUTES));
public static final RegistrySupplier<? extends FlowingFluid> LEAK = register("leak", () -> new ArchitecturyFlowingFluid.Source(ModFluids.LEAK_ATTRIBUTES));
private static <T extends Fluid> RegistrySupplier<? extends T> register(String string, Supplier<T> fluid) {
return FLUIDS.register(DimensionalDoors.id(string), fluid);
}

View file

@ -90,6 +90,7 @@ public final class ModItems {
public static final RegistrySupplier<Item> WHITE_VOID_RECORD = register("white_void_record", properties -> new ArchitecturyRecordItem(10, ModSoundEvents.WHITE_VOID, properties, 225));
public static final RegistrySupplier<Item> ETERNAL_FLUID_BUCKET = register("eternal_fluid_bucket", properties -> new ArchitecturyBucketItem(ModFluids.ETERNAL_FLUID, properties.craftRemainder(Items.BUCKET).stacksTo(1)));
public static final RegistrySupplier<Item> LEAK_BUCKET = register("leak_bucket", properties -> new ArchitecturyBucketItem(ModFluids.LEAK, properties.craftRemainder(Items.BUCKET).stacksTo(1)));
public static final RegistrySupplier<Item> MASK_SHARD = register("mask_shard", Item::new);

View file

@ -42,7 +42,7 @@ public abstract class PlayerEntityMixin extends LivingEntity {
@Unique
protected void doOnDeathStuff(DamageSource source, CallbackInfo ci) {
if (ModDimensions.isPocketDimension(this.level) || DimensionalDoors.getConfig().getLimboConfig().universalLimbo) {
if (ModDimensions.isPocketDimension(this.level) || DimensionalDoors.getConfig().getLimboConfig().shouldUseLimbo(this.level.dimension())) {
((EntityAccessor) this).setRemovalReason(null);
this.dead = false;
this.setHealth(this.getMaxHealth());

View file

@ -1,7 +1,7 @@
package org.dimdev.dimdoors.mixin;
import net.minecraft.server.level.ServerLevel;
import org.dimdev.dimdoors.world.decay.LimboDecay;
import org.dimdev.dimdoors.world.decay.Decay;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@ -14,6 +14,6 @@ public abstract class ServerWorldMixin {
@Inject(method = "tick(Ljava/util/function/BooleanSupplier;)V", at = @At(target = "Lnet/minecraft/server/level/ServerLevel;fluidTicks:Lnet/minecraft/world/ticks/LevelTicks;", value = "FIELD", ordinal = 0, shift = At.Shift.AFTER))
public void afterScheduledTick(BooleanSupplier shouldKeepTicking, CallbackInfo ci) {
LimboDecay.tick((ServerLevel) (Object) this);
Decay.tick((ServerLevel) (Object) this);
}
}

View file

@ -30,10 +30,10 @@ import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* Provides methods for applying Limbo decay. Limbo decay refers to the effect that most blocks placed in Limbo
* naturally change into stone, then cobble, then gravel, and finally Unraveled Fabric as time passes.
* Provides methods for applying decay. Decay refers to the effect that most blocks placed next to certain blocks like unraveled fabric
* change into simpler forms ultimately becoming in most cases unraveled Fabric as time passes.
*/
public final class LimboDecay {
public final class Decay {
private static final Logger LOGGER = LogManager.getLogger();
private static final Map<ResourceKey<Level>, Set<DecayTask>> DECAY_QUEUE = new HashMap<>();
@ -46,7 +46,7 @@ public final class LimboDecay {
public static void applySpreadDecay(ServerLevel world, BlockPos pos) {
//Check if we randomly apply decay spread or not. This can be used to moderate the frequency of
//full spread decay checks, which can also shift its performance impact on the game.
if (RANDOM.nextDouble() < DimensionalDoors.getConfig().getLimboConfig().decaySpreadChance) {
if (RANDOM.nextDouble() < DimensionalDoors.getConfig().getDecayConfig().decaySpreadChance) {
BlockState origin = world.getBlockState(pos);
//Apply decay to the blocks above, below, and on all four sides.
@ -83,7 +83,7 @@ public final class LimboDecay {
ExtendedServerPlayNetworkHandler.get(player.connection).getDimDoorsPacketHandler().sendPacket(new RenderBreakBlockS2CPacket(pos, 5));
});
world.playSound(null, pos.getX(), pos.getY(), pos.getZ(), ModSoundEvents.TEARING.get(), SoundSource.BLOCKS, 0.5f, 1f);
queueDecay(world, pos, origin, pattern, DimensionalDoors.getConfig().getLimboConfig().limboDecay);
queueDecay(world, pos, origin, pattern, DimensionalDoors.getConfig().getDecayConfig().decayDelay);
break;
}
}

View file

@ -1,8 +1,8 @@
{
"variants": {
"facing=east": { "model": "dimdoors:block/no_texture" },
"facing=west": { "model": "dimdoors:block/no_texture" },
"facing=south": { "model": "dimdoors:block/no_texture" },
"facing=north": { "model": "dimdoors:block/no_texture" }
"facing=east": { "model": "minecraft:block/air" },
"facing=west": { "model": "minecraft:block/air" },
"facing=south": { "model": "minecraft:block/air" },
"facing=north": { "model": "minecraft:block/air" }
}
}

View file

@ -1,20 +1,20 @@
{
"variants": {
"level=0": { "model": "dimdoors:block/no_texture" },
"level=1": { "model": "dimdoors:block/no_texture" },
"level=2": { "model": "dimdoors:block/no_texture" },
"level=3": { "model": "dimdoors:block/no_texture" },
"level=4": { "model": "dimdoors:block/no_texture" },
"level=5": { "model": "dimdoors:block/no_texture" },
"level=6": { "model": "dimdoors:block/no_texture" },
"level=7": { "model": "dimdoors:block/no_texture" },
"level=8": { "model": "dimdoors:block/no_texture" },
"level=9": { "model": "dimdoors:block/no_texture" },
"level=10": { "model": "dimdoors:block/no_texture" },
"level=11": { "model": "dimdoors:block/no_texture" },
"level=12": { "model": "dimdoors:block/no_texture" },
"level=13": { "model": "dimdoors:block/no_texture" },
"level=14": { "model": "dimdoors:block/no_texture" },
"level=15": { "model": "dimdoors:block/no_texture" }
"level=0": { "model": "minecraft:block/air" },
"level=1": { "model": "minecraft:block/air" },
"level=2": { "model": "minecraft:block/air" },
"level=3": { "model": "minecraft:block/air" },
"level=4": { "model": "minecraft:block/air" },
"level=5": { "model": "minecraft:block/air" },
"level=6": { "model": "minecraft:block/air" },
"level=7": { "model": "minecraft:block/air" },
"level=8": { "model": "minecraft:block/air" },
"level=9": { "model": "minecraft:block/air" },
"level=10": { "model": "minecraft:block/air" },
"level=11": { "model": "minecraft:block/air" },
"level=12": { "model": "minecraft:block/air" },
"level=13": { "model": "minecraft:block/air" },
"level=14": { "model": "minecraft:block/air" },
"level=15": { "model": "minecraft:block/air" }
}
}

View file

@ -0,0 +1,52 @@
{
"variants": {
"level=0": {
"model": "minecraft:block/air"
},
"level=1": {
"model": "minecraft:block/air"
},
"level=2": {
"model": "minecraft:block/air"
},
"level=3": {
"model": "minecraft:block/air"
},
"level=4": {
"model": "minecraft:block/air"
},
"level=5": {
"model": "minecraft:block/air"
},
"level=6": {
"model": "minecraft:block/air"
},
"level=7": {
"model": "minecraft:block/air"
},
"level=8": {
"model": "minecraft:block/air"
},
"level=9": {
"model": "minecraft:block/air"
},
"level=10": {
"model": "minecraft:block/air"
},
"level=11": {
"model": "minecraft:block/air"
},
"level=12": {
"model": "minecraft:block/air"
},
"level=13": {
"model": "minecraft:block/air"
},
"level=14": {
"model": "minecraft:block/air"
},
"level=15": {
"model": "minecraft:block/air"
}
}
}

View file

@ -18,6 +18,7 @@
"block.dimdoors.orange_fabric": "Orange Altered Fabric",
"block.dimdoors.magenta_fabric": "Magenta Altered Fabric",
"block.dimdoors.light_blue_fabric": "Light Blue Altered Fabric",
"block.dimdoors.light_gray_fabric": "Light Gray Altered Fabric",
"block.dimdoors.yellow_fabric": "Yellow Altered Fabric",
"block.dimdoors.lime_fabric": "Lime Altered Fabric",
"block.dimdoors.pink_fabric": "Pink Altered Fabric",
@ -195,6 +196,7 @@
"item.dimdoors.creepy_record": "Music Disc",
"item.dimdoors.creepy_record.desc": "Creepy - The sound of Limbo",
"item.dimdoors.eternal_fluid_bucket": "Eternal Fluid Bucket",
"item.dimdoors.leak_bucket": "Leak Bucket",
"item.dimdoors.white_void_record": "Music Disc",
"item.dimdoors.white_void_record.desc": "White Void - The sound of Pocket",
"item.dimdoors.dimensional_eraser": "Dimensional Eraser",
@ -351,8 +353,14 @@
"text.autoconfig.dimdoors.option.limbo.universalLimbo.@Tooltip": "When true, players are also teleported to Limbo when they die in any non-Pocket Dimension (except Limbo itself). Otherwise, players only go to Limbo if they die in a Pocket Dimension.",
"text.autoconfig.dimdoors.option.limbo.hardcoreLimbo": "Hardcore Limbo",
"text.autoconfig.dimdoors.option.limbo.hardcoreLimbo.@Tooltip": "When true, a player dying in Limbo will respawn in Limbo, making Eternal Fluid or Golden Dimensional Doors the only way to escape Limbo.",
"text.autoconfig.dimdoors.option.limbo.decaySpreadChance": "Decay Spread Chance",
"text.autoconfig.dimdoors.option.limbo.decaySpreadChance.@Tooltip": "To be filled out.",
"text.autoconfig.dimdoors.option.limbo.limboBlocksCorruptingOverworldAmount": "Overworld Decay Radius",
"text.autoconfig.dimdoors.option.limbo.limboBlocksCorruptingOverworldAmount.@Tooltip": "The radius around a player in which blocks can decay upon exiting limbo.",
"text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo": "Worlds Leading to Limbo",
"text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.@Tooltip": "Defines a blacklist/whitelist of worlds that will send the player to limbo upon death.",
"text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.list": "List of world ids",
"text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.list.@Tooltip": "List of the ids for worlds in the blacklsit/whitelist.",
"text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.blacklist": "Is it a blacklist?",
"text.autoconfig.dimdoors.option.limbo.worldsLeadingToLimbo.blacklist.@Tooltip": "Boolean that determines if list is a blacklist or white list for worlds.",
"text.autoconfig.dimdoors.category.graphics": "Graphics Settings",
"text.autoconfig.dimdoors.option.graphics.highlightRiftCoreFor": "Time to Highlight Rift Core",
@ -364,6 +372,12 @@
"text.autoconfig.dimdoors.option.graphics.riftJitter": "Rift Jitter",
"text.autoconfig.dimdoors.option.graphics.riftJitter.@Tooltip": "Multiplier affecting how much rifts should jitter, 1 being the default size.",
"text.autoconfig.dimdoors.category.decay": "Decay Settings",
"text.autoconfig.dimdoors.option.decay.decaySpreadChance": "Decay Spread Chance",
"text.autoconfig.dimdoors.option.decay.decaySpreadChance.@Tooltip": "To be filled out.",
"text.autoconfig.dimdoors.option.decay.decayDelay": "Decay Delay",
"text.autoconfig.dimdoors.option.decay.decayDelay.@Tooltip": "In minecraft ticks (20 per second on a healthy server or game), the delay between when a queued decay is scheduled and it fired.",
"argument.dimdoors.schematic.invalidNamespace": "Invalid schematic namespace. Expected one of %s, found %s.",
"command.dimdoors.schematicv2.unknownSchematic": "Unknown schematic \"%s\" in namespace \"%s\" ",
"dimdoors.destination": "Destination type",

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "minecraft:block/air"
}
}
}

View file

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

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -0,0 +1,3 @@
{
"animation": { "frametime": 2 }
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

View file

@ -1,12 +0,0 @@
[
{
"data": {
"destination": {
"type": "dimdoors:public_pocket"
}
},
"condition": {
"type": "dimdoors:always_true"
}
}
]

View file

@ -1,19 +0,0 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"#X"
],
"key": {
"#": {
"tag": "minecraft:wooden_trapdoors"
},
"X": {
"item": "minecraft:ender_pearl"
}
},
"result": {
"_comment": "TODO: remove this recipe",
"item": "dimdoors:wood_dimensional_trapdoor",
"count": 1
}
}

View file

@ -38,12 +38,18 @@ def includeCompile(entry) {
}
}
repositories {
maven {
url = "https://maven.terraformersmc.com/releases/"
}
}
dependencies {
modImplementation "net.fabricmc:fabric-loader:${rootProject.fabric_loader_version}"
modApi "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_api_version}"
// Remove the next line if you don't want to depend on the API
modApi "dev.architectury:architectury-fabric:${rootProject.architectury_version}"
modApi "me.shedaniel.cloth:cloth-config-fabric:9.0.94"
modApi "me.shedaniel.cloth:cloth-config-fabric:10.1.105"
includeCompile("curse.maven:cardinal-components-base-${project.project.cardinal_components}:${project.cardinal_components_base}")
includeCompile("curse.maven:cardinal-components-item-${project.project.cardinal_components}:${project.cardinal_components_item}")
@ -62,6 +68,12 @@ dependencies {
modApi "mcp.mobius.waila:wthit:fabric-${wthitVersion}"
modApi "lol.bai:badpackets:fabric-0.2.0"
modApi "com.sk89q.worldedit:worldedit-fabric-mc${rootProject.minecraft_version}:${rootProject.worldedit}"
modApi "mcp.mobius.waila:wthit:fabric-${wthitVersion}"
modApi "com.terraformersmc:modmenu:6.3.1"
modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:$rei_version"
modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:$rei_version"
modCompileOnly "me.shedaniel:RoughlyEnoughItems-default-plugin-fabric:$rei_version"
}
processResources {

View file

@ -12,7 +12,7 @@ public class DatagenInitializer implements DataGeneratorEntrypoint {
public void onInitializeDataGenerator(FabricDataGenerator generator) {
var pack = generator.createPack();
pack.addProvider(BlockStateProvider::new);
pack.addProvider(DimDoorsModelProvider::new);
pack.addProvider((DataProvider.Factory<DataProvider>) DimdoorsRecipeProvider::new);
pack.addProvider((FabricDataGenerator.Pack.RegistryDependentFactory<DataProvider>) AdvancementProvider::new);
pack.addProvider(org.dimdev.dimdoors.datagen.LootTableProvider::new);

View file

@ -14,7 +14,6 @@ import net.minecraft.data.models.model.ModelLocationUtils;
import net.minecraft.data.models.model.ModelTemplates;
import net.minecraft.data.models.model.TextureMapping;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
@ -27,8 +26,8 @@ import org.dimdev.dimdoors.item.ModItems;
import static net.minecraft.data.models.model.TextureMapping.getBlockTexture;
import static net.minecraft.data.models.model.TextureMapping.getItemTexture;
public class BlockStateProvider extends FabricModelProvider {
public BlockStateProvider(FabricDataOutput dataGenerator) {
public class DimDoorsModelProvider extends FabricModelProvider {
public DimDoorsModelProvider(FabricDataOutput dataGenerator) {
super(dataGenerator);
}
@ -136,11 +135,11 @@ public class BlockStateProvider extends FabricModelProvider {
generator.createTrivialCube(ModBlocks.GRITTY_STONE.get());
generator.family(ModBlocks.REALITY_SPONGE.get());
registerPointedDripstone(generator);
registerUnraveledSpike(generator);
}
private void registerPointedDripstone(BlockModelGenerators generator) {
private void registerUnraveledSpike(BlockModelGenerators generator) {
PropertyDispatch.C2<Direction, DripstoneThickness> doubleProperty = PropertyDispatch.properties(BlockStateProperties.VERTICAL_DIRECTION, BlockStateProperties.DRIPSTONE_THICKNESS);
for (DripstoneThickness thickness : DripstoneThickness.values()) {
doubleProperty.select(Direction.UP, thickness, createPointedUnraveledspikeVariant(generator, Direction.UP, thickness));
@ -152,9 +151,10 @@ public class BlockStateProvider extends FabricModelProvider {
}
public final Variant createPointedUnraveledspikeVariant(BlockModelGenerators generators, Direction direction, DripstoneThickness dripstoneThickness) {
generators.skipAutoItemBlock(ModBlocks.UNRAVELED_SPIKE.get());
String string = "_" + direction.getSerializedName() + "_" + dripstoneThickness.getSerializedName();
TextureMapping textureMapping = TextureMapping.cross(TextureMapping.getBlockTexture(ModBlocks.UNRAVELED_SPIKE.get(), string));
return Variant.variant().with(VariantProperties.MODEL, ModelTemplates.POINTED_DRIPSTONE.createWithSuffix(Blocks.POINTED_DRIPSTONE, string, textureMapping, generators.modelOutput));
return Variant.variant().with(VariantProperties.MODEL, ModelTemplates.CROSS.createWithSuffix(ModBlocks.UNRAVELED_SPIKE.get(), string, textureMapping, generators.modelOutput));
}
public void registerDoor(BlockModelGenerators generator, Block doorBlock, Block textureSource) {

View file

@ -0,0 +1,11 @@
package org.dimdev.dimdoors.compat;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
public class ModMenuCompat implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return org.dimdev.dimdoors.client.config.ModMenu::getConfigScreen;
}
}

View file

@ -33,7 +33,8 @@
],
"fabric-datagen": [
"org.dimdev.dimdoors.datagen.DatagenInitializer"
]
],
"modmenu": [ "org.dimdev.dimdoors.compat.ModMenuCompat" ]
},
"mixins": [
"dimdoors.mixins.json",

View file

@ -43,6 +43,10 @@ dependencies {
modApi "mcp.mobius.waila:wthit:forge-${wthitVersion}"
modApi "lol.bai:badpackets:forge-0.2.0"
modApi "com.sk89q.worldedit:worldedit-forge-mc${rootProject.minecraft_version}:${rootProject.worldedit}"
modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-forge:$rei_version"
modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-forge:$rei_version"
modCompileOnly "me.shedaniel:RoughlyEnoughItems-default-plugin-forge:$rei_version"
}
processResources {

View file

@ -2,12 +2,17 @@ package org.dimdev.dimdoors;
import dev.architectury.platform.forge.EventBuses;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.client.ConfigScreenHandler;
import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent;
import net.minecraftforge.event.AttachCapabilitiesEvent;
import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.javafmlmod.FMLModContainer;
import org.dimdev.dimdoors.client.DimensionalDoorsClient;
import org.dimdev.dimdoors.client.config.ModMenu;
import org.dimdev.dimdoors.item.component.forge.CounterComponentImpl;
import org.dimdev.dimdoors.world.level.component.ChunkLazilyGeneratedComponent;
import org.dimdev.dimdoors.world.level.component.forge.ChunkLazilyGeneratedComponentImpl;
@ -23,7 +28,11 @@ public class DimensionalDoorsForge {
EventBuses.registerModEventBus(DimensionalDoors.MOD_ID, FMLJavaModLoadingContext.get().getModEventBus());
DimensionalDoors.init();
FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer<FMLClientSetupEvent>) event -> DimensionalDoorsClient.init());
FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer<FMLClientSetupEvent>) event -> {
ModLoadingContext.get().registerExtensionPoint(ConfigScreenHandler.ConfigScreenFactory.class, () -> new ConfigScreenHandler.ConfigScreenFactory((minecraft, screen) -> ModMenu.getConfigScreen(screen)));
DimensionalDoorsClient.init();
});
FMLJavaModLoadingContext.get().getModEventBus().addListener((Consumer<RegisterCapabilitiesEvent>) registerCapabilitiesEvent -> {
registerCapabilitiesEvent.register(CounterComponentImpl.class);

View file

@ -29,3 +29,5 @@ cardinal_components_entity=4160620
cardinal_components_level=4160622
cardinal_components_world=4160624
cardinal_components_chunk=4160619
rei_version=11.0.644

View file

@ -1,5 +0,0 @@
{
"variants": {
"": {"model": "dimdoors:block/detached_rift"}
}
}

View file

@ -7,4 +7,4 @@ pluginManagement.repositories {
include("common", "fabric", "forge")
rootProject.name = "DimDoors"
rootProject.name = "dimdoors.common.main"