diff --git a/gradle.properties b/gradle.properties index 9dfa441..0e35cc3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=1.3.0 +mod_version=1.3.1 minecraft_version=1.14.4_1.15.X forge_version=1.14.4-28.1.0 diff --git a/src/main/java/cech12/ceramicbucket/item/CeramicMilkBucketItem.java b/src/main/java/cech12/ceramicbucket/item/CeramicMilkBucketItem.java index e102d82..62ae7c8 100644 --- a/src/main/java/cech12/ceramicbucket/item/CeramicMilkBucketItem.java +++ b/src/main/java/cech12/ceramicbucket/item/CeramicMilkBucketItem.java @@ -125,4 +125,11 @@ public ITextComponent getDisplayName(@Nonnull ItemStack stack) { return new TranslationTextComponent("item.ceramicbucket.ceramic_milk_bucket"); } + @Override + public boolean hasContainerItem(ItemStack stack) { + //super method checks if a fluid is inside. Milk does not have to be a fluid. + Fluid fluid = this.getFluid(stack); + return fluid == Fluids.EMPTY || !CeramicBucketUtils.isFluidTooHotForCeramicBucket(fluid); + } + } diff --git a/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketFluidHandler.java b/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketFluidHandler.java index d898608..5530323 100644 --- a/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketFluidHandler.java +++ b/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketFluidHandler.java @@ -1,7 +1,7 @@ package cech12.ceramicbucket.item; import cech12.ceramicbucket.api.item.CeramicBucketItems; -import cech12.ceramicbucket.config.Config; +import cech12.ceramicbucket.util.CeramicBucketUtils; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; @@ -20,9 +20,8 @@ public FilledCeramicBucketFluidHandler(@Nonnull ItemStack container) { @Override protected void setContainerToEmpty() { - int minBreakTemperature = Config.CERAMIC_BUCKET_BREAK_TEMPERATURE.getValue(); - if (minBreakTemperature >= 0 && FluidUtil.getFluidContained(this.container).orElse(FluidStack.EMPTY).getFluid().getAttributes().getTemperature() >= minBreakTemperature) { - //contains hot fluid (configurable temperature, std. 1000) like lava (1300)? no empty bucket remains. + if (CeramicBucketUtils.isFluidTooHotForCeramicBucket(FluidUtil.getFluidContained(this.container).orElse(FluidStack.EMPTY).getFluid())) { + //contains hot fluid (configurable temperature) bucket is removed this.container = ItemStack.EMPTY; } else { //else empty bucket diff --git a/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketItem.java b/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketItem.java index 5a32650..d752b22 100644 --- a/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketItem.java +++ b/src/main/java/cech12/ceramicbucket/item/FilledCeramicBucketItem.java @@ -9,12 +9,14 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.AbstractFurnaceTileEntity; import net.minecraft.util.NonNullList; import net.minecraft.util.Util; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TranslationTextComponent; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.fluids.FluidAttributes; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.templates.FluidHandlerItemStack; @@ -95,4 +97,35 @@ public ITextComponent getDisplayName(@Nonnull ItemStack stack) { } } + @Override + public int getBurnTime(ItemStack itemStack) { + //get burn time of normal bucket + Fluid fluid = this.getFluid(itemStack); + if (fluid != Fluids.EMPTY) { + //all fluids have their burn time in their bucket item. + //get the burn time via ForgeEventFactory.getItemBurnTime to let other mods change burn times of buckets of vanilla and other fluids. + Item bucket = fluid.getFilledBucket(); + ItemStack bucketStack = new ItemStack(bucket); + int burnTime = bucketStack.getBurnTime(); + return ForgeEventFactory.getItemBurnTime(bucketStack, burnTime == -1 ? AbstractFurnaceTileEntity.getBurnTimes().getOrDefault(bucket, 0) : burnTime); + } + return super.getBurnTime(itemStack); + } + + @Override + public boolean hasContainerItem(ItemStack stack) { + //for using a filled bucket as fuel or in crafting recipes, an empty bucket should remain + Fluid fluid = this.getFluid(stack); + return fluid != Fluids.EMPTY && !CeramicBucketUtils.isFluidTooHotForCeramicBucket(fluid); + } + + @Override + public ItemStack getContainerItem(ItemStack itemStack) { + //for using a filled bucket as fuel or in crafting recipes, an empty bucket should remain + if (this.hasContainerItem(itemStack)) { + return new ItemStack(CeramicBucketItems.CERAMIC_BUCKET); + } + return null; + } + } diff --git a/src/main/java/cech12/ceramicbucket/util/CeramicBucketUtils.java b/src/main/java/cech12/ceramicbucket/util/CeramicBucketUtils.java index bdddaae..c7e933c 100644 --- a/src/main/java/cech12/ceramicbucket/util/CeramicBucketUtils.java +++ b/src/main/java/cech12/ceramicbucket/util/CeramicBucketUtils.java @@ -1,6 +1,7 @@ package cech12.ceramicbucket.util; import cech12.ceramicbucket.api.item.CeramicBucketItems; +import cech12.ceramicbucket.config.Config; import cech12.ceramicbucket.item.CeramicMilkBucketItem; import cech12.ceramicbucket.item.FilledCeramicBucketItem; import net.minecraft.fluid.Fluid; @@ -42,6 +43,18 @@ public static boolean isMilkFluid(@Nonnull Fluid fluid) { return false; } + /** + * Checks if a given fluid is too hot for a ceramic bucket. + * "too hot" temperature is configurable (std. 1000) (lava: 1300) + * @param fluid fluid that should be checked + * @return true if the temperature of the fluid is more than the break temperature, else false + */ + public static boolean isFluidTooHotForCeramicBucket(@Nonnull Fluid fluid) { + int minBreakTemperature = Config.CERAMIC_BUCKET_BREAK_TEMPERATURE.getValue(); + return minBreakTemperature >= 0 && fluid.getAttributes().getTemperature() >= minBreakTemperature; + } + + public static ItemStack getFilledCeramicBucket(Fluid fluid) { if (CeramicBucketUtils.isMilkFluid(fluid)) { return ((CeramicMilkBucketItem) CeramicBucketItems.CERAMIC_MILK_BUCKET).getFilledInstance(fluid);