mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 08:17:35 +00:00
Optionally add a milk fluid to the vanilla bucket (#7294)
Fixes the previous broken code that was supposed to make mod registered milk returned by the vanilla bucket by allowing mods to enable a milk fluid.
This commit is contained in:
1 parent
f173bde812
commit
19f8d2a793
13 files changed
+189
-8
No files matched your search
@@ -24,13 +24,19 @@ import net.minecraft.command.arguments.ArgumentTypes;
|
||||
import net.minecraft.command.arguments.IArgumentSerializer;
|
||||
import net.minecraft.entity.ai.attributes.Attribute;
|
||||
import net.minecraft.entity.ai.attributes.RangedAttribute;
|
||||
import net.minecraft.fluid.Fluid;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
import net.minecraft.world.storage.IServerConfiguration;
|
||||
import net.minecraft.world.storage.SaveFormat;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.client.ForgeHooksClient;
|
||||
import net.minecraftforge.common.data.ExistingFileHelper;
|
||||
import net.minecraftforge.common.data.ForgeFluidTagsProvider;
|
||||
import net.minecraftforge.eventbus.api.IEventBus;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fluids.FluidAttributes;
|
||||
import net.minecraftforge.fluids.ForgeFlowingFluid;
|
||||
import net.minecraftforge.fml.*;
|
||||
import net.minecraftforge.fml.config.ModConfig;
|
||||
import net.minecraftforge.fml.event.lifecycle.*;
|
||||
@@ -41,6 +47,8 @@ import net.minecraftforge.fml.loading.progress.StartupMessageManager;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.server.command.EnumArgument;
|
||||
import net.minecraftforge.server.command.ModIdArgument;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.IForgeRegistry;
|
||||
import net.minecraftforge.versions.forge.ForgeVersion;
|
||||
import net.minecraftforge.versions.mcp.MCPVersion;
|
||||
|
||||
@@ -98,12 +106,24 @@ public class ForgeMod implements WorldPersistenceHooks.WorldPersistenceHook
|
||||
|
||||
public static final RegistryObject<Attribute> REACH_DISTANCE = ATTRIBUTES.register("reach_distance", () -> new RangedAttribute("generic.reachDistance", 5.0D, 0.0D, 1024.0D).setShouldWatch(true));
|
||||
|
||||
private static boolean enableMilkFluid = false;
|
||||
public static final RegistryObject<Fluid> MILK = RegistryObject.of(new ResourceLocation("milk"), ForgeRegistries.FLUIDS);
|
||||
public static final RegistryObject<Fluid> FLOWING_MILK = RegistryObject.of(new ResourceLocation("flowing_milk"), ForgeRegistries.FLUIDS);
|
||||
|
||||
private static ForgeMod INSTANCE;
|
||||
public static ForgeMod getInstance()
|
||||
{
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run this method during mod constructor to enable milk and add it to the Minecraft milk bucket
|
||||
*/
|
||||
public static void enableMilkFluid()
|
||||
{
|
||||
enableMilkFluid = true;
|
||||
}
|
||||
|
||||
public ForgeMod()
|
||||
{
|
||||
LOGGER.info(FORGEMOD,"Forge mod loading, version {}, for MC {} with MCP {}", ForgeVersion.getVersion(), MCPVersion.getMCVersion(), MCPVersion.getMCPVersion());
|
||||
@@ -120,6 +140,7 @@ public class ForgeMod implements WorldPersistenceHooks.WorldPersistenceHook
|
||||
modEventBus.addListener(this::preInit);
|
||||
modEventBus.addListener(this::gatherData);
|
||||
modEventBus.addListener(this::loadComplete);
|
||||
modEventBus.addGenericListener(Fluid.class, this::registerFluids);
|
||||
modEventBus.register(this);
|
||||
ATTRIBUTES.register(modEventBus);
|
||||
MinecraftForge.EVENT_BUS.addListener(this::serverStopping);
|
||||
@@ -205,9 +226,11 @@ public class ForgeMod implements WorldPersistenceHooks.WorldPersistenceHook
|
||||
|
||||
if (event.includeServer())
|
||||
{
|
||||
ForgeBlockTagsProvider blockTags = new ForgeBlockTagsProvider(gen, event.getExistingFileHelper());
|
||||
ExistingFileHelper existingFileHelper = event.getExistingFileHelper();
|
||||
ForgeBlockTagsProvider blockTags = new ForgeBlockTagsProvider(gen, existingFileHelper);
|
||||
gen.addProvider(blockTags);
|
||||
gen.addProvider(new ForgeItemTagsProvider(gen, blockTags, event.getExistingFileHelper()));
|
||||
gen.addProvider(new ForgeItemTagsProvider(gen, blockTags, existingFileHelper));
|
||||
gen.addProvider(new ForgeFluidTagsProvider(gen, existingFileHelper));
|
||||
gen.addProvider(new ForgeRecipeProvider(gen));
|
||||
gen.addProvider(new ForgeLootTableProvider(gen));
|
||||
}
|
||||
@@ -232,6 +255,20 @@ public class ForgeMod implements WorldPersistenceHooks.WorldPersistenceHook
|
||||
}
|
||||
}
|
||||
|
||||
// done in an event instead of deferred to only enable if a mod requests it
|
||||
public void registerFluids(RegistryEvent.Register<Fluid> event)
|
||||
{
|
||||
if (enableMilkFluid)
|
||||
{
|
||||
// set up attributes
|
||||
FluidAttributes.Builder attributesBuilder = FluidAttributes.builder(new ResourceLocation("forge", "block/milk_still"), new ResourceLocation("forge", "block/milk_flowing")).density(1024).viscosity(1024);
|
||||
ForgeFlowingFluid.Properties properties = new ForgeFlowingFluid.Properties(MILK, FLOWING_MILK, attributesBuilder).bucket(() -> Items.MILK_BUCKET);
|
||||
// register fluids
|
||||
event.getRegistry().register(new ForgeFlowingFluid.Source(properties).setRegistryName(MILK.getId()));
|
||||
event.getRegistry().register(new ForgeFlowingFluid.Flowing(properties).setRegistryName(FLOWING_MILK.getId()));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent //ModBus, can't use addListener due to nested genetics.
|
||||
public void registerRecipeSerialziers(RegistryEvent.Register<IRecipeSerializer<?>> event)
|
||||
{
|
||||
|
||||
@@ -20,9 +20,11 @@
|
||||
package net.minecraftforge.common;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.fluid.Fluid;
|
||||
import net.minecraft.item.DyeColor;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.FluidTags;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.tags.ITag.INamedTag;
|
||||
@@ -33,6 +35,7 @@ public class Tags
|
||||
{
|
||||
Blocks.init();
|
||||
Items.init();
|
||||
Fluids.init();
|
||||
}
|
||||
|
||||
public static class Blocks
|
||||
@@ -287,6 +290,18 @@ public class Tags
|
||||
}
|
||||
}
|
||||
|
||||
public static class Fluids
|
||||
{
|
||||
private static void init() {}
|
||||
|
||||
public static final IOptionalNamedTag<Fluid> MILK = tag("milk");
|
||||
|
||||
private static IOptionalNamedTag<Fluid> tag(String name)
|
||||
{
|
||||
return FluidTags.createOptional(new ResourceLocation("forge", name));
|
||||
}
|
||||
}
|
||||
|
||||
public interface IOptionalNamedTag<T> extends INamedTag<T>
|
||||
{
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Minecraft Forge
|
||||
* Copyright (c) 2016-2020.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation version 2.1
|
||||
* of the License.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
package net.minecraftforge.common.data;
|
||||
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraft.data.FluidTagsProvider;
|
||||
import net.minecraftforge.common.ForgeMod;
|
||||
|
||||
import static net.minecraftforge.common.Tags.Fluids.MILK;
|
||||
|
||||
public class ForgeFluidTagsProvider extends FluidTagsProvider
|
||||
{
|
||||
public ForgeFluidTagsProvider(DataGenerator gen, ExistingFileHelper existingFileHelper)
|
||||
{
|
||||
super(gen, "forge", existingFileHelper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerTags()
|
||||
{
|
||||
getOrCreateBuilder(MILK).addOptional(ForgeMod.MILK.getId()).addOptional(ForgeMod.FLOWING_MILK.getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName()
|
||||
{
|
||||
return "Forge Fluid Tags";
|
||||
}
|
||||
}
|
||||
@@ -643,10 +643,6 @@ public class FluidUtil
|
||||
{
|
||||
return new ItemStack(Items.LAVA_BUCKET);
|
||||
}
|
||||
else if (fluid.getRegistryName().equals(new ResourceLocation("milk")))
|
||||
{
|
||||
return new ItemStack(Items.MILK_BUCKET);
|
||||
}
|
||||
}
|
||||
|
||||
return fluid.getAttributes().getBucket(fluidStack);
|
||||
|
||||
@@ -26,6 +26,7 @@ import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.item.*;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraftforge.common.ForgeMod;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
@@ -60,7 +61,7 @@ public class FluidBucketWrapper implements IFluidHandlerItem, ICapabilityProvide
|
||||
|
||||
public boolean canFillFluidType(FluidStack fluid)
|
||||
{
|
||||
if (fluid.getFluid() == Fluids.WATER || fluid.getFluid() == Fluids.LAVA || fluid.getFluid().getRegistryName().equals(new ResourceLocation("milk")))
|
||||
if (fluid.getFluid() == Fluids.WATER || fluid.getFluid() == Fluids.LAVA)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -75,6 +76,10 @@ public class FluidBucketWrapper implements IFluidHandlerItem, ICapabilityProvide
|
||||
{
|
||||
return new FluidStack(((BucketItem)item).getFluid(), FluidAttributes.BUCKET_VOLUME);
|
||||
}
|
||||
else if (item instanceof MilkBucketItem && ForgeMod.MILK.isPresent())
|
||||
{
|
||||
return new FluidStack(ForgeMod.MILK.get(), FluidAttributes.BUCKET_VOLUME);
|
||||
}
|
||||
else
|
||||
{
|
||||
return FluidStack.EMPTY;
|
||||
|
||||
Reference in new issue
Block a user