Getting stuff in general working.
This commit is contained in:
parent
8b1d715e1e
commit
3c950dc5eb
34 changed files with 396 additions and 115 deletions
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
41
src/main/java/org/dimdev/dimdoors/rift/targets/IdMarker.java
Normal file
41
src/main/java/org/dimdev/dimdoors/rift/targets/IdMarker.java
Normal 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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
35
src/main/java/org/dimdev/dimdoors/world/level/Counter.java
Normal file
35
src/main/java/org/dimdev/dimdoors/world/level/Counter.java
Normal 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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "20",
|
||||
"id": "v2.private.private_pocket_0",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "17",
|
||||
"id": "v2.private.private_pocket_1",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "14",
|
||||
"id": "v2.private.private_pocket_2",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "11",
|
||||
"id": "v2.private.private_pocket_3",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "8",
|
||||
"id": "v2.private.private_pocket_4",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "5",
|
||||
"id": "v2.private.private_pocket_5",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "3",
|
||||
"id": "v2.private.private_pocket_6",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"weight": "1",
|
||||
"id": "v2.private.private_pocket_7",
|
||||
"type": "dimdoors:schematic"
|
||||
}
|
|
@ -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)"
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"id": "public.default",
|
||||
"id": "public/default",
|
||||
"type": "dimdoors:id"
|
||||
}
|
||||
|
|
|
@ -44,7 +44,8 @@
|
|||
},
|
||||
"custom": {
|
||||
"cardinal-components": [
|
||||
"dimdoors:dimensional_registry"
|
||||
"dimdoors:dimensional_registry",
|
||||
"dimdoors:counter"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue