This commit is contained in:
Waterpicker 2023-08-06 09:41:30 -05:00
parent 125b00cbed
commit 51f63ca20a
9 changed files with 79 additions and 183 deletions

View file

@ -12,28 +12,28 @@ import org.dimdev.dimdoors.api.util.math.MathUtil;
import org.dimdev.dimdoors.entity.limbo.LimboExitReason;
import org.dimdev.dimdoors.fluid.ModFluids;
import org.dimdev.dimdoors.rift.targets.EscapeTarget;
public class EternalFluidBlock extends ArchitecturyLiquidBlock {
private static final EntityTarget TARGET = new EscapeTarget(true);
public EternalFluidBlock(Properties settings) {
super(ModFluids.ETERNAL_FLUID, settings);
}
@Override
public void entityInside(BlockState blockState, Level level, BlockPos blockPos, Entity entity) {
if (level.isClientSide()) {
return;
}
try {
if (TARGET.receiveEntity(entity, Vec3.ZERO, MathUtil.entityEulerAngle(entity), entity.getDeltaMovement())) {
if (entity instanceof Player) {
LimboExitReason.ETERNAL_FLUID.broadcast((Player) entity);
}
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
//public class EternalFluidBlock extends ArchitecturyLiquidBlock {
// private static final EntityTarget TARGET = new EscapeTarget(true);
//
// public EternalFluidBlock(Properties settings) {
// super(ModFluids.ETERNAL_FLUID, settings);
// }
//
//
// @Override
// public void entityInside(BlockState blockState, Level level, BlockPos blockPos, Entity entity) {
// if (level.isClientSide()) {
// return;
// }
//
// try {
// if (TARGET.receiveEntity(entity, Vec3.ZERO, MathUtil.entityEulerAngle(entity), entity.getDeltaMovement())) {
// if (entity instanceof Player) {
// LimboExitReason.ETERNAL_FLUID.broadcast((Player) entity);
// }
// }
// } catch (Throwable e) {
// e.printStackTrace();
// }
// }
//}

View file

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

View file

@ -1,5 +1,7 @@
package org.dimdev.dimdoors.fluid;
import dev.architectury.core.fluid.ArchitecturyFlowingFluid;
import dev.architectury.core.fluid.ArchitecturyFluidAttributes;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.core.BlockPos;
@ -22,69 +24,33 @@ import org.dimdev.dimdoors.block.ModBlocks;
import org.dimdev.dimdoors.item.ModItems;
public abstract class EternalFluid extends FlowingFluid {
@Override
public Fluid getFlowing() {
return ModFluids.FLOWING_ETERNAL_FLUID.get();
}
@Override
public FluidState getSource(boolean bl) {
return ModFluids.ETERNAL_FLUID.get().defaultFluidState();
}
@Override
public Item getBucket() {
return ModItems.ETERNAL_FLUID_BUCKET.get();
}
public static interface EternalFluidDetails {
//Current Methods - TODO: Upgrade architectury's api to make not needed anymore.
default void randomTick(Level level, BlockPos blockPos, FluidState fluidState, RandomSource randomSource) {}
@Override
protected void randomTick(Level level, BlockPos blockPos, FluidState fluidState, RandomSource randomSource) {
}
@Override
@Environment(EnvType.CLIENT)
protected void animateTick(Level level, BlockPos blockPos, FluidState fluidState, RandomSource randomSource) {
default void animateTick(Level level, BlockPos blockPos, FluidState fluidState, RandomSource randomSource) {}
}
default void beforeDestroyingBlock(LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState) {}
@Override
protected void beforeDestroyingBlock(LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState) {
}
@Override
protected int getDropOff(LevelReader levelReader) {
//TODO: Submit PR to architectury to use LevelReader
default int getDropOff(LevelReader levelReader) {
return levelReader.dimensionType().ultraWarm() ? 4 : 2;
}
@Override
protected BlockState createLegacyBlock(FluidState fluidState) {
return ModBlocks.ETERNAL_FLUID.get().defaultBlockState().setValue(LEVEL, getLegacyLevel(fluidState));
}
@Override
public boolean isSame(Fluid fluid) {
return fluid == ModFluids.ETERNAL_FLUID || fluid == ModFluids.FLOWING_ETERNAL_FLUID;
}
@Override
protected int getSlopeFindDistance(LevelReader levelReader) {
//TODO: Submit PR to architectury to use LevelReader
default int getSlopeFindDistance(LevelReader levelReader) {
return levelReader.dimensionType().ultraWarm() ? 1 : 2;
}
@Override
protected boolean canBeReplacedWith(FluidState fluidState, BlockGetter blockGetter, BlockPos blockPos, Fluid fluid, Direction direction) {
return fluidState.getHeight(blockGetter, blockPos) >= 0.44444445F && fluid.isSame(Fluids.WATER);
}
@Override
public int getTickDelay(LevelReader levelReader) {
//TODO: Submit PR to architectury to use LevelReader
default int getTickDelay(LevelReader levelReader) {
return levelReader.dimensionType().ultraWarm() ? 10 : 30;
}
@Override
protected int getSpreadDelay(Level level, BlockPos blockPos, FluidState fluidState, FluidState fluidState2) {
default int getSpreadDelay(Level level, BlockPos blockPos, FluidState fluidState, FluidState fluidState2) {
int tickDelay = this.getTickDelay(level);
if (!fluidState.isEmpty() && !fluidState2.isEmpty() && !fluidState.getValue(FALLING) && !fluidState2.getValue(FALLING) && fluidState2.getHeight(level, blockPos) > fluidState.getHeight(level, blockPos) && level.getRandom().nextInt(4) != 0) {
@ -94,13 +60,7 @@ public abstract class EternalFluid extends FlowingFluid {
return tickDelay;
}
@Override
protected boolean canConvertToSource(Level level) {
return false;
}
@Override
protected void spreadTo(LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState, Direction direction, FluidState fluidState) {
default void spreadTo(LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState, Direction direction, FluidState fluidState) {
if (direction == Direction.DOWN) {
if (levelAccessor.getFluidState(blockPos).is(FluidTags.WATER)) {
if (blockState.getBlock() instanceof LiquidBlock) {
@ -111,57 +71,13 @@ public abstract class EternalFluid extends FlowingFluid {
}
}
super.spreadTo(levelAccessor, blockPos, blockState, direction, fluidState);
self().spreadTo(levelAccessor, blockPos, blockState, direction, fluidState);
}
@Override
protected boolean isRandomlyTicking() {
EternalFluidDetails self();
default boolean isRandomlyTicking() {
return true;
}
@Override
protected float getExplosionResistance() {
return 100000;
}
public static class Flowing extends EternalFluid {
@Override
protected void createFluidStateDefinition(StateDefinition.Builder<Fluid, FluidState> builder) {
builder.add(LEVEL);
}
@Override
public Fluid getSource() {
return null;
}
@Override
public boolean isSource(FluidState fluidState) {
return false;
}
@Override
public int getAmount(FluidState fluidState) {
return fluidState.getValue(LEVEL);
}
}
public static class Still extends EternalFluid {
@Override
public Fluid getSource() {
return ModFluids.ETERNAL_FLUID.get().defaultFluidState().getType();
}
@Override
public boolean isSource(FluidState fluidState) {
return false;
}
@Override
public int getAmount(FluidState fluidState) {
return 8;
}
}
}

View file

@ -17,12 +17,22 @@ import java.util.function.Supplier;
public class ModFluids {
public static final DeferredRegister<Fluid> FLUIDS = DeferredRegister.create(DimensionalDoors.MOD_ID, Registries.FLUID);
public static final ArchitecturyFluidAttributes ETERNAL_FLUID_ATTRIBUTES = SimpleArchitecturyFluidAttributes.ofSupplier(() -> ModFluids.FLOWING_ETERNAL_FLUID, () -> ModFluids.ETERNAL_FLUID).block(ModBlocks.ETERNAL_FLUID).bucketItem(ModItems.ETERNAL_FLUID_BUCKET).explosionResistance(100000)
public static final ArchitecturyFluidAttributes ETERNAL_FLUID_ATTRIBUTES = SimpleArchitecturyFluidAttributes
.ofSupplier(() -> ModFluids.FLOWING_ETERNAL_FLUID, () -> ModFluids.ETERNAL_FLUID).block(ModBlocks.ETERNAL_FLUID)
.bucketItem(ModItems.ETERNAL_FLUID_BUCKET).explosionResistance(100000)
.sourceTexture(DimensionalDoors.id("block/eternal_fluid_still"))
.flowingTexture(DimensionalDoors.id("block/eternal_fluid_flow"));
public static final RegistrySupplier<? extends Fluid> FLOWING_ETERNAL_FLUID = register("flowing_eternal_fluid", () -> new ArchitecturyFlowingFluid.Flowing(ModFluids.ETERNAL_FLUID_ATTRIBUTES));
public static final RegistrySupplier<? extends FlowingFluid> ETERNAL_FLUID = register("eternal_fluid", () -> new ArchitecturyFlowingFluid.Source(ModFluids.ETERNAL_FLUID_ATTRIBUTES));
public static final ArchitecturyFluidAttributes LEAK_ATTRIBUTES = SimpleArchitecturyFluidAttributes.ofSupplier(() -> ModFluids.FLOWING_LEAK, () -> ModFluids.LEAK).block(ModBlocks.LEAK).bucketItem(ModItems.ETERNAL_FLUID_BUCKET).convertToSource(true)
.sourceTexture(DimensionalDoors.id("block/leak_still"))
.flowingTexture(DimensionalDoors.id("block/leak_flow"));
public static final RegistrySupplier<? extends Fluid> FLOWING_LEAK = register("flowing_leak", () -> new ArchitecturyFlowingFluid.Flowing(ModFluids.LEAK_ATTRIBUTES));
public static final RegistrySupplier<? extends FlowingFluid> LEAK = register("leak", () -> new ArchitecturyFlowingFluid.Source(ModFluids.LEAK_ATTRIBUTES));
private static <T extends Fluid> RegistrySupplier<? extends T> register(String string, Supplier<T> fluid) {
return FLUIDS.register(DimensionalDoors.id(string), fluid);
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

View file

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

View file

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