Skip to content

Commit

Permalink
switched FluidPlatformUtils to a service
Browse files Browse the repository at this point in the history
  • Loading branch information
Trinsdar committed Mar 7, 2024
1 parent 0c452e8 commit 37d5d62
Show file tree
Hide file tree
Showing 9 changed files with 56 additions and 75 deletions.
69 changes: 23 additions & 46 deletions common/src/main/java/tesseract/FluidPlatformUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,58 +15,35 @@
import net.minecraft.world.level.material.Fluid;
import org.jetbrains.annotations.NotNull;

import java.util.ServiceLoader;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class FluidPlatformUtils {
public static FluidHolder createFluidStack(Fluid fluid, long amount){
public interface FluidPlatformUtils {
FluidPlatformUtils INSTANCE = ServiceLoader.load(FluidPlatformUtils.class).findFirst().orElseThrow(() -> new IllegalStateException("No implementation of FluidPlatformUtils found"));
//public static FluidPlatformUtils INSTANCE = new FluidPlatformUtils();

static FluidHolder createFluidStack(Fluid fluid, long amount){
return FluidHooks.newFluidHolder(fluid,amount, null);
}

@ExpectPlatform
public static ResourceLocation getStillTexture(Fluid fluid){
throw new AssertionError();
}
ResourceLocation getStillTexture(Fluid fluid);

@ExpectPlatform
public static ResourceLocation getFlowingTexture(Fluid fluid){
throw new AssertionError();
}
ResourceLocation getFlowingTexture(Fluid fluid);

@ExpectPlatform
public static ResourceLocation getFluidId(Fluid fluid){
throw new AssertionError();
}
ResourceLocation getFluidId(Fluid fluid);

@ExpectPlatform
public static int getFluidTemperature(Fluid fluid){
throw new AssertionError();
}
int getFluidTemperature(Fluid fluid);

@ExpectPlatform
public static int getFluidDensity(Fluid fluid){
throw new AssertionError();
}
int getFluidDensity(Fluid fluid);

@ExpectPlatform
public static boolean isFluidGaseous(Fluid fluid){
throw new AssertionError();
}
boolean isFluidGaseous(Fluid fluid);

@ExpectPlatform
public static int getFluidColor(Fluid fluid){
throw new AssertionError();
}
int getFluidColor(Fluid fluid);

@ExpectPlatform
public static SoundEvent getFluidSound(Fluid fluid, boolean fill){
throw new AssertionError();
}
SoundEvent getFluidSound(Fluid fluid, boolean fill);

@ExpectPlatform
public static Component getFluidDisplayName(FluidHolder fluid){
throw new AssertionError();
}
Component getFluidDisplayName(FluidHolder fluid);

/**
* Fill a destination fluid handler from a source fluid handler with a max amount.
Expand All @@ -80,7 +57,7 @@ public static Component getFluidDisplayName(FluidHolder fluid){
* @return the fluidStack that was transferred from the source to the destination. null on failure.
*/
@NotNull
public static FluidHolder tryFluidTransfer(PlatformFluidHandler fluidDestination, PlatformFluidHandler fluidSource, long maxAmount, boolean doTransfer) {
default FluidHolder tryFluidTransfer(PlatformFluidHandler fluidDestination, PlatformFluidHandler fluidSource, long maxAmount, boolean doTransfer) {
for (int i = 0; i < fluidSource.getTankAmount(); i++) {
FluidHolder fluid = fluidSource.getFluidInTank(i);
FluidHolder transfer = tryFluidTransfer(fluidDestination, fluidSource, fluid.copyWithAmount(Math.min(fluid.getFluidAmount(), maxAmount)), doTransfer);
Expand All @@ -101,7 +78,7 @@ public static FluidHolder tryFluidTransfer(PlatformFluidHandler fluidDestination
* @return the FluidHolder that was transferred from the source to the destination. null on failure.
*/
@NotNull
public static FluidHolder tryFluidTransfer(PlatformFluidHandler fluidDestination, PlatformFluidHandler fluidSource, FluidHolder resource, boolean doTransfer)
default FluidHolder tryFluidTransfer(PlatformFluidHandler fluidDestination, PlatformFluidHandler fluidSource, FluidHolder resource, boolean doTransfer)
{
FluidHolder drainable = fluidSource.extractFluid(resource, true);
if (!drainable.isEmpty() && resource.matches(drainable))
Expand Down Expand Up @@ -142,15 +119,15 @@ private static FluidHolder tryFluidTransfer_Internal(PlatformFluidHandler fluidD
return FluidHooks.emptyFluid();
}

public static boolean fillItemFromContainer(ItemStack stack, PlatformFluidHandler handler, Consumer<ItemStack> consumer){
default boolean fillItemFromContainer(ItemStack stack, PlatformFluidHandler handler, Consumer<ItemStack> consumer){
return fillItemFromContainer(stack, handler, s -> true, consumer);
}

public static boolean emptyItemIntoContainer(ItemStack stack, PlatformFluidHandler handler, Consumer<ItemStack> consumer){
default boolean emptyItemIntoContainer(ItemStack stack, PlatformFluidHandler handler, Consumer<ItemStack> consumer){
return emptyItemIntoContainer(stack, handler, s -> true, consumer);
}

public static boolean fillItemFromContainer(ItemStack stack, PlatformFluidHandler handler, Predicate<ItemStack> tester, Consumer<ItemStack> consumer){
default boolean fillItemFromContainer(ItemStack stack, PlatformFluidHandler handler, Predicate<ItemStack> tester, Consumer<ItemStack> consumer){
PlatformFluidItemHandler itemHandler = FluidHooks.safeGetItemFluidManager(stack.copy()).orElse(null);
if (itemHandler == null) return false;
for (int i = 0; i < handler.getTankAmount(); i++) {
Expand All @@ -172,7 +149,7 @@ public static boolean fillItemFromContainer(ItemStack stack, PlatformFluidHandle
return false;
}

public static boolean emptyItemIntoContainer(ItemStack stack, PlatformFluidHandler handler, Predicate<ItemStack> tester, Consumer<ItemStack> consumer){
default boolean emptyItemIntoContainer(ItemStack stack, PlatformFluidHandler handler, Predicate<ItemStack> tester, Consumer<ItemStack> consumer){
PlatformFluidItemHandler itemHandler = FluidHooks.safeGetItemFluidManager(stack.copy()).orElse(null);
if (itemHandler == null) return false;
for (int i = 0; i < itemHandler.getTankAmount(); i++) {
Expand All @@ -196,7 +173,7 @@ public static boolean emptyItemIntoContainer(ItemStack stack, PlatformFluidHandl
return false;
}

public static void writeToPacket(FriendlyByteBuf buffer, FluidHolder holder) {
default void writeToPacket(FriendlyByteBuf buffer, FluidHolder holder) {
if (holder.isEmpty()) {
buffer.writeBoolean(false);
} else {
Expand All @@ -207,7 +184,7 @@ public static void writeToPacket(FriendlyByteBuf buffer, FluidHolder holder) {
}
}

public static FluidHolder readFromPacket(FriendlyByteBuf buffer) {
default FluidHolder readFromPacket(FriendlyByteBuf buffer) {
if (!buffer.readBoolean()) return FluidHooks.emptyFluid();
Fluid fluid = Registry.FLUID.byId(buffer.readVarInt());
long amount = buffer.readVarLong();
Expand Down
2 changes: 1 addition & 1 deletion common/src/main/java/tesseract/TesseractCapUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import java.util.ServiceLoader;

public interface TesseractCapUtils {
TesseractCapUtils INSTANCE = ServiceLoader.load(TesseractCapUtils.class).findFirst().orElseThrow(() -> new IllegalStateException("No implementation of TesseractPlatformUtils found"));
TesseractCapUtils INSTANCE = ServiceLoader.load(TesseractCapUtils.class).findFirst().orElseThrow(() -> new IllegalStateException("No implementation of TesseractCapUtils found"));
//public static final TesseractCapUtils INSTANCE = new TesseractCapUtils();
Optional<IEnergyHandlerItem> getEnergyHandlerItem(ItemStack stack);

Expand Down
4 changes: 2 additions & 2 deletions common/src/main/java/tesseract/api/fluid/FluidController.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,9 +172,9 @@ public void insert(long producerPos, Direction side, FluidTransaction transactio
}
}
public void commitFluid(FluidConsumer consumer, FluidHolder stack) {
int temperature = FluidPlatformUtils.getFluidTemperature(stack.getFluid());
int temperature = FluidPlatformUtils.INSTANCE.getFluidTemperature(stack.getFluid());
long amount = stack.getFluidAmount();
boolean isGaseous = FluidPlatformUtils.isFluidGaseous(stack.getFluid());
boolean isGaseous = FluidPlatformUtils.INSTANCE.isFluidGaseous(stack.getFluid());
boolean cantHandle = !consumer.canHandle(temperature, isGaseous);
if (!cantHandle) {
for (Long2ObjectMap.Entry<IFluidPipe> p : consumer.getFull().long2ObjectEntrySet()) {
Expand Down
10 changes: 5 additions & 5 deletions common/src/main/java/tesseract/api/fluid/PipeFluidHolder.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,20 +103,20 @@ public SetHolder(final Fluid fluid, long added) {

@Override
public int hashCode() {
return FluidPlatformUtils.getFluidId(fluid).hashCode();
return FluidPlatformUtils.INSTANCE.getFluidId(fluid).hashCode();
}

@Override
public boolean equals(Object obj) {
ResourceLocation compare = FluidPlatformUtils.getFluidId(fluid);
ResourceLocation compare = FluidPlatformUtils.INSTANCE.getFluidId(fluid);
if (obj instanceof SetHolder s) {
return FluidPlatformUtils.getFluidId(s.fluid).equals(compare);
return FluidPlatformUtils.INSTANCE.getFluidId(s.fluid).equals(compare);
}
if (obj instanceof Fluid f) {
return FluidPlatformUtils.getFluidId(f).equals(compare);
return FluidPlatformUtils.INSTANCE.getFluidId(f).equals(compare);
}
if (obj instanceof earth.terrarium.botarium.common.fluid.base.FluidHolder s) {
return FluidPlatformUtils.getFluidId(s.getFluid()).equals(compare);
return FluidPlatformUtils.INSTANCE.getFluidId(s.getFluid()).equals(compare);
}
if (obj instanceof ResourceLocation r) {
return r.equals(compare);
Expand Down
2 changes: 1 addition & 1 deletion common/src/main/java/tesseract/controller/Fluid.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public void onPipeOverCapacity(Level w, long pos, long capacity, FluidHolder flu

@Override
public void onPipeOverTemp(Level w, long pos, int temperature) {
w.setBlockAndUpdate(BlockPos.of(pos), temperature >= FluidPlatformUtils.getFluidTemperature(Fluids.LAVA) ? Blocks.LAVA.defaultBlockState() : Blocks.FIRE.defaultBlockState());
w.setBlockAndUpdate(BlockPos.of(pos), temperature >= FluidPlatformUtils.INSTANCE.getFluidTemperature(Fluids.LAVA) ? Blocks.LAVA.defaultBlockState() : Blocks.FIRE.defaultBlockState());
}

@Override
Expand Down
21 changes: 11 additions & 10 deletions fabric/src/main/java/tesseract/fabric/FluidPlatformUtilsImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.level.material.Fluid;
import tesseract.FluidPlatformUtils;

public class FluidPlatformUtilsImpl {
public class FluidPlatformUtilsImpl implements FluidPlatformUtils {

public static ResourceLocation getStillTexture(Fluid fluid){
public ResourceLocation getStillTexture(Fluid fluid){
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
FluidVariant variant = FluidVariant.of(fluid);
TextureAtlasSprite[] sprites = FluidVariantRendering.getSprites(variant);
Expand All @@ -26,7 +27,7 @@ public static ResourceLocation getStillTexture(Fluid fluid){
return new ResourceLocation("block/water_still");
}

public static ResourceLocation getFlowingTexture(Fluid fluid){
public ResourceLocation getFlowingTexture(Fluid fluid){
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
FluidVariant variant = FluidVariant.of(fluid);
TextureAtlasSprite[] sprites = FluidVariantRendering.getSprites(variant);
Expand All @@ -35,35 +36,35 @@ public static ResourceLocation getFlowingTexture(Fluid fluid){
}
return new ResourceLocation("block/water_still");
}
public static ResourceLocation getFluidId(Fluid fluid){
public ResourceLocation getFluidId(Fluid fluid){
return Registry.FLUID.getKey(fluid);
}

public static int getFluidTemperature(Fluid fluid){
public int getFluidTemperature(Fluid fluid){
return FluidVariantAttributes.getTemperature(FluidVariant.of(fluid));
}

public static int getFluidDensity(Fluid fluid){
public int getFluidDensity(Fluid fluid){
//cause fabric sucks and doesn't have a good fluid api
return 1000;
}

public static boolean isFluidGaseous(Fluid fluid){
public boolean isFluidGaseous(Fluid fluid){
return FluidVariantAttributes.isLighterThanAir(FluidVariant.of(fluid));
}

public static int getFluidColor(Fluid fluid){
public int getFluidColor(Fluid fluid){
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
return FluidVariantRendering.getColor(FluidVariant.of(fluid));
}
return -1;
}

public static SoundEvent getFluidSound(Fluid fluid, boolean fill){
public SoundEvent getFluidSound(Fluid fluid, boolean fill){
return fill ? FluidVariantAttributes.getFillSound(FluidVariant.of(fluid)) : FluidVariantAttributes.getEmptySound(FluidVariant.of(fluid));
}

public static Component getFluidDisplayName(FluidHolder fluid){
public Component getFluidDisplayName(FluidHolder fluid){
return FluidVariantAttributes.getName(FluidVariant.of(fluid.getFluid(), fluid.getCompound()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tesseract.fabric.FluidPlatformUtilsImpl
21 changes: 11 additions & 10 deletions forge/src/main/java/tesseract/forge/FluidPlatformUtilsImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,41 +6,42 @@
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.level.material.Fluid;
import tesseract.FluidPlatformUtils;

public class FluidPlatformUtilsImpl {
public class FluidPlatformUtilsImpl implements FluidPlatformUtils {

public static ResourceLocation getStillTexture(Fluid fluid){
public ResourceLocation getStillTexture(Fluid fluid){
return fluid.getAttributes().getStillTexture();
}

public static ResourceLocation getFlowingTexture(Fluid fluid){
public ResourceLocation getFlowingTexture(Fluid fluid){
return fluid.getAttributes().getFlowingTexture();
}
public static ResourceLocation getFluidId(Fluid fluid){
public ResourceLocation getFluidId(Fluid fluid){
return fluid.getRegistryName();
}

public static int getFluidTemperature(Fluid fluid){
public int getFluidTemperature(Fluid fluid){
return fluid.getAttributes().getTemperature();
}

public static int getFluidDensity(Fluid fluid){
public int getFluidDensity(Fluid fluid){
return fluid.getAttributes().getDensity();
}

public static boolean isFluidGaseous(Fluid fluid){
public boolean isFluidGaseous(Fluid fluid){
return fluid.getAttributes().isGaseous();
}

public static int getFluidColor(Fluid fluid){
public int getFluidColor(Fluid fluid){
return fluid.getAttributes().getColor();
}

public static SoundEvent getFluidSound(Fluid fluid, boolean fill){
public SoundEvent getFluidSound(Fluid fluid, boolean fill){
return fill ? fluid.getAttributes().getFillSound() : fluid.getAttributes().getEmptySound();
}

public static Component getFluidDisplayName(FluidHolder fluid){
public Component getFluidDisplayName(FluidHolder fluid){
return fluid.getFluid().getAttributes().getDisplayName(ForgeFluidHolder.toStack(fluid));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
tesseract.forge.FluidPlatformUtilsImpl

0 comments on commit 37d5d62

Please sign in to comment.