Skip to content

Commit

Permalink
- a ceramic bucket filled with lava can now be used as fuel in furnac…
Browse files Browse the repository at this point in the history
…es. #20

- it also works for other fluids that have a burn time for their buckets
  • Loading branch information
cech12 committed Sep 8, 2020
1 parent cd9beb3 commit f0ed37c
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 5 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

}
13 changes: 13 additions & 0 deletions src/main/java/cech12/ceramicbucket/util/CeramicBucketUtils.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit f0ed37c

Please sign in to comment.