Skip to content
Merged
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
@@ -1,10 +1,14 @@
package vectorwing.farmersdelight.client.event;

import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.client.renderer.entity.ThrownItemRenderer;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.EventPriority;
import net.neoforged.bus.api.SubscribeEvent;
Expand All @@ -14,6 +18,7 @@
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import vectorwing.farmersdelight.FarmersDelight;
import vectorwing.farmersdelight.client.gui.CookingPotScreen;
import vectorwing.farmersdelight.client.gui.CookingPotTooltip;
Expand All @@ -23,6 +28,7 @@
import vectorwing.farmersdelight.client.particle.SteamParticle;
import vectorwing.farmersdelight.client.recipebook.RecipeCategories;
import vectorwing.farmersdelight.client.renderer.*;
import vectorwing.farmersdelight.common.EnumParameters;
import vectorwing.farmersdelight.common.item.component.ItemStackWrapper;
import vectorwing.farmersdelight.common.registry.*;

Expand All @@ -45,6 +51,11 @@ public static void registerClientExtensions(RegisterClientExtensionsEvent event)
public @NotNull BlockEntityWithoutLevelRenderer getCustomRenderer() {
return renderer;
}

@Override
public HumanoidModel.@Nullable ArmPose getArmPose(LivingEntity living, InteractionHand hand, ItemStack stack) {
return stack.has(ModDataComponents.SKILLET_FLIP_TIMESTAMP.get()) ? EnumParameters.PROXY_SKILLET_FLIP.getValue() : null;
}
}, ModItems.SKILLET.get());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,32 @@
//package vectorwing.farmersdelight.client.event;
//
//import net.minecraft.client.Minecraft;
//import net.minecraft.world.entity.player.Player;
//import net.minecraft.world.item.ItemStack;
//import net.neoforged.api.distmarker.Dist;
//import net.neoforged.bus.api.SubscribeEvent;
//import net.neoforged.fml.common.EventBusSubscriber;
//import net.neoforged.neoforge.client.event.ClientTickEvent;
//import vectorwing.farmersdelight.FarmersDelight;
//
//@EventBusSubscriber(modid = FarmersDelight.MODID, value = Dist.CLIENT)
//public class KeybindEvents
//{
// @SubscribeEvent
// public static void preClientTick(ClientTickEvent event) { // Run this on pre so inputs don't get eaten up.
// Minecraft mc = Minecraft.getInstance();
// Player player = mc.player;
// if (player != null && player.isUsingItem()) {
// ItemStack useItem = player.getUseItem();
// // TODO: Clean up for 1.21 Skillet PR
//// if (useItem.getItem() instanceof SkilletItem && useItem.getOrCreateTag().getLong("FlipTimeStamp") == 0L) {
//// while (mc.options.keyAttack.consumeClick()) {
//// ModNetworking.INSTANCE.sendToServer(new ModNetworking.FlipSkilletMessage());
//// }
//// }
// }
// }
//}
package vectorwing.farmersdelight.client.event;

import net.minecraft.client.Minecraft;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.event.ClientTickEvent;
import net.neoforged.neoforge.network.PacketDistributor;
import vectorwing.farmersdelight.FarmersDelight;
import vectorwing.farmersdelight.common.item.SkilletItem;
import vectorwing.farmersdelight.common.networking.ModNetworking;
import vectorwing.farmersdelight.common.registry.ModDataComponents;
import vectorwing.farmersdelight.common.registry.ModItems;

@EventBusSubscriber(modid = FarmersDelight.MODID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT)
public class KeybindEvents {
@SubscribeEvent
public static void preClientTick(ClientTickEvent.Pre event) { // Run this on pre so inputs don't get eaten up.
Minecraft mc = Minecraft.getInstance();
Player player = mc.player;
if (player != null && player.isUsingItem()) {
ItemStack useItem = player.getUseItem();
if (useItem.getItem() instanceof SkilletItem && !useItem.has(ModDataComponents.SKILLET_FLIP_TIMESTAMP.get())) {
while (mc.options.keyAttack.consumeClick()) {
PacketDistributor.sendToServer(ModNetworking.FlipSkilletMessage.INSTANCE);
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,20 @@
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.client.IArmPoseTransformer;
import vectorwing.farmersdelight.common.item.SkilletItem;
import vectorwing.farmersdelight.common.item.component.ItemStackWrapper;
import vectorwing.farmersdelight.common.registry.ModDataComponents;

Expand All @@ -21,37 +29,76 @@ public SkilletItemRenderer() {
@Override
public void renderByItem(ItemStack stack, ItemDisplayContext displayContext, PoseStack poseStack, MultiBufferSource buffer, int packedLight, int packedOverlay) {
//render block
poseStack.pushPose();
BlockItem item = ((BlockItem) stack.getItem());
BlockState state = item.getBlock().defaultBlockState();
Minecraft.getInstance().getBlockRenderer().renderSingleBlock(state, poseStack, buffer, packedLight, packedOverlay);
poseStack.popPose();

ItemStackWrapper stackWrapper = stack.getOrDefault(ModDataComponents.SKILLET_INGREDIENT, ItemStackWrapper.EMPTY);

Minecraft mc = Minecraft.getInstance();

ItemStackWrapper stackWrapper = stack.getOrDefault(ModDataComponents.SKILLET_INGREDIENT.get(), ItemStackWrapper.EMPTY);
ItemStack ingredientStack = stackWrapper.getStack();

float animation = 0;

if (!ingredientStack.isEmpty()) {
poseStack.pushPose();
poseStack.translate(0.5, 1 / 16f, 0.5);

// long gameTime = Minecraft.getInstance().level.getGameTime();
// long time = stack.getOrCreateTag().getLong("FlipTimeStamp");
// if (time != 0) {
// float partialTicks = Minecraft.getInstance().getFrameTime();
// float animation = ((gameTime - time) + partialTicks) / SkilletItem.FLIP_TIME;
// float maxH = 1;
// poseStack.translate(0, maxH * Mth.sin(animation * Mth.PI), 0);
// poseStack.mulPose(Axis.XP.rotationDegrees(360 * animation));
// }
long gameTime = mc.level.getGameTime();
if (stack.has(ModDataComponents.SKILLET_FLIP_TIMESTAMP.get()) && displayContext != ItemDisplayContext.GUI) {
long time = stack.get(ModDataComponents.SKILLET_FLIP_TIMESTAMP.get());
float partialTicks = mc.getTimer().getGameTimeDeltaPartialTick(false);
animation = ((gameTime - time) + partialTicks) / SkilletItem.FLIP_TIME;
animation = Mth.clamp(animation, 0, 1);
float maxH = 0.4F;
poseStack.translate(0, maxH * Mth.sin(animation * Mth.PI), 0);
float rotationAnimation = stack.getOrDefault(ModDataComponents.SKILLET_FLIPPED.get(), false) ? animation + 1.0F : animation;
poseStack.mulPose(Axis.XP.rotationDegrees(180 * rotationAnimation));
} else {
poseStack.mulPose(Axis.XP.rotationDegrees(stack.getOrDefault(ModDataComponents.SKILLET_FLIPPED.get(), false) ? 180 : 0));
}

poseStack.mulPose(Axis.XP.rotationDegrees(90));
poseStack.scale(0.5F, 0.5F, 0.5F);

var itemRenderer = Minecraft.getInstance().getItemRenderer();
itemRenderer.renderStatic(ingredientStack, ItemDisplayContext.FIXED, packedLight,
packedOverlay, poseStack, buffer, null, 0);
if (displayContext != ItemDisplayContext.GUI) {
var itemRenderer = mc.getItemRenderer();
itemRenderer.renderStatic(ingredientStack, ItemDisplayContext.FIXED, packedLight,
packedOverlay, poseStack, buffer, null, 0);
}

poseStack.popPose();
}

poseStack.pushPose();

if (animation != 0 && displayContext.firstPerson()) {
poseStack.translate(0, 0, 1);
poseStack.mulPose(Axis.XN.rotationDegrees(Mth.sin(animation * Mth.TWO_PI) * 15));
poseStack.translate(0F, 0, -1);
poseStack.translate(0, 0, -Mth.sin(animation * Mth.PI) * 0.2);
}
mc.getBlockRenderer().renderSingleBlock(state, poseStack, buffer, packedLight, packedOverlay);

poseStack.popPose();
}

public static class ArmPoseTransformer implements IArmPoseTransformer {
@Override
public void applyTransform(HumanoidModel<?> model, LivingEntity entity, HumanoidArm arm) {
ItemStack stack = entity.getUseItem();
if (stack.has(ModDataComponents.SKILLET_FLIP_TIMESTAMP.get())) {
long time = stack.get(ModDataComponents.SKILLET_FLIP_TIMESTAMP.get());
float partialTicks = Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(false);
float animation = ((entity.level().getGameTime() - time) + partialTicks) / SkilletItem.FLIP_TIME;
animation = Mth.clamp(animation, 0, 1);

if (arm == HumanoidArm.LEFT) {
model.leftArm.xRot = (-Mth.sin(animation * Mth.TWO_PI) * 15 - 20) * (float) (Math.PI / 180.0);
} else {
model.rightArm.xRot = (-Mth.sin(animation * Mth.TWO_PI) * 15 - 20) * (float) (Math.PI / 180.0);
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package vectorwing.farmersdelight.common;

import net.minecraft.client.RecipeBookCategories;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.world.entity.HumanoidArm;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.neoforged.fml.common.asm.enumextension.EnumProxy;
import net.neoforged.neoforge.client.IArmPoseTransformer;
import vectorwing.farmersdelight.client.renderer.SkilletItemRenderer;
import vectorwing.farmersdelight.common.registry.ModItems;

import java.util.List;
Expand All @@ -23,4 +28,7 @@ public class EnumParameters
public static final EnumProxy<RecipeBookCategories> PROXY_COOKING_MISC = new EnumProxy<>(
RecipeBookCategories.class, (Supplier<List<ItemStack>>) () -> List.of(new ItemStack(ModItems.DUMPLINGS.get()), new ItemStack(ModItems.TOMATO_SAUCE.get()))
);
public static final EnumProxy<HumanoidModel.ArmPose> PROXY_SKILLET_FLIP = new EnumProxy<>(
HumanoidModel.ArmPose.class, false, new SkilletItemRenderer.ArmPoseTransformer()
);
}
Loading