Fixed Entity Spawning, Added Overworld to SkyAddon. Added a new labatory dungeon chain and the needed backend.

This commit is contained in:
Waterpicker 2024-01-27 05:53:12 -06:00
parent b4ca7420f5
commit 6ded503a8e
46 changed files with 714 additions and 43 deletions

View file

@ -14,6 +14,7 @@ import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.DoorBlock; import net.minecraft.world.level.block.DoorBlock;
import net.minecraft.world.level.block.TrapDoorBlock; import net.minecraft.world.level.block.TrapDoorBlock;
@ -21,6 +22,7 @@ import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.block.state.properties.Property;
import net.minecraft.world.level.storage.loot.LootParams;
import org.dimdev.dimdoors.DimensionalDoors; import org.dimdev.dimdoors.DimensionalDoors;
import org.dimdev.dimdoors.block.DoorSoundProvider; import org.dimdev.dimdoors.block.DoorSoundProvider;
import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes; import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes;
@ -150,6 +152,11 @@ public class DimensionalDoorBlockRegistrar {
throw new RuntimeException("AutoGenDimensionalDoorBlock should be instantiated as anonymous inner class overriding appendProperties!"); throw new RuntimeException("AutoGenDimensionalDoorBlock should be instantiated as anonymous inner class overriding appendProperties!");
} }
@Override
public List<ItemStack> getDrops(BlockState state, LootParams.Builder params) {
return originalBlock.getDrops(state, params);
}
@Override @Override
public MutableComponent getName() { public MutableComponent getName() {
return Component.translatable("dimdoors.autogen_block_prefix", originalBlock.getName()); return Component.translatable("dimdoors.autogen_block_prefix", originalBlock.getName());

View file

@ -193,8 +193,7 @@ public abstract class RiftBlockEntity extends BlockEntity implements Target, Ent
BlockState state = this.getLevel().getBlockState(this.getBlockPos()); BlockState state = this.getLevel().getBlockState(this.getBlockPos());
Block block = state.getBlock(); Block block = state.getBlock();
if (block instanceof CoordinateTransformerBlock) { if (block instanceof CoordinateTransformerBlock transformer) {
CoordinateTransformerBlock transformer = (CoordinateTransformerBlock) block;
TransformationMatrix3d.TransformationMatrix3dBuilder transformationBuilder = transformer.transformationBuilder(state, this.getBlockPos()); TransformationMatrix3d.TransformationMatrix3dBuilder transformationBuilder = transformer.transformationBuilder(state, this.getBlockPos());
TransformationMatrix3d.TransformationMatrix3dBuilder rotatorBuilder = transformer.rotatorBuilder(state, this.getBlockPos()); TransformationMatrix3d.TransformationMatrix3dBuilder rotatorBuilder = transformer.rotatorBuilder(state, this.getBlockPos());
relativePos = transformer.transformTo(transformationBuilder, entity.position()); relativePos = transformer.transformTo(transformationBuilder, entity.position());

View file

@ -1,19 +1,21 @@
package org.dimdev.dimdoors.client.effect; package org.dimdev.dimdoors.client.effect;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*; import com.mojang.blaze3d.vertex.*;
import com.mojang.math.Axis;
import dev.architectury.injectables.annotations.ExpectPlatform; import dev.architectury.injectables.annotations.ExpectPlatform;
import net.minecraft.client.Camera; import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.DimensionSpecialEffects; import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LightTexture;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.vehicle.Minecart; import net.minecraft.world.entity.vehicle.Minecart;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
import net.minecraft.world.level.material.FogType;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.dimdev.dimdoors.DimensionalDoors; import org.dimdev.dimdoors.DimensionalDoors;
import org.dimdev.dimdoors.listener.pocket.PocketListenerUtil; import org.dimdev.dimdoors.listener.pocket.PocketListenerUtil;
@ -58,13 +60,15 @@ public class DungeonDimensionEffect extends DimensionSpecialEffects implements D
if (key.equals(BuiltinDimensionTypes.END_EFFECTS)) { if (key.equals(BuiltinDimensionTypes.END_EFFECTS)) {
renderEndSky(poseStack); renderEndSky(poseStack);
} else if (DimensionSpecialEffectsMixin.getEffects().containsKey(key)) { } else if(key.equals(BuiltinDimensionTypes.OVERWORLD_EFFECTS)) {
renderOverworld(skyAddon, poseStack, projectionMatrix, partialTick, isFoggy, setupFog);
} /*else if (DimensionSpecialEffectsMixin.getEffects().containsKey(key)) {
var effects = DimensionSpecialEffectsMixin.getEffects().get(key); var effects = DimensionSpecialEffectsMixin.getEffects().get(key);
if (effects != null) { if (effects != null) {
renderEffect(effects, level, ticks, partialTick, poseStack, camera, projectionMatrix, isFoggy, setupFog); renderEffect(effects, level, ticks, partialTick, poseStack, camera, projectionMatrix, isFoggy, setupFog);
} }
} }*/
} }
return true; return true;
@ -119,6 +123,117 @@ public class DungeonDimensionEffect extends DimensionSpecialEffects implements D
RenderSystem.disableBlend(); RenderSystem.disableBlend();
} }
public void renderOverworld(SkyAddon info, PoseStack poseStack, Matrix4f projectionMatrix, float partialTick, boolean isFoggy, Runnable skyFogSetup) {
float q;
float p;
float o;
int m;
float k;
float i;
var levelRenderer = Minecraft.getInstance().levelRenderer;
skyFogSetup.run();
if (isFoggy) {
return;
}
FogRenderer.levelFogColor();
BufferBuilder bufferBuilder = Tesselator.getInstance().getBuilder();
RenderSystem.depthMask(false);
float g = Mth.cos(info.getTimeOfDay() * ((float)Math.PI * 2)) * 2.0f + 0.5f;
g = Mth.clamp(g, 0.0f, 1.0f);
RenderSystem.setShaderColor(0.529f * g, 0.808f * g, 0.922f * g, 1.0f); //sky color
ShaderInstance shaderInstance = RenderSystem.getShader();
levelRenderer.skyBuffer.bind();
levelRenderer.skyBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, shaderInstance);
VertexBuffer.unbind();
RenderSystem.enableBlend();
var level = Minecraft.getInstance().level;
float[] fs = getSunriseColor(info.getTimeOfDay(), partialTick);
if (fs != null) {
RenderSystem.setShader(GameRenderer::getPositionColorShader);
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
poseStack.pushPose();
poseStack.mulPose(Axis.XP.rotationDegrees(90.0f));
i = Mth.sin(info.getSunAngle()) < 0.0f ? 180.0f : 0.0f;
poseStack.mulPose(Axis.ZP.rotationDegrees(i));
poseStack.mulPose(Axis.ZP.rotationDegrees(90.0f));
float j = fs[0];
k = fs[1];
float l = fs[2];
Matrix4f matrix4f = poseStack.last().pose();
bufferBuilder.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR);
bufferBuilder.vertex(matrix4f, 0.0f, 100.0f, 0.0f).color(j, k, l, fs[3]).endVertex();
m = 16;
for (int n = 0; n <= 16; ++n) {
o = (float)n * ((float)Math.PI * 2) / 16.0f;
p = Mth.sin(o);
q = Mth.cos(o);
bufferBuilder.vertex(matrix4f, p * 120.0f, q * 120.0f, -q * 40.0f * fs[3]).color(fs[0], fs[1], fs[2], 0.0f).endVertex();
}
BufferUploader.drawWithShader(bufferBuilder.end());
poseStack.popPose();
}
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
poseStack.pushPose();
// i = 1.0f - 0; //level.getRainLevel(partialTick); TODO: Find out if we want this
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1);
poseStack.mulPose(Axis.YP.rotationDegrees(-90.0f));
poseStack.mulPose(Axis.XP.rotationDegrees(info.getTimeOfDay() * 360.0f));
Matrix4f matrix4f2 = poseStack.last().pose();
k = 30.0f;
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, LevelRenderer.SUN_LOCATION);
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
bufferBuilder.vertex(matrix4f2, -k, 100.0f, -k).uv(0.0f, 0.0f).endVertex();
bufferBuilder.vertex(matrix4f2, k, 100.0f, -k).uv(1.0f, 0.0f).endVertex();
bufferBuilder.vertex(matrix4f2, k, 100.0f, k).uv(1.0f, 1.0f).endVertex();
bufferBuilder.vertex(matrix4f2, -k, 100.0f, k).uv(0.0f, 1.0f).endVertex();
BufferUploader.drawWithShader(bufferBuilder.end());
k = 20.0f;
RenderSystem.setShaderTexture(0, LevelRenderer.MOON_LOCATION);
int r = info.getMoonPhase();
int s = r % 4;
m = r / 4 % 2;
float t = (float)(s) / 4.0f;
o = (float)(m) / 2.0f;
p = (float)(s + 1) / 4.0f;
q = (float)(m + 1) / 2.0f;
bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX);
bufferBuilder.vertex(matrix4f2, -k, -100.0f, k).uv(p, q).endVertex();
bufferBuilder.vertex(matrix4f2, k, -100.0f, k).uv(t, q).endVertex();
bufferBuilder.vertex(matrix4f2, k, -100.0f, -k).uv(t, o).endVertex();
bufferBuilder.vertex(matrix4f2, -k, -100.0f, -k).uv(p, o).endVertex();
BufferUploader.drawWithShader(bufferBuilder.end());
float u = info.getStarBrightness();
if (u > 0.0f) {
RenderSystem.setShaderColor(u, u, u, u);
FogRenderer.setupNoFog();
levelRenderer.starBuffer.bind();
levelRenderer.starBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader());
VertexBuffer.unbind();
skyFogSetup.run();
}
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.disableBlend();
RenderSystem.defaultBlendFunc();
poseStack.popPose();
RenderSystem.setShaderColor(0.0f, 0.0f, 0.0f, 1.0f);
double d = Minecraft.getInstance().player.getEyePosition((float)partialTick).y - level.getLevelData().getHorizonHeight(Minecraft.getInstance().level);
if (d < 0.0) {
poseStack.pushPose();
poseStack.translate(0.0f, 12.0f, 0.0f);
levelRenderer.darkBuffer.bind();
levelRenderer.darkBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, shaderInstance);
VertexBuffer.unbind();
poseStack.popPose();
}
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
RenderSystem.depthMask(true);
}
@Override @Override
public boolean renderClouds(ClientLevel level, int ticks, float partialTick, PoseStack poseStack, double camX, double camY, double camZ, Matrix4f projectionMatrix) { public boolean renderClouds(ClientLevel level, int ticks, float partialTick, PoseStack poseStack, double camX, double camY, double camZ, Matrix4f projectionMatrix) {
return true; return true;
@ -128,4 +243,6 @@ public class DungeonDimensionEffect extends DimensionSpecialEffects implements D
public boolean renderSnowAndRain(ClientLevel level, int ticks, float partialTick, LightTexture lightTexture, double camX, double camY, double camZ) { public boolean renderSnowAndRain(ClientLevel level, int ticks, float partialTick, LightTexture lightTexture, double camX, double camY, double camZ) {
return true; return true;
} }
} }

View file

@ -49,6 +49,12 @@ public final class PocketGenerator {
return generatePocketV2(PocketLoader.getInstance().getGroup(group).getNextPocketGeneratorReference(context), context); return generatePocketV2(PocketLoader.getInstance().getGroup(group).getNextPocketGeneratorReference(context), context);
} }
public static Pocket generateFromVirtualPocket(ServerLevel world, ResourceLocation id, VirtualLocation virtualLocation, VirtualTarget linkTo, LinkProperties linkProperties) {
PocketGenerationContext context = new PocketGenerationContext(world, virtualLocation, linkTo, linkProperties);
LOGGER.info("Generating virtual target: " + id);
return generatePocketV2(PocketLoader.getInstance().getVirtual(id).getNextPocketGeneratorReference(context), context);
}
public static Pocket generatePocketV2(PocketGeneratorReference pocketGeneratorReference, PocketGenerationContext context) { public static Pocket generatePocketV2(PocketGeneratorReference pocketGeneratorReference, PocketGenerationContext context) {
return pocketGeneratorReference.prepareAndPlacePocket(context); return pocketGeneratorReference.prepareAndPlacePocket(context);
} }

View file

@ -112,6 +112,11 @@ public class PocketLoader implements ResourceManagerReloadListener {
return pocketGroups.get(Path.stringPath(group)); return pocketGroups.get(Path.stringPath(group));
} }
public VirtualPocket getVirtual(ResourceLocation id) {
return virtualPockets.get(Path.stringPath(id));
}
public static PocketLoader getInstance() { public static PocketLoader getInstance() {
return INSTANCE; return INSTANCE;
} }

View file

@ -98,6 +98,8 @@ public interface Modifier extends ReferenceSerializable {
RegistrySupplier<ModifierType<OffsetModifier>> OFFSET_MODIFIER_TYPE = register(DimensionalDoors.id(OffsetModifier.KEY), OffsetModifier::new); RegistrySupplier<ModifierType<OffsetModifier>> OFFSET_MODIFIER_TYPE = register(DimensionalDoors.id(OffsetModifier.KEY), OffsetModifier::new);
RegistrySupplier<ModifierType<Modifier>> ABSOLUTE_RIFT_BLOCK_ENTITY_MODIFIER_TYPE = register(DimensionalDoors.id(AbsoluteRiftBlockEntityModifier.KEY), AbsoluteRiftBlockEntityModifier::new); RegistrySupplier<ModifierType<Modifier>> ABSOLUTE_RIFT_BLOCK_ENTITY_MODIFIER_TYPE = register(DimensionalDoors.id(AbsoluteRiftBlockEntityModifier.KEY), AbsoluteRiftBlockEntityModifier::new);
RegistrySupplier<ModifierType<TemplateModifier>> TEMPLATE_MODIFIER_TYPE = register(DimensionalDoors.id(TemplateModifier.KEY), TemplateModifier::new);
Modifier fromNbt(CompoundTag nbt, ResourceManager manager); Modifier fromNbt(CompoundTag nbt, ResourceManager manager);
default Modifier fromNbt(CompoundTag nbt) { default Modifier fromNbt(CompoundTag nbt) {

View file

@ -45,7 +45,7 @@ public class RiftDataModifier extends AbstractModifier {
return IntStream.generate(buffer::get).limit(buffer.remaining()); return IntStream.generate(buffer::get).limit(buffer.remaining());
} }
private static byte[] toByteArray(int[] ints) { public static byte[] toByteArray(int[] ints) {
byte[] bytes = new byte[ints.length]; byte[] bytes = new byte[ints.length];
for (int i = 0; i < ints.length; i++) { for (int i = 0; i < ints.length; i++) {
bytes[i] = (byte) ints[i]; bytes[i] = (byte) ints[i];

View file

@ -0,0 +1,75 @@
package org.dimdev.dimdoors.pockets.modifier;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceManager;
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
import org.dimdev.dimdoors.pockets.PocketGenerationContext;
import org.dimdev.dimdoors.rift.targets.TemplateTarget;
import org.dimdev.dimdoors.world.pocket.type.Pocket;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.IntConsumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import static org.dimdev.dimdoors.pockets.modifier.RiftDataModifier.stream;
import static org.dimdev.dimdoors.pockets.modifier.RiftDataModifier.toByteArray;
public class TemplateModifier extends AbstractModifier {
public static final String KEY = "template";
private ResourceLocation templateId;
private List<Integer> ids;
@Override
public Modifier fromNbt(CompoundTag nbt, ResourceManager manager) {
templateId = ResourceLocation.tryParse(nbt.getString("templateId"));
ids = stream(nbt.getByteArray("ids")).boxed().collect(Collectors.toList());
return this;
}
@Override
public CompoundTag toNbtInternal(CompoundTag nbt, boolean allowReference) {
super.toNbtInternal(nbt, allowReference);
nbt.putString("templateId", templateId.toString());
nbt.putByteArray("ids", toByteArray(ids.stream().mapToInt(Integer::intValue).toArray()));
return nbt;
}
@Override
public ModifierType<? extends Modifier> getType() {
return ModifierType.TEMPLATE_MODIFIER_TYPE.get();
}
@Override
public String getKey() {
return KEY;
}
@Override
public void apply(PocketGenerationContext parameters, RiftManager manager) {
var template = new TemplateTarget(templateId);
manager.foreachConsume((id, rift) -> {
if(ids.contains(id)) {
rift.setDestination(template.copy());
return true;
} else {
return false;
}
});
}
@Override
public void apply(PocketGenerationContext parameters, Pocket.PocketBuilder<?, ?> builder) {
}
}

View file

@ -7,24 +7,14 @@ import org.dimdev.dimdoors.world.level.registry.DimensionalRegistry;
import org.dimdev.dimdoors.world.pocket.VirtualLocation; import org.dimdev.dimdoors.world.pocket.VirtualLocation;
import org.dimdev.dimdoors.world.pocket.type.Pocket; import org.dimdev.dimdoors.world.pocket.type.Pocket;
public class PublicPocketTarget extends RestoringTarget { public class PublicPocketTarget extends WrappedDestinationTarget {
private VirtualTarget wrappedDestination = null;
private PublicPocketTarget(VirtualTarget wrappedDestination) { private PublicPocketTarget(VirtualTarget wrappedDestination) {
this.wrappedDestination = wrappedDestination; super(wrappedDestination);
} }
public PublicPocketTarget() { public PublicPocketTarget() {
} super();
@Override
protected VirtualTarget getTarget() {
return this.wrappedDestination;
}
@Override
protected void setTarget(VirtualTarget target) {
this.wrappedDestination = target;
} }
@Override @Override
@ -49,16 +39,10 @@ public class PublicPocketTarget extends RestoringTarget {
} }
public static CompoundTag toNbt(PublicPocketTarget target) { public static CompoundTag toNbt(PublicPocketTarget target) {
CompoundTag nbt = new CompoundTag(); return WrappedDestinationTarget.toNbt(target);
if (target.wrappedDestination != null)
nbt.put("wrappedDestination", VirtualTarget.toNbt(target.wrappedDestination));
return nbt;
} }
public static PublicPocketTarget fromNbt(CompoundTag nbt) { public static PublicPocketTarget fromNbt(CompoundTag nbt) {
PublicPocketTarget target = new PublicPocketTarget(); return fromNbt(nbt, new PublicPocketTarget());
if (nbt.contains("wrappedDestination"))
target.wrappedDestination = VirtualTarget.fromNbt(nbt.getCompound("wrappedDestination"));
return target;
} }
} }

View file

@ -0,0 +1,62 @@
package org.dimdev.dimdoors.rift.targets;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import org.dimdev.dimdoors.DimensionalDoors;
import org.dimdev.dimdoors.api.util.Location;
import org.dimdev.dimdoors.pockets.PocketGenerator;
import org.dimdev.dimdoors.rift.registry.LinkProperties;
import org.dimdev.dimdoors.world.ModDimensions;
import org.dimdev.dimdoors.world.level.registry.DimensionalRegistry;
import org.dimdev.dimdoors.world.pocket.VirtualLocation;
import org.dimdev.dimdoors.world.pocket.type.Pocket;
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
public class TemplateTarget extends WrappedDestinationTarget {
private final ResourceLocation template;
public TemplateTarget(VirtualTarget wrappedDestination, ResourceLocation template) {
super(wrappedDestination);
this.template = template;
}
public TemplateTarget(ResourceLocation template) {
this(null, template);
}
@Override
public Location makeLinkTarget() {
VirtualLocation riftVirtualLocation = VirtualLocation.fromLocation(this.location);
VirtualLocation newVirtualLocation;
int depth = riftVirtualLocation.getDepth() + 1;
newVirtualLocation = new VirtualLocation(riftVirtualLocation.getWorld(), riftVirtualLocation.getX(), riftVirtualLocation.getZ(), depth);
Pocket pocket = PocketGenerator.generateFromVirtualPocket(DimensionalDoors.getWorld(ModDimensions.DUNGEON), template, newVirtualLocation, new GlobalReference(this.location), null);
return DimensionalRegistry.getRiftRegistry().getPocketEntrance(pocket);
}
public static CompoundTag toNbt(TemplateTarget target) {
CompoundTag nbt = WrappedDestinationTarget.toNbt(target);
nbt.putString("template", target.template.toString());
return nbt;
}
@Override
public VirtualTarget copy() {
return new TemplateTarget(wrappedDestination, template);
}
public static TemplateTarget fromNbt(CompoundTag nbt) {
var id = ResourceLocation.tryParse(nbt.getString("template"));
return fromNbt(nbt, new TemplateTarget(id));
}
@Override
public VirtualTargetType<? extends VirtualTarget> getType() {
return VirtualTargetType.TEMPLATE.get();
}
}

View file

@ -86,6 +86,7 @@ public abstract class VirtualTarget implements Target {
public interface VirtualTargetType<T extends VirtualTarget> { public interface VirtualTargetType<T extends VirtualTarget> {
RegistrySupplier<VirtualTargetType<RandomTarget>> AVAILABLE_LINK = register("dimdoors:available_link", RandomTarget::fromNbt, RandomTarget::toNbt, VirtualTarget.COLOR); RegistrySupplier<VirtualTargetType<RandomTarget>> AVAILABLE_LINK = register("dimdoors:available_link", RandomTarget::fromNbt, RandomTarget::toNbt, VirtualTarget.COLOR);
RegistrySupplier<VirtualTargetType<DungeonTarget>> DUNGEON = register("dimdoors:dungeon", DungeonTarget::fromNbt, DungeonTarget::toNbt, VirtualTarget.COLOR); RegistrySupplier<VirtualTargetType<DungeonTarget>> DUNGEON = register("dimdoors:dungeon", DungeonTarget::fromNbt, DungeonTarget::toNbt, VirtualTarget.COLOR);
RegistrySupplier<VirtualTargetType<TemplateTarget>> TEMPLATE = register("dimdoors:template", TemplateTarget::fromNbt, TemplateTarget::toNbt, VirtualTarget.COLOR);
RegistrySupplier<VirtualTargetType<EscapeTarget>> ESCAPE = register("dimdoors:escape", EscapeTarget::fromNbt, EscapeTarget::toNbt, VirtualTarget.COLOR); RegistrySupplier<VirtualTargetType<EscapeTarget>> ESCAPE = register("dimdoors:escape", EscapeTarget::fromNbt, EscapeTarget::toNbt, VirtualTarget.COLOR);
RegistrySupplier<VirtualTargetType<GlobalReference>> GLOBAL = register("dimdoors:global", GlobalReference::fromNbt, GlobalReference::toNbt, VirtualTarget.COLOR); RegistrySupplier<VirtualTargetType<GlobalReference>> GLOBAL = register("dimdoors:global", GlobalReference::fromNbt, GlobalReference::toNbt, VirtualTarget.COLOR);
RegistrySupplier<VirtualTargetType<LimboTarget>> LIMBO = register("dimdoors:limbo", a -> LimboTarget.INSTANCE, a -> new CompoundTag(), VirtualTarget.COLOR); RegistrySupplier<VirtualTargetType<LimboTarget>> LIMBO = register("dimdoors:limbo", a -> LimboTarget.INSTANCE, a -> new CompoundTag(), VirtualTarget.COLOR);

View file

@ -0,0 +1,43 @@
package org.dimdev.dimdoors.rift.targets;
import net.minecraft.nbt.CompoundTag;
import org.dimdev.dimdoors.api.util.Location;
import org.dimdev.dimdoors.pockets.PocketGenerator;
import org.dimdev.dimdoors.world.level.registry.DimensionalRegistry;
import org.dimdev.dimdoors.world.pocket.VirtualLocation;
import org.dimdev.dimdoors.world.pocket.type.Pocket;
public abstract class WrappedDestinationTarget extends RestoringTarget {
protected VirtualTarget wrappedDestination = null;
public WrappedDestinationTarget(VirtualTarget wrappedDestination) {
this.wrappedDestination = wrappedDestination;
}
public WrappedDestinationTarget() {
}
@Override
protected VirtualTarget getTarget() {
return this.wrappedDestination;
}
@Override
protected void setTarget(VirtualTarget target) {
this.wrappedDestination = target;
}
public static CompoundTag toNbt(WrappedDestinationTarget target) {
CompoundTag nbt = new CompoundTag();
if (target.wrappedDestination != null)
nbt.put("wrappedDestination", VirtualTarget.toNbt(target.wrappedDestination));
return nbt;
}
public static <T extends WrappedDestinationTarget> T fromNbt(CompoundTag nbt, T target) {
if (nbt.contains("wrappedDestination"))
target.wrappedDestination = VirtualTarget.fromNbt(nbt.getCompound("wrappedDestination"));
return target;
}
}

View file

@ -6,8 +6,12 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.CubicSampler;
import net.minecraft.util.Mth;
import net.minecraft.world.level.biome.BiomeManager;
import net.minecraft.world.level.dimension.BuiltinDimensionTypes; import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
import net.minecraft.world.phys.Vec3;
import org.dimdev.dimdoors.DimensionalDoors; import org.dimdev.dimdoors.DimensionalDoors;
import org.dimdev.dimdoors.mixin.client.accessor.DimensionSpecialEffectsMixin; import org.dimdev.dimdoors.mixin.client.accessor.DimensionSpecialEffectsMixin;
import org.dimdev.dimdoors.world.pocket.type.Pocket; import org.dimdev.dimdoors.world.pocket.type.Pocket;
@ -17,17 +21,30 @@ public class SkyAddon implements AutoSyncedAddon {
private ResourceLocation effect; private ResourceLocation effect;
private long dayTime = 6000L;
private byte moonPhase;
public boolean setEfffect(ResourceLocation effect) { public boolean setEfffect(ResourceLocation effect) {
this.effect = effect; this.effect = effect;
return true; return true;
} }
public void setDayTime(long dayTime) {
this.dayTime = dayTime;
}
public void setMoonPhase(byte moonPhase) {
this.moonPhase = moonPhase;
}
@Override @Override
public PocketAddon fromNbt(CompoundTag nbt) { public PocketAddon fromNbt(CompoundTag nbt) {
ResourceLocation tag = null; ResourceLocation tag = null;
this.effect = !nbt.contains("effect") && nbt.contains("world") ? ResourceLocation.tryParse(nbt.getString("world")) : nbt.contains("effect") ? ResourceLocation.tryParse(nbt.getString("effect")) : null; this.effect = !nbt.contains("effect") && nbt.contains("world") ? ResourceLocation.tryParse(nbt.getString("world")) : nbt.contains("effect") ? ResourceLocation.tryParse(nbt.getString("effect")) : null;
this.dayTime = nbt.contains("dayTime") ? nbt.getLong("dayTime") : 12000L;
this.moonPhase = nbt.contains("moonPhase") ? nbt.getByte("moonPhase") : 0;
return this; return this;
} }
@ -36,6 +53,8 @@ public class SkyAddon implements AutoSyncedAddon {
AutoSyncedAddon.super.toNbt(nbt); AutoSyncedAddon.super.toNbt(nbt);
nbt.putString("effect", this.effect.toString()); nbt.putString("effect", this.effect.toString());
nbt.putLong("dayTime", this.dayTime);
nbt.putByte("moonPhase", this.moonPhase);
return nbt; return nbt;
} }
@ -57,15 +76,20 @@ public class SkyAddon implements AutoSyncedAddon {
@Override @Override
public AutoSyncedAddon read(FriendlyByteBuf buf) { public AutoSyncedAddon read(FriendlyByteBuf buf) {
this.effect = buf.readResourceLocation(); this.effect = buf.readResourceLocation();
this.dayTime = buf.readLong();
this.moonPhase = buf.readByte();
return this; return this;
} }
@Override @Override
public FriendlyByteBuf write(FriendlyByteBuf buf) { public FriendlyByteBuf write(FriendlyByteBuf buf) {
buf.writeResourceLocation(effect); buf.writeResourceLocation(effect);
buf.writeLong(dayTime);
buf.writeByte(moonPhase);
return buf; return buf;
} }
public interface SkyPocketBuilder<T extends Pocket.PocketBuilder<T, ?>> extends PocketBuilderExtension<T> { public interface SkyPocketBuilder<T extends Pocket.PocketBuilder<T, ?>> extends PocketBuilderExtension<T> {
default T dimenionType(ResourceLocation effect) { default T dimenionType(ResourceLocation effect) {
@ -73,16 +97,34 @@ public class SkyAddon implements AutoSyncedAddon {
return getSelf(); return getSelf();
} }
default T dayTime(long dayTime) {
this.<SkyBuilderAddon>getAddon(ID).dayTime = dayTime;
return getSelf();
}
default T moonPhase(byte moonPhase) {
this.<SkyBuilderAddon>getAddon(ID).moonPhase = moonPhase;
return getSelf();
}
} }
public static class SkyBuilderAddon implements PocketBuilderAddon<SkyAddon> { public static class SkyBuilderAddon implements PocketBuilderAddon<SkyAddon> {
private ResourceLocation effect = BuiltinDimensionTypes.OVERWORLD_EFFECTS; private ResourceLocation effect = BuiltinDimensionTypes.OVERWORLD_EFFECTS;
private long dayTime = 12000L;
private byte moonPhase = 0;
@Override @Override
public void apply(Pocket pocket) { public void apply(Pocket pocket) {
SkyAddon addon = new SkyAddon(); SkyAddon addon = new SkyAddon();
addon.effect = effect; addon.effect = effect;
addon.dayTime = dayTime;
addon.moonPhase = moonPhase;
pocket.addAddon(addon); pocket.addAddon(addon);
} }
@ -93,7 +135,9 @@ public class SkyAddon implements AutoSyncedAddon {
@Override @Override
public PocketBuilderAddon<SkyAddon> fromNbt(CompoundTag nbt) { public PocketBuilderAddon<SkyAddon> fromNbt(CompoundTag nbt) {
this.effect = ResourceLocation.tryParse(nbt.getString("world")); this.effect = ResourceLocation.tryParse(nbt.getString("effect"));
this.dayTime = nbt.getLong("dayTime");
this.moonPhase = nbt.getByte("moonPhase");
return this; return this;
} }
@ -102,7 +146,9 @@ public class SkyAddon implements AutoSyncedAddon {
public CompoundTag toNbt(CompoundTag nbt) { public CompoundTag toNbt(CompoundTag nbt) {
PocketBuilderAddon.super.toNbt(nbt); PocketBuilderAddon.super.toNbt(nbt);
nbt.putString("dimenionType", effect.toString()); nbt.putString("effect", effect.toString());
nbt.putLong("dayTime", dayTime);
nbt.putByte("moonPhase", moonPhase);
return nbt; return nbt;
} }
@ -124,4 +170,34 @@ public class SkyAddon implements AutoSyncedAddon {
return this.<SkyAddon>getAddon(ID).setEfffect(effect); return this.<SkyAddon>getAddon(ID).setEfffect(effect);
} }
} }
public static float timeOfDay(long dayTime) {
double d = Mth.frac((double)dayTime / 24000.0 - 0.25);
double e = 0.5 - Math.cos(d * Math.PI) / 2.0;
return (float)(d * 2.0 + e) / 3.0f;
}
public float getSunAngle() {
float f = this.getTimeOfDay();
return f * ((float)Math.PI * 2);
}
public float getTimeOfDay() {
return timeOfDay(getDayTime());
}
private long getDayTime() {
return dayTime;
}
public int getMoonPhase() {
return moonPhase % 8;
}
public float getStarBrightness() {
float f = this.getTimeOfDay();
float g = 1.0f - (Mth.cos(f * ((float)Math.PI * 2)) * 2.0f + 0.25f);
g = Mth.clamp(g, 0.0f, 1.0f);
return g * g * 0.5f;
}
} }

View file

@ -2,7 +2,8 @@
{ {
"data": { "data": {
"destination": { "destination": {
"type": "dimdoors:public_pocket" "type": "dimdoors:template",
"template": "dimdoors:lab/lab_hallway"
} }
}, },
"condition": { "condition": {

View file

@ -44,3 +44,10 @@ accessible class net/minecraft/world/level/levelgen/structure/structures/NetherF
accessible class net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces$PieceWeight accessible class net/minecraft/world/level/levelgen/structure/structures/NetherFortressPieces$PieceWeight
accessible method net/minecraft/world/level/block/DoorBlock playSound (Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Z)V accessible method net/minecraft/world/level/block/DoorBlock playSound (Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Z)V
accessible field net/minecraft/client/renderer/LevelRenderer skyBuffer Lcom/mojang/blaze3d/vertex/VertexBuffer;
accessible field net/minecraft/client/renderer/LevelRenderer SUN_LOCATION Lnet/minecraft/resources/ResourceLocation;
accessible field net/minecraft/client/renderer/LevelRenderer MOON_LOCATION Lnet/minecraft/resources/ResourceLocation;
accessible field net/minecraft/client/renderer/LevelRenderer starBuffer Lcom/mojang/blaze3d/vertex/VertexBuffer;
accessible field net/minecraft/client/renderer/LevelRenderer darkBuffer Lcom/mojang/blaze3d/vertex/VertexBuffer;

View file

@ -0,0 +1,19 @@
{
"type": "dimdoors:schematic",
"id": "lab/lab_01",
"builder": {
"type": "dimdoors:lazy_gen_pocket"
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:template",
"ids": [2],
"templateId": "dimdoors:lab/lab_experimentation"
}
]
}

View file

@ -0,0 +1,24 @@
{
"type": "dimdoors:schematic",
"id": "lab/lab_a0",
"builder": {
"type": "dimdoors:lazy_gen_pocket"
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:rift_data",
"ids": [2, 5],
"rift_data": "dimdoors:rift_data/default_dungeon"
},
{
"type": "dimdoors:relative",
"point_a": 3,
"point_b": 4
}
]
}

View file

@ -0,0 +1,26 @@
{
"type": "dimdoors:schematic",
"id": "lab/lab_experimentation",
"builder": {
"type": "dimdoors:lazy_gen_pocket",
"addons": [
{
"type": "dimdoors:sky",
"effect": "minecraft:overworld",
"dayTime": 6000
}
]
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:template",
"ids": [2],
"templateId": "dimdoors:lab/lab_a0"
}
]
}

View file

@ -0,0 +1,19 @@
{
"type": "dimdoors:schematic",
"id": "lab/lab_hallway",
"builder": {
"type": "dimdoors:lazy_gen_pocket"
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:template",
"ids": [2],
"templateId": "dimdoors:lab/reception"
}
]
}

View file

@ -0,0 +1,19 @@
{
"type": "dimdoors:schematic",
"id": "lab/left_lab_hallway",
"builder": {
"type": "dimdoors:lazy_gen_pocket"
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:template",
"ids": [2],
"templateId": "dimdoors:lab/lab_01"
}
]
}

View file

@ -0,0 +1,24 @@
{
"type": "dimdoors:schematic",
"id": "lab/reception",
"builder": {
"type": "dimdoors:lazy_gen_pocket"
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:template",
"ids": [2],
"templateId": "dimdoors:lab/right_lab_hallway"
},
{
"type": "dimdoors:rift_data",
"ids": [3],
"rift_data": "dimdoors:rift_data/default_dungeon"
}
]
}

View file

@ -0,0 +1,19 @@
{
"type": "dimdoors:schematic",
"id": "lab/right_lab_hallway",
"builder": {
"type": "dimdoors:lazy_gen_pocket"
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:template",
"ids": [2],
"templateId": "dimdoors:lab/left_lab_hallway"
}
]
}

View file

@ -0,0 +1,19 @@
{
"type": "dimdoors:schematic",
"id": "lab/telecommunications",
"builder": {
"type": "dimdoors:lazy_gen_pocket"
},
"modifiers": [
{
"type": "dimdoors:rift_data",
"ids": [1],
"rift_data": "dimdoors:rift_data/pocket_entrance"
},
{
"type": "dimdoors:template",
"ids": [2],
"templateId": "dimdoors:lab/lab_experimentation"
}
]
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/lab_01",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/lab_a0",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/lab_entrance",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/lab_experimentation",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/lab_hallway",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/left_lab_hallway",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/reception",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/right_lab_hallway",
"type": "dimdoors:id"
}

View file

@ -0,0 +1,4 @@
{
"id": "lab/telecommunications",
"type": "dimdoors:id"
}

View file

@ -84,7 +84,7 @@ public class RelativeBlockSample implements BlockGetter, LevelWriter {
this.entityContainer = HashBiMap.create(); this.entityContainer = HashBiMap.create();
for (CompoundTag entityNbt : schematic.getEntities()) { for (CompoundTag entityNbt : schematic.getEntities()) {
ListTag doubles = entityNbt.getList("Pos", Tag.TAG_DOUBLE); ListTag doubles = entityNbt.getList("Pos", Tag.TAG_DOUBLE);
this.entityContainer.put(entityNbt, new Vec3(doubles.getDouble(0), doubles.getDouble(1), doubles.getDouble(2))); this.entityContainer.put(entityNbt, new Vec3(doubles.getDouble(0), doubles.getDouble(1), doubles.getDouble(2)).subtract(Vec3.atLowerCornerOf(schematic.getOffset())));
} }
} }
@ -217,6 +217,15 @@ public class RelativeBlockSample implements BlockGetter, LevelWriter {
doubles.set(2, NbtOps.INSTANCE.createDouble(vec.z)); doubles.set(2, NbtOps.INSTANCE.createDouble(vec.z));
nbt.put("Pos", doubles); nbt.put("Pos", doubles);
if(nbt.contains("Id")) {
nbt.put("id", nbt.get("Id")); // boogers
nbt.remove("Id");
}
if(nbt.contains("UUID")) {
nbt.remove("UUID");
}
Entity entity = EntityType.create(nbt, world.getLevel()).orElseThrow(NoSuchElementException::new); Entity entity = EntityType.create(nbt, world.getLevel()).orElseThrow(NoSuchElementException::new);
world.getServer().execute(() -> { world.getServer().execute(() -> {
world.addFreshEntity(entity); world.addFreshEntity(entity);

View file

@ -3,10 +3,12 @@ package org.dimdev.dimdoors.util.schematic;
import dev.architectury.platform.Platform; import dev.architectury.platform.Platform;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Vec3i;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.DoubleTag; import net.minecraft.nbt.DoubleTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.NbtOps;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
@ -88,17 +90,20 @@ public final class SchematicPlacer {
return new int[0][0]; return new int[0][0];
} }
private static void placeEntities(int originX, int originY, int originZ, Schematic schematic, WorldGenLevel world) { private static void placeEntities(BlockPos origin, Schematic schematic, WorldGenLevel world) {
List<CompoundTag> entityNbts = schematic.getEntities(); List<CompoundTag> entityNbts = schematic.getEntities();
for (CompoundTag nbt : entityNbts) { for (CompoundTag nbt : entityNbts) {
ListTag nbtList = Objects.requireNonNull(nbt.getList("Pos", 6), "Entity in schematic \"" + schematic.getMetadata().name() + "\" did not have a Pos nbt list!"); ListTag nbtList = Objects.requireNonNull(nbt.getList("Pos", 6), "Entity in schematic \"" + schematic.getMetadata().name() + "\" did not have a Pos nbt list!");
SchematicPlacer.processPos(nbtList, originX, originY, originZ, nbt); SchematicPlacer.processPos(nbtList, origin, schematic.getOffset(), nbt);
EntityType<?> entityType = EntityType.by(nbt).orElseThrow(AssertionError::new); EntityType<?> entityType = EntityType.by(fixEntityId(nbt)).orElseThrow(AssertionError::new);
Entity e = entityType.create(world.getLevel()); Entity e = entityType.create(world.getLevel());
// TODO: fail with an exception // TODO: fail with an exception
if (e != null) { if (e != null) {
e.load(nbt); e.load(nbt);
e.getSelfAndPassengers().forEach(e1 -> System.out.println("Blep: " + e.getDisplayName().getString() + " " + world.addFreshEntity(e1)));
world.addFreshEntityWithPassengers(e); world.addFreshEntityWithPassengers(e);
} }
} }
@ -118,13 +123,13 @@ public final class SchematicPlacer {
return nbt; return nbt;
} }
private static void processPos(ListTag nbtList, int originX, int originY, int originZ, CompoundTag nbt) { private static void processPos(ListTag nbtList, BlockPos origin, Vec3i offset, CompoundTag nbt) {
double x = nbtList.getDouble(0); double x = nbtList.getDouble(0);
double y = nbtList.getDouble(1); double y = nbtList.getDouble(1);
double z = nbtList.getDouble(2); double z = nbtList.getDouble(2);
nbt.remove("Pos"); nbt.remove("Pos");
nbt.put("Pos", NbtOps.INSTANCE.createList(Stream.of(DoubleTag.valueOf(x + originX), nbt.put("Pos", NbtOps.INSTANCE.createList(Stream.of(DoubleTag.valueOf(x + origin.getX() - offset.getX()),
DoubleTag.valueOf(y + originY), DoubleTag.valueOf(y + origin.getY() - offset.getY()),
DoubleTag.valueOf(z + originZ)))); DoubleTag.valueOf(z + origin.getZ() - offset.getZ()))));
} }
} }

View file

@ -39,5 +39,72 @@ public class LootTableProvider extends FabricBlockLootTableProvider {
this.add(ModBlocks.UNRAVELLED_FABRIC.get(), (blockx) -> BlockLootSubProvider.createSilkTouchDispatchTable(blockx, applyExplosionCondition(blockx, LootItem.lootTableItem(ModItems.FRAYED_FILAMENTS.get()).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.1F, 0.14285715F, 0.25F, 1.0F)).otherwise(LootItem.lootTableItem(blockx))))); this.add(ModBlocks.UNRAVELLED_FABRIC.get(), (blockx) -> BlockLootSubProvider.createSilkTouchDispatchTable(blockx, applyExplosionCondition(blockx, LootItem.lootTableItem(ModItems.FRAYED_FILAMENTS.get()).when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, 0.1F, 0.14285715F, 0.25F, 1.0F)).otherwise(LootItem.lootTableItem(blockx)))));
this.dropSelf(ModBlocks.TESSELATING_LOOM.get()); this.dropSelf(ModBlocks.TESSELATING_LOOM.get());
this.dropSelf(ModBlocks.DRIFTWOOD_WOOD.get());
this.dropSelf(ModBlocks.DRIFTWOOD_LOG.get());
this.dropSelf(ModBlocks.DRIFTWOOD_PLANKS.get());
this.dropSelf(ModBlocks.DRIFTWOOD_LEAVES.get());
this.dropSelf(ModBlocks.DRIFTWOOD_SAPLING.get());
this.dropSelf(ModBlocks.DRIFTWOOD_FENCE.get());
this.dropSelf(ModBlocks.DRIFTWOOD_GATE.get());
this.dropSelf(ModBlocks.DRIFTWOOD_BUTTON.get());
this.dropSelf(ModBlocks.DRIFTWOOD_SLAB.get());
this.dropSelf(ModBlocks.DRIFTWOOD_STAIRS.get());
this.dropSelf(ModBlocks.DRIFTWOOD_DOOR.get());
this.dropSelf(ModBlocks.DRIFTWOOD_TRAPDOOR.get());
this.dropSelf(ModBlocks.AMALGAM_BLOCK.get());
this.dropSelf(ModBlocks.AMALGAM_DOOR.get());
this.dropSelf(ModBlocks.AMALGAM_TRAPDOOR.get());
this.dropSelf(ModBlocks.RUST.get());
this.dropSelf(ModBlocks.AMALGAM_SLAB.get());
this.dropSelf(ModBlocks.AMALGAM_STAIRS.get());
this.dropSelf(ModBlocks.AMALGAM_ORE.get());
this.dropSelf(ModBlocks.CLOD_ORE.get());
this.dropSelf(ModBlocks.CLOD_BLOCK.get());
this.dropSelf(ModBlocks.GRAVEL_FENCE.get());
this.dropSelf(ModBlocks.GRAVEL_BUTTON.get());
this.dropSelf(ModBlocks.GRAVEL_SLAB.get());
this.dropSelf(ModBlocks.GRAVEL_STAIRS.get());
this.dropSelf(ModBlocks.GRAVEL_WALL.get());
this.dropSelf(ModBlocks.DARK_SAND.get());
this.dropSelf(ModBlocks.DARK_SAND_FENCE.get());
this.dropSelf(ModBlocks.DARK_SAND_BUTTON.get());
this.dropSelf(ModBlocks.DARK_SAND_SLAB.get());
this.dropSelf(ModBlocks.DARK_SAND_STAIRS.get());
this.dropSelf(ModBlocks.DARK_SAND_WALL.get());
this.dropSelf(ModBlocks.CLAY_FENCE.get());
this.dropSelf(ModBlocks.CLAY_GATE.get());
this.dropSelf(ModBlocks.CLAY_BUTTON.get());
this.dropSelf(ModBlocks.CLAY_SLAB.get());
this.dropSelf(ModBlocks.CLAY_STAIRS.get());
this.dropSelf(ModBlocks.CLAY_WALL.get());
this.dropSelf(ModBlocks.MUD_FENCE.get());
this.dropSelf(ModBlocks.MUD_GATE.get());
this.dropSelf(ModBlocks.MUD_BUTTON.get());
this.dropSelf(ModBlocks.MUD_SLAB.get());
this.dropSelf(ModBlocks.MUD_STAIRS.get());
this.dropSelf(ModBlocks.UNRAVELED_FENCE.get());
this.dropSelf(ModBlocks.UNRAVELED_GATE.get());
this.dropSelf(ModBlocks.UNRAVELED_BUTTON.get());
this.dropSelf(ModBlocks.UNRAVELED_SLAB.get());
this.dropSelf(ModBlocks.UNRAVELED_STAIRS.get());
this.dropSelf(ModBlocks.DEEPSLATE_SLAB.get());
this.dropSelf(ModBlocks.DEEPSLATE_STAIRS.get());
this.dropSelf(ModBlocks.DEEPSLATE_WALL.get());
this.dropSelf(ModBlocks.RED_SAND_SLAB.get());
this.dropSelf(ModBlocks.RED_SAND_STAIRS.get());
this.dropSelf(ModBlocks.RED_SAND_WALL.get());
this.dropSelf(ModBlocks.SAND_SLAB.get());
this.dropSelf(ModBlocks.SAND_STAIRS.get());
this.dropSelf(ModBlocks.SAND_WALL.get());
this.dropSelf(ModBlocks.END_STONE_SLAB.get());
this.dropSelf(ModBlocks.END_STONE_STAIRS.get());
this.dropSelf(ModBlocks.END_STONE_WALL.get());
this.dropSelf(ModBlocks.NETHERRACK_FENCE.get());
this.dropSelf(ModBlocks.NETHERRACK_SLAB.get());
this.dropSelf(ModBlocks.NETHERRACK_STAIRS.get());
this.dropSelf(ModBlocks.NETHERRACK_WALL.get());
this.dropSelf(ModBlocks.UNRAVELED_SPIKE.get());
this.dropSelf(ModBlocks.GRITTY_STONE.get());
} }
} }

View file

@ -4,7 +4,7 @@ minecraft_version=1.20.1
enabled_platforms=fabric,forge enabled_platforms=fabric,forge
archives_base_name=dimdoors archives_base_name=dimdoors
mod_version=5.3.2 mod_version=5.3.3
maven_group=org.dimdev maven_group=org.dimdev
architectury_version=9.1.12 architectury_version=9.1.12