mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-24 16:18:33 +01:00
Added the ability for fluid collectors to collect water and lava from filled cauldrons. Closes #1440
This commit is contained in:
parent
632c34739a
commit
ea1a072c72
4 changed files with 42 additions and 10 deletions
|
@ -2,6 +2,7 @@
|
||||||
* Fixed Farmer not playing well with non-vanilla farmland.
|
* Fixed Farmer not playing well with non-vanilla farmland.
|
||||||
* Added the ability to change the farmers work area with a compass.
|
* Added the ability to change the farmers work area with a compass.
|
||||||
* Make blocks still drop items even when broken incorrectly.
|
* Make blocks still drop items even when broken incorrectly.
|
||||||
|
* Added the ability for fluid collectors to collect water and lava from filled cauldrons.
|
||||||
|
|
||||||
# 1.3.10+mc1.21.1
|
# 1.3.10+mc1.21.1
|
||||||
* Fixed Fluid placer not being harvestable.
|
* Fixed Fluid placer not being harvestable.
|
||||||
|
|
|
@ -15,6 +15,7 @@ import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.item.crafting.Ingredient;
|
import net.minecraft.world.item.crafting.Ingredient;
|
||||||
|
import net.neoforged.neoforge.common.Tags;
|
||||||
import net.neoforged.neoforge.fluids.FluidStack;
|
import net.neoforged.neoforge.fluids.FluidStack;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
@ -38,9 +39,10 @@ public class FuelRecipeGenerator extends RecipeProvider {
|
||||||
addSolid(recipeOutput, "stick", Items.STICK, 2000, 100);
|
addSolid(recipeOutput, "stick", Items.STICK, 2000, 100);
|
||||||
addSolid(recipeOutput, "tiny-coal", ActuallyTags.Items.TINY_COALS, 4000, 200);
|
addSolid(recipeOutput, "tiny-coal", ActuallyTags.Items.TINY_COALS, 4000, 200);
|
||||||
addSolid(recipeOutput, "charcoal", Items.CHARCOAL, 32000, 1600);
|
addSolid(recipeOutput, "charcoal", Items.CHARCOAL, 32000, 1600);
|
||||||
addSolid(recipeOutput, "coal-block", Items.COAL_BLOCK, 320000, 16000);
|
addSolid(recipeOutput, "coal-block", Tags.Items.STORAGE_BLOCKS_COAL, 320000, 16000);
|
||||||
addSolid(recipeOutput, "lava", Items.LAVA_BUCKET, 400000, 20000);
|
addSolid(recipeOutput, "lava", Items.LAVA_BUCKET, 400000, 20000);
|
||||||
|
|
||||||
|
|
||||||
recipeOutput.accept(ActuallyAdditions.modLoc("liquid_fuel/canola_oil"), new LiquidFuelRecipe(
|
recipeOutput.accept(ActuallyAdditions.modLoc("liquid_fuel/canola_oil"), new LiquidFuelRecipe(
|
||||||
new FluidStack(InitFluids.CANOLA_OIL.get(), 50), 4000, 100), null);
|
new FluidStack(InitFluids.CANOLA_OIL.get(), 50), 4000, 100), null);
|
||||||
|
|
||||||
|
|
|
@ -14,11 +14,13 @@ import net.minecraft.world.item.crafting.RecipeType;
|
||||||
import net.minecraft.world.item.crafting.SingleRecipeInput;
|
import net.minecraft.world.item.crafting.SingleRecipeInput;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class SolidFuelRecipe implements Recipe<SingleRecipeInput> {
|
public class SolidFuelRecipe implements Recipe<SingleRecipeInput> {
|
||||||
public static String NAME = "solid_fuel";
|
public static String NAME = "solid_fuel";
|
||||||
private Ingredient itemIngredient;
|
private final Ingredient itemIngredient;
|
||||||
private int burnTime;
|
private final int burnTime;
|
||||||
private int totalEnergy;
|
private final int totalEnergy;
|
||||||
|
|
||||||
public SolidFuelRecipe(Ingredient itemIngredient, int totalEnergy, int burnTime) {
|
public SolidFuelRecipe(Ingredient itemIngredient, int totalEnergy, int burnTime) {
|
||||||
this.itemIngredient = itemIngredient;
|
this.itemIngredient = itemIngredient;
|
||||||
|
@ -35,7 +37,7 @@ public class SolidFuelRecipe implements Recipe<SingleRecipeInput> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(SingleRecipeInput pInv, Level pLevel) {
|
public boolean matches(SingleRecipeInput pInv, @Nonnull Level pLevel) {
|
||||||
return itemIngredient.test(pInv.getItem(0));
|
return itemIngredient.test(pInv.getItem(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +50,9 @@ public class SolidFuelRecipe implements Recipe<SingleRecipeInput> {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ItemStack assemble(SingleRecipeInput pInv, HolderLookup.Provider registries) {
|
public ItemStack assemble(@Nonnull SingleRecipeInput pInv, @Nonnull HolderLookup.Provider registries) {
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,16 +61,19 @@ public class SolidFuelRecipe implements Recipe<SingleRecipeInput> {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getResultItem(HolderLookup.Provider provider) {
|
public ItemStack getResultItem(@Nonnull HolderLookup.Provider provider) {
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public RecipeSerializer<?> getSerializer() {
|
public RecipeSerializer<?> getSerializer() {
|
||||||
return ActuallyRecipes.SOLID_FUEL_RECIPE.get();
|
return ActuallyRecipes.SOLID_FUEL_RECIPE.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public RecipeType<?> getType() {
|
public RecipeType<?> getType() {
|
||||||
return ActuallyRecipes.Types.SOLID_FUEL.get();
|
return ActuallyRecipes.Types.SOLID_FUEL.get();
|
||||||
|
@ -86,11 +92,13 @@ public class SolidFuelRecipe implements Recipe<SingleRecipeInput> {
|
||||||
SolidFuelRecipe.Serializer::toNetwork, SolidFuelRecipe.Serializer::fromNetwork
|
SolidFuelRecipe.Serializer::toNetwork, SolidFuelRecipe.Serializer::fromNetwork
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public MapCodec<SolidFuelRecipe> codec() {
|
public MapCodec<SolidFuelRecipe> codec() {
|
||||||
return CODEC;
|
return CODEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public StreamCodec<RegistryFriendlyByteBuf, SolidFuelRecipe> streamCodec() {
|
public StreamCodec<RegistryFriendlyByteBuf, SolidFuelRecipe> streamCodec() {
|
||||||
return STREAM_CODEC;
|
return STREAM_CODEC;
|
||||||
|
|
|
@ -31,12 +31,11 @@ import net.minecraft.world.entity.player.Inventory;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.*;
|
||||||
import net.minecraft.world.level.block.Blocks;
|
|
||||||
import net.minecraft.world.level.block.LiquidBlock;
|
|
||||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
import net.minecraft.world.level.material.Fluids;
|
||||||
import net.neoforged.neoforge.fluids.FluidStack;
|
import net.neoforged.neoforge.fluids.FluidStack;
|
||||||
import net.neoforged.neoforge.fluids.FluidType;
|
import net.neoforged.neoforge.fluids.FluidType;
|
||||||
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
|
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
|
||||||
|
@ -104,6 +103,28 @@ public class TileEntityFluidCollector extends TileEntityBase implements ISharing
|
||||||
BlockPos coordsBlock = this.worldPosition.relative(sideToManipulate);
|
BlockPos coordsBlock = this.worldPosition.relative(sideToManipulate);
|
||||||
|
|
||||||
BlockState stateToBreak = this.level.getBlockState(coordsBlock);
|
BlockState stateToBreak = this.level.getBlockState(coordsBlock);
|
||||||
|
|
||||||
|
// Try cauldron
|
||||||
|
if(stateToBreak.getBlock() instanceof AbstractCauldronBlock cauldron) {
|
||||||
|
if (cauldron.isFull(stateToBreak)) {
|
||||||
|
if (stateToBreak.getBlock() == Blocks.WATER_CAULDRON) {
|
||||||
|
if (this.tank.fillInternal(new FluidStack(Fluids.WATER, FluidType.BUCKET_VOLUME), IFluidHandler.FluidAction.SIMULATE) >= FluidType.BUCKET_VOLUME) {
|
||||||
|
this.tank.fillInternal(new FluidStack(Fluids.WATER, FluidType.BUCKET_VOLUME), IFluidHandler.FluidAction.EXECUTE);
|
||||||
|
level.setBlockAndUpdate(coordsBlock, Blocks.CAULDRON.defaultBlockState());
|
||||||
|
level.playSound(null, coordsBlock, SoundEvents.BUCKET_FILL, SoundSource.BLOCKS, 1.0F, 1.0F);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else if (stateToBreak.getBlock() == Blocks.LAVA_CAULDRON) {
|
||||||
|
if (this.tank.fillInternal(new FluidStack(Fluids.LAVA, FluidType.BUCKET_VOLUME), IFluidHandler.FluidAction.SIMULATE) >= FluidType.BUCKET_VOLUME) {
|
||||||
|
this.tank.fillInternal(new FluidStack(Fluids.LAVA, FluidType.BUCKET_VOLUME), IFluidHandler.FluidAction.EXECUTE);
|
||||||
|
level.setBlockAndUpdate(coordsBlock, Blocks.CAULDRON.defaultBlockState());
|
||||||
|
level.playSound(null, coordsBlock, SoundEvents.BUCKET_FILL_LAVA, SoundSource.BLOCKS, 1.0F, 1.0F);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Block blockToBreak = stateToBreak.getBlock();
|
Block blockToBreak = stateToBreak.getBlock();
|
||||||
if (!this.isPlacer && FluidType.BUCKET_VOLUME <= this.tank.getCapacity() - this.tank.getFluidAmount()) {
|
if (!this.isPlacer && FluidType.BUCKET_VOLUME <= this.tank.getCapacity() - this.tank.getFluidAmount()) {
|
||||||
if (blockToBreak instanceof LiquidBlock liquidBlock && liquidBlock.fluid != null && stateToBreak.getFluidState().isSource() ) {
|
if (blockToBreak instanceof LiquidBlock liquidBlock && liquidBlock.fluid != null && stateToBreak.getFluidState().isSource() ) {
|
||||||
|
|
Loading…
Reference in a new issue