Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port of DynamicFluidContainerModel #140

Open
wants to merge 4 commits into
base: 1.21.1
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,19 +73,19 @@ private Simple(boolean hasAmbientOcclusion, boolean usesBlockLight, boolean isGu

@Override
public Simple addCulledFace(Direction facing, BakedQuad quad) {
builder.getEmitter().fromVanilla(quad, material, facing);
builder.getEmitter().fromVanilla(quad, material, facing).emit();
return this;
}

@Override
public Simple addUnculledFace(BakedQuad quad) {
builder.getEmitter().fromVanilla(quad, material, null);
builder.getEmitter().fromVanilla(quad, material, null).emit();
return this;
}

@Override
public Simple addFace(QuadView quad) {
builder.getEmitter().copyFrom(quad);
builder.getEmitter().copyFrom(quad).emit();
return this;
}

Expand Down
2 changes: 1 addition & 1 deletion modules/models/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
portingLib {
addModuleDependencies(["model_loader", "transfer", "data"])
addModuleDependencies(["model_loader", "transfer", "data", "fluids"])
enableTestMod()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,17 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;

import io.github.fabricators_of_create.porting_lib.models.geometry.IGeometryBakingContext;
import io.github.fabricators_of_create.porting_lib.models.geometry.IGeometryLoader;
import io.github.fabricators_of_create.porting_lib.models.geometry.IUnbakedGeometry;
import net.minecraft.client.renderer.RenderType;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.renderer.block.model.ItemOverrides;
Expand Down Expand Up @@ -115,6 +115,20 @@ public Baked(boolean isGui3d, boolean isSideLit, boolean isAmbientOcclusion, Tex
this.itemPasses = itemPasses;
}

@Override
public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, BlockPos pos, Supplier<RandomSource> randomSupplier, RenderContext context) {
for (Map.Entry<String, BakedModel> entry : children.entrySet()) {
entry.getValue().emitBlockQuads(blockView, state, pos, randomSupplier, context);
}
}

@Override
public void emitItemQuads(ItemStack stack, Supplier<RandomSource> randomSupplier, RenderContext context) {
for (Map.Entry<String, BakedModel> entry : children.entrySet()) {
entry.getValue().emitItemQuads(stack, randomSupplier, context);
}
}

@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand/*, ModelData data, @Nullable RenderType renderType*/) {
List<List<BakedQuad>> quadLists = new ArrayList<>();
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;
import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.resources.ResourceLocation;

public class PortingLibModels implements ClientModInitializer {
@Override
Expand All @@ -21,7 +20,7 @@ public void onInitializeClient() {
loaders.put(PortingLib.id("composite"), CompositeModel.Loader.INSTANCE);
loaders.put(PortingLib.id("item_layers"), ItemLayerModel.Loader.INSTANCE);

// loaders.put(PortingLib.id("fluid_container"), DynamicFluidContainerModel.Loader.INSTANCE); TODO: PORT
loaders.put(PortingLib.id("fluid_container"), DynamicFluidContainerModel.Loader.INSTANCE);

});
BlockModel.GSON = BlockModel.GSON.newBuilder()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "neoforge:item/default",
"textures": {
"base": "item/bucket",
"fluid": "neoforge:item/mask/bucket_fluid"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"parent": "neoforge:item/default",
"textures": {
"base": "item/bucket",
"fluid": "neoforge:item/mask/bucket_fluid_drip"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"gui_light": "front",
"display": {
"ground": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 2, 0],
"scale":[ 0.5, 0.5, 0.5 ]
},
"head": {
"rotation": [ 0, 180, 0 ],
"translation": [ 0, 13, 7],
"scale":[ 1, 1, 1]
},
"thirdperson_righthand": {
"rotation": [ 0, 0, 0 ],
"translation": [ 0, 3, 1 ],
"scale": [ 0.55, 0.55, 0.55 ]
},
"firstperson_righthand": {
"rotation": [ 0, -90, 25 ],
"translation": [ 1.13, 3.2, 1.13],
"scale": [ 0.68, 0.68, 0.68 ]
},
"fixed": {
"rotation": [ 0, 180, 0 ],
"scale": [ 1, 1, 1 ]
}
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,37 @@

import io.github.fabricators_of_create.porting_lib.core.PortingLib;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.item.v1.EquipmentSlotProvider;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.fluid.base.FullItemFluidStorage;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.Fluids;

public class PortingLibModelsTestmod implements ModInitializer {
public static final Item DERPY_HELMET = new Item(new Item.Properties().equipmentSlot((entity, stack) -> EquipmentSlot.HEAD));
public static final Item STONE_2 = new Item(new Item.Properties());
public static final Block NOT_GLASS = new Block(BlockBehaviour. Properties. ofFullCopy(Blocks.GLASS));
public static final Item WATER_BUCKET = new Item(new Item.Properties());
public static final Item LAVA_BUCKET = new Item(new Item.Properties());

@Override
public void onInitialize() {
Registry.register(BuiltInRegistries.ITEM, PortingLib.id("derp_helmet"), DERPY_HELMET);
Registry.register(BuiltInRegistries.ITEM, PortingLib.id("stone_2"), STONE_2);
Registry.register(BuiltInRegistries.BLOCK, PortingLib.id("not_glass"), NOT_GLASS);
Registry.register(BuiltInRegistries.ITEM, PortingLib.id("water_bucket"), WATER_BUCKET);
Registry.register(BuiltInRegistries.ITEM, PortingLib.id("lava_bucket"), LAVA_BUCKET);

FluidStorage.ITEM.registerForItems((stack, context) -> new FullItemFluidStorage(context, Items.BUCKET, FluidVariant.of(Fluids.WATER), FluidConstants.BUCKET), WATER_BUCKET);
FluidStorage.ITEM.registerForItems((stack, context) -> new FullItemFluidStorage(context, Items.BUCKET, FluidVariant.of(Fluids.LAVA), FluidConstants.BUCKET), LAVA_BUCKET);
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
package io.github.fabricators_of_create.porting_lib.models.testmod.client;

import io.github.fabricators_of_create.porting_lib.models.DynamicFluidContainerModel;
import io.github.fabricators_of_create.porting_lib.models.testmod.PortingLibModelsTestmod;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin;
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
import net.minecraft.client.resources.model.ModelResourceLocation;
import net.minecraft.core.registries.BuiltInRegistries;

import static io.github.fabricators_of_create.porting_lib.models.testmod.PortingLibModelsTestmod.WATER_BUCKET;

public class PortingLibModelsTestmodClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
ModelResourceLocation location = new ModelResourceLocation(BuiltInRegistries.ITEM.getKey(PortingLibModelsTestmod.DERPY_HELMET), "inventory");
ModelLoadingPlugin.register(pluginCtx -> pluginCtx.modifyModelAfterBake().register(
(model, ctx) -> ctx.topLevelId().equals(location) ? new DerpyItemModel(model) : model
));

ColorProviderRegistry.ITEM.register(new DynamicFluidContainerModel.Colors(), WATER_BUCKET);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
{
"item.porting_lib.derp_helmet": "Derpy Helmet",
"item.porting_lib.stone_2": "Stone 2",
"block.porting_lib.not_glass": "Not Glass"
"block.porting_lib.not_glass": "Not Glass",
"item.porting_lib.water_bucket": "Water Bucket",
"item.porting_lib.lava_bucket": "Lava Bucket"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"parent": "neoforge:item/bucket",
"loader": "porting_lib:fluid_container",
"fluid": "lava"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"parent": "neoforge:item/bucket",
"loader": "porting_lib:fluid_container",
"fluid": "water"
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
package io.github.fabricators_of_create.porting_lib.util;

import io.github.fabricators_of_create.porting_lib.fluids.FluidStack;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.transfer.v1.context.ContainerItemContext;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidStorage;
import net.fabricmc.fabric.api.transfer.v1.storage.StorageUtil;
import net.minecraft.Util;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.Fluids;

import java.util.Optional;

public class FluidUtil {
@Environment(EnvType.CLIENT)
public static String getTranslationKey(Fluid fluid) {
Expand All @@ -29,4 +36,21 @@ public static String getTranslationKey(Fluid fluid) {

return translationKey;
}

/**
* Helper method to get the fluid contained in an itemStack
*/
public static Optional<FluidStack> getFluidContained(ItemStack container) {
if (!container.isEmpty()) {
container = container.copyWithCount(1);
Optional<FluidStack> fluidContained = Optional.ofNullable(ContainerItemContext.withConstant(container).find(FluidStorage.ITEM))
.map(handler -> StorageUtil.findExtractableContent(handler, null))
.map(FluidStack::new);

if (fluidContained.isPresent() && !fluidContained.get().isEmpty()) {
return fluidContained;
}
}
return Optional.empty();
}
}