Fluids
This commit is contained in:
parent
125b00cbed
commit
51f63ca20a
9 changed files with 79 additions and 183 deletions
|
@ -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();
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 |
|
@ -1,12 +0,0 @@
|
|||
[
|
||||
{
|
||||
"data": {
|
||||
"destination": {
|
||||
"type": "dimdoors:public_pocket"
|
||||
}
|
||||
},
|
||||
"condition": {
|
||||
"type": "dimdoors:always_true"
|
||||
}
|
||||
}
|
||||
]
|
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue