Getting stuff in general working.

This commit is contained in:
Waterpicker 2021-02-09 03:40:48 -06:00
parent 8b1d715e1e
commit 3c950dc5eb
34 changed files with 396 additions and 115 deletions

View file

@ -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();

View file

@ -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<DetachedRif
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.ENTITYBLOCK_ANIMATED;
}
@Override
public VoxelShape getRaycastShape(BlockState state, BlockView world, BlockPos pos) {
return VoxelShapes.fullCube();
}
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
return VoxelShapes.fullCube();
}
}

View file

@ -17,6 +17,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;
@ -96,4 +98,9 @@ public class DimensionalDoorBlock extends DoorBlock implements RiftProvider<Entr
throw new IllegalStateException("Dimensional door at " + pos + " in world " + world + " contained no rift.");
}
}
@Override
public VoxelShape getRaycastShape(BlockState state, BlockView world, BlockPos pos) {
return VoxelShapes.fullCube();
}
}

View file

@ -20,6 +20,8 @@ import net.minecraft.util.BlockMirror;
import net.minecraft.util.BlockRotation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.util.shape.VoxelShape;
import net.minecraft.util.shape.VoxelShapes;
import net.minecraft.world.BlockView;
import net.minecraft.world.World;
@ -70,4 +72,9 @@ public class DimensionalPortalBlock extends Block implements RiftProvider<Entran
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(FACING);
}
@Override
public VoxelShape getRaycastShape(BlockState state, BlockView world, BlockPos pos) {
return VoxelShapes.fullCube();
}
}

View file

@ -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();
}
}

View file

@ -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<Detache
private void renderCrack(VertexConsumer vc, MatrixStack matrices, DetachedRiftBlockEntity rift) {
matrices.push();
matrices.translate(0.5, 0.5, 0.5);
RiftCrackRenderer.drawCrack(matrices.peek().getModel(), vc, 0, CURVE, ModConfig.INSTANCE.getGraphicsConfig().riftSize * rift.size / 150, 0);//0xF1234568L * rift.hashCode());
RiftCrackRenderer.drawCrack(matrices.peek().getModel(), vc, 0, CURVE, DimensionalDoorsInitializer.CONFIG.getGraphicsConfig().riftSize * rift.size / 150, 0);//0xF1234568L * rift.hashCode());
matrices.pop();
}

View file

@ -3,6 +3,9 @@ package org.dimdev.dimdoors.item;
import java.util.Objects;
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.block.DimensionalPortalBlock;
import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.block.entity.EntranceRiftBlockEntity;
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
import net.minecraft.entity.LivingEntity;

View file

@ -2,11 +2,15 @@ package org.dimdev.dimdoors.item;
import java.util.List;
import net.fabricmc.fabric.api.event.player.AttackBlockCallback;
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
import net.minecraft.block.BlockState;
import net.minecraft.client.item.TooltipContext;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@ -20,6 +24,9 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.fabricmc.api.Environment;
import org.dimdev.dimdoors.rift.targets.IdMarker;
import org.dimdev.dimdoors.util.EntityUtils;
import org.dimdev.dimdoors.world.level.Counter;
import static net.fabricmc.api.EnvType.CLIENT;
@ -38,21 +45,37 @@ public class RiftConfigurationToolItem extends Item {
if (world.isClient) {
if (!RaycastHelper.hitsRift(hit, world)) {
player.sendMessage(new TranslatableText("tools.rift_miss"), true);
EntityUtils.chat(player, new TranslatableText("tools.rift_miss"));
RiftBlockEntity.showRiftCoreUntil = System.currentTimeMillis() + DimensionalDoorsInitializer.CONFIG.getGraphicsConfig().highlightRiftCoreFor;
}
return new TypedActionResult<>(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

View file

@ -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);
}

View file

@ -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<PocketGenerationParameters> {
private static final Logger LOGGER = LogManager.getLogger();
@ -135,9 +139,9 @@ public abstract class PocketGenerator implements Weighted<PocketGenerationParame
return this.weightEquation.apply(parameters.toVariableMap(new HashMap<>()));
}
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);
}
}

View file

@ -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<String, Double> variableMap = pocket.toVariableMap(new HashMap<>());
BlockPos pocketOrigin = pocket.getOrigin();
public void apply(PocketGenerationParameters parameters, RiftManager manager) {
Map<String, Double> 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);
}
}

View file

@ -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<T extends Modifier> {
ModifierType<ShellModifier> SHELL_MODIFIER_TYPE = register(new Identifier("dimdoors", ShellModifier.KEY), ShellModifier::new);
ModifierType<DimensionalDoorModifier> DIMENSIONAL_DOOR_MODIFIER_TYPE = register(new Identifier("dimdoors", DimensionalDoorModifier.KEY), DimensionalDoorModifier::new);
ModifierType<PocketEntranceModifier> PUBLIC_MODIFIER_TYPE = register(new Identifier("dimdoors", PocketEntranceModifier.KEY), PocketEntranceModifier::new);
Modifier fromTag(CompoundTag tag);

View file

@ -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<? extends Modifier> 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;
});
}
}

View file

@ -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<Integer, RiftBlockEntity> 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<RiftBlockEntity, Boolean> 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);
}
}

View file

@ -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) {

View file

@ -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;
}

View file

@ -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<? extends VirtualTarget> 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;
}
}

View file

@ -88,6 +88,7 @@ public abstract class VirtualTarget implements Target {
VirtualTargetType<PrivatePocketTarget> PRIVATE = register("dimdoors:private", a -> new PrivatePocketTarget(), a -> new CompoundTag(), PrivatePocketExitTarget.COLOR);
VirtualTargetType<PrivatePocketExitTarget> PRIVATE_POCKET_EXIT = register("dimdoors:private_pocket_exit", a -> new PrivatePocketExitTarget(), a -> new CompoundTag(), PrivatePocketExitTarget.COLOR);
VirtualTargetType<RelativeReference> RELATIVE = register("dimdoors:relative", RelativeReference::fromTag, RelativeReference::toTag, VirtualTarget.COLOR);
VirtualTargetType<IdMarker> ID_MARKER = register("dimdoors:id_marker", IdMarker::fromTag, IdMarker::toTag, VirtualTarget.COLOR);
VirtualTargetType<NoneTarget> NONE = register("dimdoors:none", tag -> NoneTarget.INSTANCE, i -> new CompoundTag(), COLOR);
T fromTag(CompoundTag tag);

View file

@ -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<String, Double> toVariableMap(Map<String, Double> 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;
}
}

View file

@ -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 <T> Counter get(T provider) {
return DimensionalDoorsComponents.COUNTER_COMPONENT_KEY.get(provider);
}
}

View file

@ -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<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());
}
@Override
public void registerItemComponentFactories(ItemComponentFactoryRegistry registry) {
registry.registerFor(ModItems.RIFT_CONFIGURATION_TOOL, COUNTER_COMPONENT_KEY, Counter::new);
}
}

View file

@ -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)"
}

View file

@ -1,5 +0,0 @@
{
"weight": "20",
"id": "v2.private.private_pocket_0",
"type": "dimdoors:schematic"
}

View file

@ -1,5 +0,0 @@
{
"weight": "17",
"id": "v2.private.private_pocket_1",
"type": "dimdoors:schematic"
}

View file

@ -1,5 +0,0 @@
{
"weight": "14",
"id": "v2.private.private_pocket_2",
"type": "dimdoors:schematic"
}

View file

@ -1,5 +0,0 @@
{
"weight": "11",
"id": "v2.private.private_pocket_3",
"type": "dimdoors:schematic"
}

View file

@ -1,5 +0,0 @@
{
"weight": "8",
"id": "v2.private.private_pocket_4",
"type": "dimdoors:schematic"
}

View file

@ -1,5 +0,0 @@
{
"weight": "5",
"id": "v2.private.private_pocket_5",
"type": "dimdoors:schematic"
}

View file

@ -1,5 +0,0 @@
{
"weight": "3",
"id": "v2.private.private_pocket_6",
"type": "dimdoors:schematic"
}

View file

@ -1,5 +0,0 @@
{
"weight": "1",
"id": "v2.private.private_pocket_7",
"type": "dimdoors:schematic"
}

View file

@ -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)"
}

View file

@ -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"
}

View file

@ -1,4 +1,4 @@
{
"id": "public.default",
"id": "public/default",
"type": "dimdoors:id"
}

View file

@ -44,7 +44,8 @@
},
"custom": {
"cardinal-components": [
"dimdoors:dimensional_registry"
"dimdoors:dimensional_registry",
"dimdoors:counter"
]
}
}