diff --git a/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java b/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java index 04f6e727..29b22f41 100644 --- a/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java +++ b/src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java @@ -19,7 +19,6 @@ import org.dimdev.dimdoors.pockets.modifier.Modifier; import org.dimdev.dimdoors.rift.targets.Targets; import org.dimdev.dimdoors.rift.targets.VirtualTarget; import org.dimdev.dimdoors.sound.ModSoundEvents; -import org.dimdev.dimdoors.util.schematic.v2.SchematicTest; import org.dimdev.dimdoors.world.ModBiomes; import org.dimdev.dimdoors.world.ModDimensions; import org.dimdev.dimdoors.world.feature.ModFeatures; @@ -58,13 +57,6 @@ public class DimensionalDoorsInitializer implements ModInitializer { public void onInitialize() { ServerLifecycleEvents.SERVER_STARTING.register((minecraftServer) -> { server = minecraftServer; - if (FabricLoader.getInstance().isDevelopmentEnvironment()) { - try { - SchematicTest.test(); - } catch (IOException e) { - e.printStackTrace(); - } - } }); ModBlocks.init(); diff --git a/src/main/java/org/dimdev/dimdoors/block/DetachedRiftBlock.java b/src/main/java/org/dimdev/dimdoors/block/DetachedRiftBlock.java index 8093116f..0764a6d7 100644 --- a/src/main/java/org/dimdev/dimdoors/block/DetachedRiftBlock.java +++ b/src/main/java/org/dimdev/dimdoors/block/DetachedRiftBlock.java @@ -11,10 +11,13 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.MaterialColor; +import net.minecraft.block.ShapeContext; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.MinecraftClient; import net.minecraft.client.world.ClientWorld; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; import net.minecraft.world.World; @@ -79,4 +82,13 @@ public class DetachedRiftBlock extends Block implements RiftProvider builder) { builder.add(FACING); } + + @Override + public VoxelShape getRaycastShape(BlockState state, BlockView world, BlockPos pos) { + return VoxelShapes.fullCube(); + } } diff --git a/src/main/java/org/dimdev/dimdoors/block/DimensionalTrapdoorBlock.java b/src/main/java/org/dimdev/dimdoors/block/DimensionalTrapdoorBlock.java index 97d48ed4..e663155b 100644 --- a/src/main/java/org/dimdev/dimdoors/block/DimensionalTrapdoorBlock.java +++ b/src/main/java/org/dimdev/dimdoors/block/DimensionalTrapdoorBlock.java @@ -13,6 +13,8 @@ import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockView; import net.minecraft.world.World; @@ -53,4 +55,9 @@ public class DimensionalTrapdoorBlock extends TrapdoorBlock implements RiftProvi public EntranceRiftBlockEntity getRift(World world, BlockPos pos, BlockState state) { return (EntranceRiftBlockEntity) world.getBlockEntity(pos); } + + @Override + public VoxelShape getRaycastShape(BlockState state, BlockView world, BlockPos pos) { + return VoxelShapes.fullCube(); + } } diff --git a/src/main/java/org/dimdev/dimdoors/client/DetachedRiftBlockEntityRenderer.java b/src/main/java/org/dimdev/dimdoors/client/DetachedRiftBlockEntityRenderer.java index 671f31d5..d87f35f7 100644 --- a/src/main/java/org/dimdev/dimdoors/client/DetachedRiftBlockEntityRenderer.java +++ b/src/main/java/org/dimdev/dimdoors/client/DetachedRiftBlockEntityRenderer.java @@ -4,6 +4,7 @@ import java.util.Objects; import com.flowpowered.math.TrigMath; import org.dimdev.dimdoors.DimensionalDoorsInitializer; +import org.dimdev.dimdoors.ModConfig; import org.dimdev.dimdoors.block.entity.DetachedRiftBlockEntity; import org.dimdev.dimdoors.block.entity.RiftBlockEntity; import org.dimdev.dimdoors.client.tesseract.Tesseract; @@ -48,7 +49,7 @@ public class DetachedRiftBlockEntityRenderer extends BlockEntityRenderer(ActionResult.FAIL, stack); + } else { + Counter counter = Counter.get(stack); + + if (RaycastHelper.hitsRift(hit, world)) { + RiftBlockEntity rift = (RiftBlockEntity) world.getBlockEntity(new BlockPos(hit.getPos())); + + if (rift.getDestination() instanceof IdMarker) { + EntityUtils.chat(player, Text.of("Id: " + ((IdMarker) rift.getDestination()).getId())); + } else { + int id = counter.increment(); + EntityUtils.chat(player, Text.of("Rift stripped of data and set to target id: : " + id)); + + rift.setDestination(new IdMarker(id)); + } + + return new TypedActionResult<>(ActionResult.SUCCESS, stack); + } else { + if(player.isSneaking()) { + counter.clear(); + EntityUtils.chat(player, Text.of("Counter has been reset.")); + } else { + EntityUtils.chat(player, Text.of("Current Count: " + counter.count())); + } + } } - if (RaycastHelper.hitsRift(hit, world)) { - RiftBlockEntity rift = (RiftBlockEntity) world.getBlockEntity(new BlockPos(hit.getPos())); - - System.out.println(rift); - - //TODO: implement this tool's functionality - return new TypedActionResult<>(ActionResult.SUCCESS, stack); - } - return new TypedActionResult<>(ActionResult.FAIL, stack); + return new TypedActionResult<>(ActionResult.SUCCESS, stack); } @Override diff --git a/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java b/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java index dc73791f..93558327 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/SchematicV2Handler.java @@ -17,6 +17,8 @@ import com.mojang.serialization.JsonOps; import net.fabricmc.fabric.api.util.NbtType; import net.minecraft.nbt.*; import net.minecraft.util.Identifier; + +import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.dimdev.dimdoors.pockets.generator.PocketGenerator; @@ -98,7 +100,7 @@ public class SchematicV2Handler { LOGGER.error("could not load pocket data in path " + path.toString() + " due to malformed json.", e); } } else if(Files.isRegularFile(path) && path.getFileName().toString().endsWith(".json")) { - String id = String.join(".", idParts); + String id = String.join("", idParts); try { JsonElement json = GSON.fromJson(String.join("", Files.readAllLines(path)), JsonElement.class); loader.accept(id, JsonOps.INSTANCE.convertTo(NbtOps.INSTANCE, json)); @@ -119,6 +121,7 @@ public class SchematicV2Handler { return; } PocketGenerator gen = PocketGenerator.deserialize((CompoundTag) tag); + LOGGER.info(id + ": " + gen.toTag(new CompoundTag())); if (gen != null) pocketGeneratorMap.put(id, gen); } diff --git a/src/main/java/org/dimdev/dimdoors/pockets/generator/PocketGenerator.java b/src/main/java/org/dimdev/dimdoors/pockets/generator/PocketGenerator.java index 473980d4..1afb25d3 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/generator/PocketGenerator.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/generator/PocketGenerator.java @@ -20,6 +20,8 @@ import org.dimdev.dimdoors.DimensionalDoorsInitializer; import org.dimdev.dimdoors.block.entity.RiftBlockEntity; import org.dimdev.dimdoors.pockets.TemplateUtils; import org.dimdev.dimdoors.pockets.modifier.Modifier; +import org.dimdev.dimdoors.pockets.modifier.RiftManager; +import org.dimdev.dimdoors.rift.targets.IdMarker; import org.dimdev.dimdoors.util.Location; import org.dimdev.dimdoors.util.PocketGenerationParameters; import org.dimdev.dimdoors.util.Weighted; @@ -30,8 +32,10 @@ import org.dimdev.dimdoors.world.pocket.Pocket; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.function.Supplier; +import java.util.stream.Collectors; public abstract class PocketGenerator implements Weighted { private static final Logger LOGGER = LogManager.getLogger(); @@ -135,9 +139,9 @@ public abstract class PocketGenerator implements Weighted())); } - public void applyModifiers(Pocket pocket, PocketGenerationParameters parameters) { + public void apply(PocketGenerationParameters parameters, RiftManager manager) { for (Modifier modifier : modifierList) { - modifier.apply(pocket, parameters); + modifier.apply(parameters, manager); } } diff --git a/src/main/java/org/dimdev/dimdoors/pockets/modifier/DimensionalDoorModifier.java b/src/main/java/org/dimdev/dimdoors/pockets/modifier/DimensionalDoorModifier.java index 386cf589..978d5723 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/modifier/DimensionalDoorModifier.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/modifier/DimensionalDoorModifier.java @@ -3,6 +3,7 @@ package org.dimdev.dimdoors.pockets.modifier; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; import net.fabricmc.fabric.api.util.NbtType; import net.minecraft.block.Block; @@ -21,9 +22,11 @@ import org.dimdev.dimdoors.block.DimensionalDoorBlock; import org.dimdev.dimdoors.block.ModBlocks; import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity; import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes; +import org.dimdev.dimdoors.block.entity.RiftBlockEntity; import org.dimdev.dimdoors.block.entity.RiftData; import org.dimdev.dimdoors.pockets.SchematicV2Handler; import org.dimdev.dimdoors.rift.registry.LinkProperties; +import org.dimdev.dimdoors.rift.targets.IdMarker; import org.dimdev.dimdoors.rift.targets.PocketEntranceMarker; import org.dimdev.dimdoors.rift.targets.PocketExitMarker; import org.dimdev.dimdoors.util.PocketGenerationParameters; @@ -109,9 +112,9 @@ public class DimensionalDoorModifier implements Modifier { } @Override - public void apply(Pocket pocket, PocketGenerationParameters parameters) { - Map variableMap = pocket.toVariableMap(new HashMap<>()); - BlockPos pocketOrigin = pocket.getOrigin(); + public void apply(PocketGenerationParameters parameters, RiftManager manager) { + Map variableMap = manager.getPocket().toVariableMap(new HashMap<>()); + BlockPos pocketOrigin = manager.getPocket().getOrigin(); BlockPos pos = new BlockPos(xEquation.apply(variableMap) + pocketOrigin.getX(), yEquation.apply(variableMap) + pocketOrigin.getY(), zEquation.apply(variableMap) + pocketOrigin.getZ()); ServerWorld world = parameters.getWorld(); @@ -122,12 +125,14 @@ public class DimensionalDoorModifier implements Modifier { EntranceRiftBlockEntity rift = ModBlockEntityTypes.ENTRANCE_RIFT.instantiate(); if (doorData == null) { - rift.setDestination(PocketEntranceMarker.builder().ifDestination(new PocketExitMarker()).weight(1f).build()); - rift.setProperties(LinkProperties.builder().entranceWeight(1f).groups(Collections.singleton(1)).floatingWeight(1f).linksRemaining(1).oneWay(false).build()); + rift.setDestination(new IdMarker(manager.nextId())); } else { CompoundTag solvedDoorData = TagEquations.solveCompoundTagEquations(doorData, variableMap); rift.setData(RiftData.fromTag(solvedDoorData)); } + + manager.add(rift); + world.setBlockEntity(pos, rift); } } diff --git a/src/main/java/org/dimdev/dimdoors/pockets/modifier/Modifier.java b/src/main/java/org/dimdev/dimdoors/pockets/modifier/Modifier.java index 42370801..0e5856e3 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/modifier/Modifier.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/modifier/Modifier.java @@ -7,9 +7,12 @@ import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.RegistryKey; import net.minecraft.util.registry.SimpleRegistry; + +import org.dimdev.dimdoors.block.entity.RiftBlockEntity; import org.dimdev.dimdoors.util.PocketGenerationParameters; import org.dimdev.dimdoors.world.pocket.Pocket; +import java.util.Map; import java.util.function.Supplier; public interface Modifier { @@ -36,11 +39,12 @@ public interface Modifier { String getKey(); - void apply(Pocket pocket, PocketGenerationParameters parameters); + void apply(PocketGenerationParameters parameters, RiftManager manager); interface ModifierType { ModifierType SHELL_MODIFIER_TYPE = register(new Identifier("dimdoors", ShellModifier.KEY), ShellModifier::new); ModifierType DIMENSIONAL_DOOR_MODIFIER_TYPE = register(new Identifier("dimdoors", DimensionalDoorModifier.KEY), DimensionalDoorModifier::new); + ModifierType PUBLIC_MODIFIER_TYPE = register(new Identifier("dimdoors", PocketEntranceModifier.KEY), PocketEntranceModifier::new); Modifier fromTag(CompoundTag tag); diff --git a/src/main/java/org/dimdev/dimdoors/pockets/modifier/PocketEntranceModifier.java b/src/main/java/org/dimdev/dimdoors/pockets/modifier/PocketEntranceModifier.java new file mode 100644 index 00000000..6a94a577 --- /dev/null +++ b/src/main/java/org/dimdev/dimdoors/pockets/modifier/PocketEntranceModifier.java @@ -0,0 +1,61 @@ +package org.dimdev.dimdoors.pockets.modifier; + +import java.util.List; +import java.util.Map; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; + +import org.dimdev.dimdoors.block.entity.RiftBlockEntity; +import org.dimdev.dimdoors.rift.registry.PocketEntrancePointer; +import org.dimdev.dimdoors.rift.targets.PocketEntranceMarker; +import org.dimdev.dimdoors.rift.targets.PocketExitMarker; +import org.dimdev.dimdoors.util.PocketGenerationParameters; +import org.dimdev.dimdoors.world.pocket.Pocket; + +public class PocketEntranceModifier implements Modifier { + public static final String KEY = "pocket_entrance"; + + private int id; + + public PocketEntranceModifier(int id) { + this.id = id; + } + + public PocketEntranceModifier() { + + } + + @Override + public Modifier fromTag(CompoundTag tag) { + return new PocketEntranceModifier(tag.getInt("id")); + } + + @Override + public CompoundTag toTag(CompoundTag tag) { + Modifier.super.toTag(tag); + + tag.putInt("id", id); + + return tag; + } + + + @Override + public ModifierType getType() { + return ModifierType.PUBLIC_MODIFIER_TYPE; + } + + @Override + public String getKey() { + return KEY; + } + + @Override + public void apply(PocketGenerationParameters parameters, RiftManager manager) { + manager.consume(id, rift -> { + rift.setDestination(PocketEntranceMarker.builder().ifDestination(new PocketExitMarker()).weight(1.0f).build()); + return true; + }); + } +} diff --git a/src/main/java/org/dimdev/dimdoors/pockets/modifier/RiftManager.java b/src/main/java/org/dimdev/dimdoors/pockets/modifier/RiftManager.java new file mode 100644 index 00000000..4ca24960 --- /dev/null +++ b/src/main/java/org/dimdev/dimdoors/pockets/modifier/RiftManager.java @@ -0,0 +1,65 @@ +package org.dimdev.dimdoors.pockets.modifier; + +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.dimdev.dimdoors.block.entity.RiftBlockEntity; +import org.dimdev.dimdoors.rift.targets.IdMarker; +import org.dimdev.dimdoors.world.pocket.Pocket; + +public class RiftManager { + private final Map map; + private final Pocket pocket; + private int maxId; + + public RiftManager(Pocket pocket) { + this.pocket = pocket; + map = pocket.getBlockEntities().values().stream() + .filter(RiftBlockEntity.class::isInstance).map(RiftBlockEntity.class::cast) + .filter(a -> a.getData().getDestination() instanceof IdMarker) + .filter(a -> ((IdMarker) a.getData().getDestination()).getId() < 0) + .collect(Collectors.toMap(rift -> ((IdMarker) rift.getData().getDestination()).getId(), rift -> rift)); + maxId = map.keySet().stream() + .mapToInt(a -> a) + .max() + .orElse(-1); + } + + //TODO add javadocs + public boolean add(RiftBlockEntity rift) { + if(rift.getData().getDestination() instanceof IdMarker) { + int id = ((IdMarker) rift.getData().getDestination()).getId(); + + if(id < 0) return false; + + map.put(id, rift); + + maxId = Math.max(id, maxId); + + return true; + } + + return false; + } + + public boolean consume(int id, Function consumer) { + if (map.containsKey(id) && consumer.apply(map.get(id))) { + map.remove(id); + return true; + } + return false; + } + + public Pocket getPocket() { + return pocket; + } + + public int nextId() { + return maxId + 1; + } + + public boolean available(int id) { + return !map.containsKey(id); + } +} diff --git a/src/main/java/org/dimdev/dimdoors/pockets/modifier/ShellModifier.java b/src/main/java/org/dimdev/dimdoors/pockets/modifier/ShellModifier.java index 3e4f8f49..3b9a7eac 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/modifier/ShellModifier.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/modifier/ShellModifier.java @@ -15,6 +15,8 @@ import net.minecraft.util.math.BlockPos; import net.fabricmc.fabric.api.util.NbtType; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; + +import org.dimdev.dimdoors.block.entity.RiftBlockEntity; import org.dimdev.dimdoors.util.PocketGenerationParameters; import org.dimdev.dimdoors.util.math.Equation; import org.dimdev.dimdoors.util.schematic.v2.SchematicBlockPalette; @@ -65,8 +67,8 @@ public class ShellModifier implements Modifier{ } @Override - public void apply(Pocket pocket, PocketGenerationParameters parameters) { - layers.forEach(layer -> drawLayer(layer, pocket, parameters.getWorld())); + public void apply(PocketGenerationParameters parameters, RiftManager manager) { + layers.forEach(layer -> drawLayer(layer, manager.getPocket(), parameters.getWorld())); } private void drawLayer(Layer layer, Pocket pocket, ServerWorld world) { diff --git a/src/main/java/org/dimdev/dimdoors/pockets/virtual/reference/PocketGeneratorReference.java b/src/main/java/org/dimdev/dimdoors/pockets/virtual/reference/PocketGeneratorReference.java index b4e641bd..d0b1722f 100644 --- a/src/main/java/org/dimdev/dimdoors/pockets/virtual/reference/PocketGeneratorReference.java +++ b/src/main/java/org/dimdev/dimdoors/pockets/virtual/reference/PocketGeneratorReference.java @@ -6,8 +6,10 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; + import org.dimdev.dimdoors.pockets.generator.PocketGenerator; import org.dimdev.dimdoors.pockets.modifier.Modifier; +import org.dimdev.dimdoors.pockets.modifier.RiftManager; import org.dimdev.dimdoors.pockets.virtual.VirtualSingularPocket; import org.dimdev.dimdoors.util.PocketGenerationParameters; import org.dimdev.dimdoors.util.math.Equation; @@ -82,9 +84,9 @@ public abstract class PocketGeneratorReference extends VirtualSingularPocket { return weightEquation != null ? this.weightEquation.apply(parameters.toVariableMap(Maps.newHashMap())) : peekReferencedPocketGenerator(parameters).getWeight(parameters); } - public void applyModifiers(Pocket pocket, PocketGenerationParameters parameters) { + public void applyModifiers(PocketGenerationParameters parameters, RiftManager manager) { for (Modifier modifier : modifierList) { - modifier.apply(pocket, parameters); + modifier.apply(parameters, manager); } } @@ -92,8 +94,12 @@ public abstract class PocketGeneratorReference extends VirtualSingularPocket { public Pocket prepareAndPlacePocket(PocketGenerationParameters parameters) { PocketGenerator generator = getReferencedPocketGenerator(parameters); Pocket pocket = generator.prepareAndPlacePocket(parameters); - generator.applyModifiers(pocket, parameters); - this.applyModifiers(pocket, parameters); + + RiftManager manager = new RiftManager(pocket); + + generator.apply(parameters, manager); + + this.applyModifiers(parameters, manager); generator.setup(pocket, parameters, setupLoot != null ? setupLoot : true); return pocket; } diff --git a/src/main/java/org/dimdev/dimdoors/rift/targets/IdMarker.java b/src/main/java/org/dimdev/dimdoors/rift/targets/IdMarker.java new file mode 100644 index 00000000..9f451362 --- /dev/null +++ b/src/main/java/org/dimdev/dimdoors/rift/targets/IdMarker.java @@ -0,0 +1,41 @@ +package org.dimdev.dimdoors.rift.targets; + +import net.minecraft.entity.Entity; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.text.Text; + +import org.dimdev.dimdoors.util.EntityUtils; +import org.dimdev.dimdoors.util.Location; + +public class IdMarker extends VirtualTarget implements EntityTarget { + private final int id; + + public IdMarker(int id) { + this.id = id; + } + + @Override + public VirtualTargetType getType() { + return VirtualTargetType.ID_MARKER; + } + + public static CompoundTag toTag(IdMarker target) { + CompoundTag tag = new CompoundTag(); + tag.putInt("id", target.id); + return tag; + } + + public static IdMarker fromTag(CompoundTag nbt) { + return new IdMarker(nbt.getInt("id")); + } + + public int getId() { + return id; + } + + @Override + public boolean receiveEntity(Entity entity, float yawOffset) { + EntityUtils.chat(entity, Text.of("This rift is configured for pocket dungeons. Its id is " + id)); + return false; + } +} diff --git a/src/main/java/org/dimdev/dimdoors/rift/targets/VirtualTarget.java b/src/main/java/org/dimdev/dimdoors/rift/targets/VirtualTarget.java index 87c8aae6..2e49c1bd 100644 --- a/src/main/java/org/dimdev/dimdoors/rift/targets/VirtualTarget.java +++ b/src/main/java/org/dimdev/dimdoors/rift/targets/VirtualTarget.java @@ -88,6 +88,7 @@ public abstract class VirtualTarget implements Target { VirtualTargetType PRIVATE = register("dimdoors:private", a -> new PrivatePocketTarget(), a -> new CompoundTag(), PrivatePocketExitTarget.COLOR); VirtualTargetType PRIVATE_POCKET_EXIT = register("dimdoors:private_pocket_exit", a -> new PrivatePocketExitTarget(), a -> new CompoundTag(), PrivatePocketExitTarget.COLOR); VirtualTargetType RELATIVE = register("dimdoors:relative", RelativeReference::fromTag, RelativeReference::toTag, VirtualTarget.COLOR); + VirtualTargetType ID_MARKER = register("dimdoors:id_marker", IdMarker::fromTag, IdMarker::toTag, VirtualTarget.COLOR); VirtualTargetType NONE = register("dimdoors:none", tag -> NoneTarget.INSTANCE, i -> new CompoundTag(), COLOR); T fromTag(CompoundTag tag); diff --git a/src/main/java/org/dimdev/dimdoors/util/PocketGenerationParameters.java b/src/main/java/org/dimdev/dimdoors/util/PocketGenerationParameters.java index fa00e029..080fbce6 100644 --- a/src/main/java/org/dimdev/dimdoors/util/PocketGenerationParameters.java +++ b/src/main/java/org/dimdev/dimdoors/util/PocketGenerationParameters.java @@ -1,8 +1,12 @@ package org.dimdev.dimdoors.util; import net.minecraft.server.world.ServerWorld; + +import org.dimdev.dimdoors.DimensionalDoorsInitializer; +import org.dimdev.dimdoors.ModConfig; import org.dimdev.dimdoors.rift.registry.LinkProperties; import org.dimdev.dimdoors.rift.targets.VirtualTarget; +import org.dimdev.dimdoors.world.level.DimensionalRegistry; import org.dimdev.dimdoors.world.pocket.VirtualLocation; import java.util.Map; @@ -44,6 +48,8 @@ public class PocketGenerationParameters { public Map toVariableMap(Map stringDoubleMap) { stringDoubleMap.put("depth", (double) this.sourceVirtualLocation.getDepth()); + stringDoubleMap.put("public_size", (double) DimensionalDoorsInitializer.CONFIG.getPocketsConfig().publicPocketSize); + stringDoubleMap.put("private_size", (double) DimensionalDoorsInitializer.CONFIG.getPocketsConfig().privatePocketSize); return stringDoubleMap; } } diff --git a/src/main/java/org/dimdev/dimdoors/world/level/Counter.java b/src/main/java/org/dimdev/dimdoors/world/level/Counter.java new file mode 100644 index 00000000..5b3e9bca --- /dev/null +++ b/src/main/java/org/dimdev/dimdoors/world/level/Counter.java @@ -0,0 +1,35 @@ +package org.dimdev.dimdoors.world.level; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundTag; + +import dev.onyxstudios.cca.api.v3.component.ComponentV3; +import dev.onyxstudios.cca.api.v3.item.ItemComponent; + +public class Counter extends ItemComponent implements ComponentV3 { + public Counter(ItemStack stack) { + super(stack, DimensionalDoorsComponents.COUNTER_COMPONENT_KEY); + + if(!this.hasTag("counter")) { + this.putInt("counter", -1); + } + } + + public int count() { + return getInt("counter"); + } + + public void clear() { + this.putInt("counter", -1); + } + + public int increment() { + int count = count() + 1; + this.putInt("counter", count); + return count; + } + + public static Counter get(T provider) { + return DimensionalDoorsComponents.COUNTER_COMPONENT_KEY.get(provider); + } +} diff --git a/src/main/java/org/dimdev/dimdoors/world/level/DimensionalDoorsComponents.java b/src/main/java/org/dimdev/dimdoors/world/level/DimensionalDoorsComponents.java index fe503bf5..89869d48 100644 --- a/src/main/java/org/dimdev/dimdoors/world/level/DimensionalDoorsComponents.java +++ b/src/main/java/org/dimdev/dimdoors/world/level/DimensionalDoorsComponents.java @@ -4,14 +4,24 @@ import net.minecraft.util.Identifier; import dev.onyxstudios.cca.api.v3.component.ComponentKey; import dev.onyxstudios.cca.api.v3.component.ComponentRegistryV3; +import dev.onyxstudios.cca.api.v3.item.ItemComponentFactoryRegistry; +import dev.onyxstudios.cca.api.v3.item.ItemComponentInitializer; import dev.onyxstudios.cca.api.v3.level.LevelComponentFactoryRegistry; import dev.onyxstudios.cca.api.v3.level.LevelComponentInitializer; +import org.dimdev.dimdoors.item.ModItems; -public class DimensionalDoorsComponents implements LevelComponentInitializer { +public class DimensionalDoorsComponents implements LevelComponentInitializer, ItemComponentInitializer { public static final ComponentKey DIMENSIONAL_REGISTRY_COMPONENT_KEY = ComponentRegistryV3.INSTANCE.getOrCreate(new Identifier("dimdoors:dimensional_registry"), DimensionalRegistry.class); + public static final ComponentKey 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()); } + + @Override + public void registerItemComponentFactories(ItemComponentFactoryRegistry registry) { + registry.registerFor(ModItems.RIFT_CONFIGURATION_TOOL, COUNTER_COMPONENT_KEY, Counter::new); + } } diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default.json b/src/main/resources/data/dimdoors/pockets/generators/private/default.json new file mode 100644 index 00000000..a99d4b04 --- /dev/null +++ b/src/main/resources/data/dimdoors/pockets/generators/private/default.json @@ -0,0 +1,45 @@ +{ + "width": "5 + 16 * private_size", + "length": "5 + 16 * private_size", + "type": "dimdoors:void", + "modifiers": [ + { + "layers": [ + { + "block_state": "dimdoors:white_fabric", + "thickness": "4" + }, + { + "block_state": "dimdoors:white_ancient_fabric", + "thickness": "1" + } + ], + "type": "dimdoors:shell" + }, + { + "door_type": "dimdoors:iron_dimensional_door", + "x": "width/2", + "facing": "north", + "y": "5", + "z": "4", + "type": "dimdoors:door", + "door_data": { + "destination": { + "ifDestination": { + "type": "dimdoors:private_pocket_exit" + }, + "weight": 1.0, + "type": "dimdoors:pocket_entrance" + } + } + }, + { + "type": "dimdoors:pocket_entrance", + "id": 0 + } + ], + "offset_x": "5", + "offset_y": "5", + "offset_z": "5", + "height": "5 + 16 * min(15, private_size)" +} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_0.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_0.json deleted file mode 100644 index bd0ae8c2..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_0.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "20", - "id": "v2.private.private_pocket_0", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_1.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_1.json deleted file mode 100644 index 4d2685d4..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_1.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "17", - "id": "v2.private.private_pocket_1", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_2.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_2.json deleted file mode 100644 index 4aa8f6b1..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_2.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "14", - "id": "v2.private.private_pocket_2", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_3.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_3.json deleted file mode 100644 index b0943a72..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_3.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "11", - "id": "v2.private.private_pocket_3", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_4.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_4.json deleted file mode 100644 index 1017694a..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_4.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "8", - "id": "v2.private.private_pocket_4", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_5.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_5.json deleted file mode 100644 index 6fb583d6..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_5.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "5", - "id": "v2.private.private_pocket_5", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_6.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_6.json deleted file mode 100644 index 27352d0e..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_6.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "3", - "id": "v2.private.private_pocket_6", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/private/default_7.json b/src/main/resources/data/dimdoors/pockets/generators/private/default_7.json deleted file mode 100644 index 9497459d..00000000 --- a/src/main/resources/data/dimdoors/pockets/generators/private/default_7.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "weight": "1", - "id": "v2.private.private_pocket_7", - "type": "dimdoors:schematic" -} diff --git a/src/main/resources/data/dimdoors/pockets/generators/public/default.json b/src/main/resources/data/dimdoors/pockets/generators/public/default.json index ed8593d6..d1946027 100644 --- a/src/main/resources/data/dimdoors/pockets/generators/public/default.json +++ b/src/main/resources/data/dimdoors/pockets/generators/public/default.json @@ -1,6 +1,6 @@ { - "width": "min(16 * (depth-5)^0.4, 64)", - "length": "min(16 * (depth-5)^0.4, 64)", + "width": "5 + 16 * public_size", + "length": "5 + 16 * public_size", "type": "dimdoors:void", "modifiers": [ { @@ -22,9 +22,19 @@ "facing": "north", "y": "5", "z": "4", - "type": "dimdoors:door" + "type": "dimdoors:door", + "door_data": { + "destination": { + "type": "dimdoors:id_marker", + "id": 0 + } + } + }, + { + "type": "dimdoors:pocket_entrance", + "id": 0 } ], "offset_y": "5", - "height": "min(16 * (depth-5)^0.3, 32)" + "height": "5 + 16 * min(15, public_size)" } diff --git a/src/main/resources/data/dimdoors/pockets/groups/private.json b/src/main/resources/data/dimdoors/pockets/groups/private.json index b74732bc..0c138f73 100644 --- a/src/main/resources/data/dimdoors/pockets/groups/private.json +++ b/src/main/resources/data/dimdoors/pockets/groups/private.json @@ -1,34 +1,4 @@ -[ - { - "id": "private.default_0", - "type": "dimdoors:id" - }, - { - "id": "private.default_1", - "type": "dimdoors:id" - }, - { - "id": "private.default_2", - "type": "dimdoors:id" - }, - { - "id": "private.default_3", - "type": "dimdoors:id" - }, - { - "id": "private.default_4", - "type": "dimdoors:id" - }, - { - "id": "private.default_5", - "type": "dimdoors:id" - }, - { - "id": "private.default_6", - "type": "dimdoors:id" - }, - { - "id": "private.default_7", - "type": "dimdoors:id" - } -] +{ + "id": "private/default", + "type": "dimdoors:id" +} diff --git a/src/main/resources/data/dimdoors/pockets/groups/public.json b/src/main/resources/data/dimdoors/pockets/groups/public.json index 2c1cfd97..bc1bd5a1 100644 --- a/src/main/resources/data/dimdoors/pockets/groups/public.json +++ b/src/main/resources/data/dimdoors/pockets/groups/public.json @@ -1,4 +1,4 @@ { - "id": "public.default", + "id": "public/default", "type": "dimdoors:id" } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 02177dfe..5e806d93 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -44,7 +44,8 @@ }, "custom": { "cardinal-components": [ - "dimdoors:dimensional_registry" + "dimdoors:dimensional_registry", + "dimdoors:counter" ] } }