mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-14 19:53:42 +01:00
Post-PR changes
- Rename ILangParial to LangPartial - Simplify LangPartial and remove default LangMerger constructor - Create CustomArmPoseItem and de-hardcode PotatoCannonItem and ZapperItem - Fix mixin order - Update Flywheel
This commit is contained in:
parent
d6e8ac73df
commit
d8ec424fa0
13 changed files with 117 additions and 94 deletions
|
@ -21,7 +21,7 @@ parchment_version = 2022.11.06
|
||||||
# dependency versions
|
# dependency versions
|
||||||
registrate_version = MC1.18.2-1.1.3
|
registrate_version = MC1.18.2-1.1.3
|
||||||
flywheel_minecraft_version = 1.18.2
|
flywheel_minecraft_version = 1.18.2
|
||||||
flywheel_version = 0.6.8-96
|
flywheel_version = 0.6.8-97
|
||||||
jei_minecraft_version = 1.18.2
|
jei_minecraft_version = 1.18.2
|
||||||
jei_version = 9.7.0.209
|
jei_version = 9.7.0.209
|
||||||
curios_minecraft_version = 1.18.2
|
curios_minecraft_version = 1.18.2
|
||||||
|
|
|
@ -29,6 +29,7 @@ import com.simibubi.create.foundation.block.CopperRegistries;
|
||||||
import com.simibubi.create.foundation.command.ServerLagger;
|
import com.simibubi.create.foundation.command.ServerLagger;
|
||||||
import com.simibubi.create.foundation.config.AllConfigs;
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
import com.simibubi.create.foundation.config.ContraptionMovementSetting;
|
import com.simibubi.create.foundation.config.ContraptionMovementSetting;
|
||||||
|
import com.simibubi.create.foundation.data.AllLangPartials;
|
||||||
import com.simibubi.create.foundation.data.CreateRegistrate;
|
import com.simibubi.create.foundation.data.CreateRegistrate;
|
||||||
import com.simibubi.create.foundation.data.LangMerger;
|
import com.simibubi.create.foundation.data.LangMerger;
|
||||||
import com.simibubi.create.foundation.data.TagGen;
|
import com.simibubi.create.foundation.data.TagGen;
|
||||||
|
@ -161,7 +162,7 @@ public class Create {
|
||||||
TagGen.datagen();
|
TagGen.datagen();
|
||||||
DataGenerator gen = event.getGenerator();
|
DataGenerator gen = event.getGenerator();
|
||||||
if (event.includeClient()) {
|
if (event.includeClient()) {
|
||||||
gen.addProvider(new LangMerger(gen));
|
gen.addProvider(new LangMerger(gen, ID, "Create", AllLangPartials.values()));
|
||||||
gen.addProvider(AllSoundEvents.provider(gen));
|
gen.addProvider(AllSoundEvents.provider(gen));
|
||||||
}
|
}
|
||||||
if (event.includeServer()) {
|
if (event.includeServer()) {
|
||||||
|
|
|
@ -5,6 +5,8 @@ import java.util.Optional;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import com.simibubi.create.AllEnchantments;
|
import com.simibubi.create.AllEnchantments;
|
||||||
import com.simibubi.create.AllEntityTypes;
|
import com.simibubi.create.AllEntityTypes;
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
|
@ -12,6 +14,7 @@ import com.simibubi.create.CreateClient;
|
||||||
import com.simibubi.create.content.curiosities.armor.BackTankUtil;
|
import com.simibubi.create.content.curiosities.armor.BackTankUtil;
|
||||||
import com.simibubi.create.content.curiosities.zapper.ShootableGadgetItemMethods;
|
import com.simibubi.create.content.curiosities.zapper.ShootableGadgetItemMethods;
|
||||||
import com.simibubi.create.foundation.config.AllConfigs;
|
import com.simibubi.create.foundation.config.AllConfigs;
|
||||||
|
import com.simibubi.create.foundation.item.CustomArmPoseItem;
|
||||||
import com.simibubi.create.foundation.item.render.SimpleCustomRenderer;
|
import com.simibubi.create.foundation.item.render.SimpleCustomRenderer;
|
||||||
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
import com.simibubi.create.foundation.utility.AnimationTickHolder;
|
||||||
import com.simibubi.create.foundation.utility.Components;
|
import com.simibubi.create.foundation.utility.Components;
|
||||||
|
@ -20,6 +23,8 @@ import com.simibubi.create.foundation.utility.VecHelper;
|
||||||
|
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.model.HumanoidModel.ArmPose;
|
||||||
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction.Axis;
|
import net.minecraft.core.Direction.Axis;
|
||||||
|
@ -46,7 +51,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.client.IItemRenderProperties;
|
import net.minecraftforge.client.IItemRenderProperties;
|
||||||
|
|
||||||
public class PotatoCannonItem extends ProjectileWeaponItem {
|
public class PotatoCannonItem extends ProjectileWeaponItem implements CustomArmPoseItem {
|
||||||
|
|
||||||
public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY;
|
public static ItemStack CLIENT_CURRENT_AMMO = ItemStack.EMPTY;
|
||||||
public static final int MAX_DAMAGE = 100;
|
public static final int MAX_DAMAGE = 100;
|
||||||
|
@ -270,6 +275,15 @@ public class PotatoCannonItem extends ProjectileWeaponItem {
|
||||||
return UseAnim.NONE;
|
return UseAnim.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nullable
|
||||||
|
public ArmPose getArmPose(ItemStack stack, AbstractClientPlayer player, InteractionHand hand) {
|
||||||
|
if (!player.swinging) {
|
||||||
|
return ArmPose.CROSSBOW_HOLD;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getDefaultProjectileRange() {
|
public int getDefaultProjectileRange() {
|
||||||
return 15;
|
return 15;
|
||||||
|
|
|
@ -4,9 +4,12 @@ import java.util.List;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import com.simibubi.create.AllSoundEvents;
|
import com.simibubi.create.AllSoundEvents;
|
||||||
import com.simibubi.create.AllTags.AllBlockTags;
|
import com.simibubi.create.AllTags.AllBlockTags;
|
||||||
import com.simibubi.create.CreateClient;
|
import com.simibubi.create.CreateClient;
|
||||||
|
import com.simibubi.create.foundation.item.CustomArmPoseItem;
|
||||||
import com.simibubi.create.foundation.item.ItemDescription;
|
import com.simibubi.create.foundation.item.ItemDescription;
|
||||||
import com.simibubi.create.foundation.utility.BlockHelper;
|
import com.simibubi.create.foundation.utility.BlockHelper;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
@ -14,6 +17,8 @@ import com.simibubi.create.foundation.utility.NBTHelper;
|
||||||
import com.simibubi.create.foundation.utility.NBTProcessors;
|
import com.simibubi.create.foundation.utility.NBTProcessors;
|
||||||
|
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
|
import net.minecraft.client.model.HumanoidModel.ArmPose;
|
||||||
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.NbtUtils;
|
import net.minecraft.nbt.NbtUtils;
|
||||||
|
@ -43,7 +48,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
import net.minecraftforge.fml.DistExecutor;
|
import net.minecraftforge.fml.DistExecutor;
|
||||||
|
|
||||||
public abstract class ZapperItem extends Item {
|
public abstract class ZapperItem extends Item implements CustomArmPoseItem {
|
||||||
|
|
||||||
public ZapperItem(Properties properties) {
|
public ZapperItem(Properties properties) {
|
||||||
super(properties.stacksTo(1));
|
super(properties.stacksTo(1));
|
||||||
|
@ -213,6 +218,15 @@ public abstract class ZapperItem extends Item {
|
||||||
return UseAnim.NONE;
|
return UseAnim.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nullable
|
||||||
|
public ArmPose getArmPose(ItemStack stack, AbstractClientPlayer player, InteractionHand hand) {
|
||||||
|
if (!player.swinging) {
|
||||||
|
return ArmPose.CROSSBOW_HOLD;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static void configureSettings(ItemStack stack, PlacementPatterns pattern) {
|
public static void configureSettings(ItemStack stack, PlacementPatterns pattern) {
|
||||||
CompoundTag nbt = stack.getOrCreateTag();
|
CompoundTag nbt = stack.getOrCreateTag();
|
||||||
NBTHelper.writeEnum(nbt, "Pattern", pattern);
|
NBTHelper.writeEnum(nbt, "Pattern", pattern);
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package com.simibubi.create.content.logistics.block.display.source;
|
package com.simibubi.create.content.logistics.block.display.source;
|
||||||
|
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import com.simibubi.create.content.logistics.block.display.DisplayLinkContext;
|
import com.simibubi.create.content.logistics.block.display.DisplayLinkContext;
|
||||||
import com.simibubi.create.foundation.gui.ModularGuiLineBuilder;
|
import com.simibubi.create.foundation.gui.ModularGuiLineBuilder;
|
||||||
import com.simibubi.create.foundation.utility.IntAttached;
|
import com.simibubi.create.foundation.utility.IntAttached;
|
||||||
|
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.network.chat.MutableComponent;
|
import net.minecraft.network.chat.MutableComponent;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
@ -15,8 +18,6 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria.RenderType;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.api.distmarker.OnlyIn;
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
public abstract class StatTrackingDisplaySource extends ScoreboardDisplaySource {
|
public abstract class StatTrackingDisplaySource extends ScoreboardDisplaySource {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -3,11 +3,12 @@ package com.simibubi.create.foundation.data;
|
||||||
import com.google.common.base.Supplier;
|
import com.google.common.base.Supplier;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.simibubi.create.AllSoundEvents;
|
import com.simibubi.create.AllSoundEvents;
|
||||||
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||||
import com.simibubi.create.foundation.ponder.PonderLocalization;
|
import com.simibubi.create.foundation.ponder.PonderLocalization;
|
||||||
import com.simibubi.create.foundation.utility.Lang;
|
import com.simibubi.create.foundation.utility.Lang;
|
||||||
|
|
||||||
public enum AllLangPartials implements ILangPartial {
|
public enum AllLangPartials implements LangPartial {
|
||||||
|
|
||||||
ADVANCEMENTS("Advancements", AllAdvancements::provideLangEntries),
|
ADVANCEMENTS("Advancements", AllAdvancements::provideLangEntries),
|
||||||
INTERFACE("UI & Messages"),
|
INTERFACE("UI & Messages"),
|
||||||
|
@ -17,27 +18,23 @@ public enum AllLangPartials implements ILangPartial {
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
private String display;
|
private final String displayName;
|
||||||
private Supplier<JsonElement> provider;
|
private final Supplier<JsonElement> provider;
|
||||||
|
|
||||||
private AllLangPartials(String display) {
|
private AllLangPartials(String displayName) {
|
||||||
this.display = display;
|
this.displayName = displayName;
|
||||||
this.provider = getDefault();
|
String fileName = Lang.asId(name());
|
||||||
|
this.provider = () -> LangPartial.fromResource(Create.ID, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private AllLangPartials(String display, Supplier<JsonElement> customProvider) {
|
private AllLangPartials(String displayName, Supplier<JsonElement> provider) {
|
||||||
this.display = display;
|
this.displayName = displayName;
|
||||||
this.provider = customProvider;
|
this.provider = provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getDisplay() {
|
public String getDisplayName() {
|
||||||
return display;
|
return displayName;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getFileName() {
|
|
||||||
return Lang.asId(name());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
package com.simibubi.create.foundation.data;
|
|
||||||
|
|
||||||
import com.google.common.base.Supplier;
|
|
||||||
import com.google.gson.JsonElement;
|
|
||||||
import com.simibubi.create.Create;
|
|
||||||
import com.simibubi.create.foundation.utility.FilesHelper;
|
|
||||||
|
|
||||||
public interface ILangPartial {
|
|
||||||
|
|
||||||
String getDisplay();
|
|
||||||
String getFileName();
|
|
||||||
|
|
||||||
default String getModID() { return Create.ID; }
|
|
||||||
|
|
||||||
JsonElement provide();
|
|
||||||
|
|
||||||
private JsonElement fromResource() {
|
|
||||||
String fileName = getFileName();
|
|
||||||
String filepath = "assets/" + getModID() + "/lang/default/" + fileName + ".json";
|
|
||||||
JsonElement element = FilesHelper.loadJsonResource(filepath);
|
|
||||||
if (element == null)
|
|
||||||
throw new IllegalStateException(String.format("Could not find default lang file: %s", filepath));
|
|
||||||
return element;
|
|
||||||
}
|
|
||||||
|
|
||||||
default Supplier<JsonElement> getDefault() { return this::fromResource; }
|
|
||||||
}
|
|
|
@ -33,15 +33,15 @@ import net.minecraft.util.GsonHelper;
|
||||||
|
|
||||||
public class LangMerger implements DataProvider {
|
public class LangMerger implements DataProvider {
|
||||||
|
|
||||||
private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting()
|
private static final Gson GSON = new GsonBuilder().setPrettyPrinting()
|
||||||
.disableHtmlEscaping()
|
.disableHtmlEscaping()
|
||||||
.create();
|
.create();
|
||||||
static final String CATEGORY_HEADER = "\t\"_\": \"->------------------------] %s [------------------------<-\",";
|
private static final String CATEGORY_HEADER = "\t\"_\": \"->------------------------] %s [------------------------<-\",";
|
||||||
|
|
||||||
private DataGenerator gen;
|
private DataGenerator gen;
|
||||||
private final String modid;
|
private final String modid;
|
||||||
private final String displayName;
|
private final String displayName;
|
||||||
private final ILangPartial[] langPartials;
|
private final LangPartial[] langPartials;
|
||||||
|
|
||||||
private List<Object> mergedLangData;
|
private List<Object> mergedLangData;
|
||||||
private Map<String, List<Object>> populatedLangData;
|
private Map<String, List<Object>> populatedLangData;
|
||||||
|
@ -50,11 +50,7 @@ public class LangMerger implements DataProvider {
|
||||||
|
|
||||||
private List<String> langIgnore;
|
private List<String> langIgnore;
|
||||||
|
|
||||||
public LangMerger(DataGenerator gen) {
|
public <T extends LangPartial> LangMerger(DataGenerator gen, String modid, String displayName, T[] langPartials) {
|
||||||
this(gen, Create.ID, "Create", AllLangPartials.values());
|
|
||||||
}
|
|
||||||
|
|
||||||
public <T extends ILangPartial> LangMerger(DataGenerator gen, String modid, String displayName, T[] langPartials) {
|
|
||||||
this.gen = gen;
|
this.gen = gen;
|
||||||
this.modid = modid;
|
this.modid = modid;
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
|
@ -67,7 +63,7 @@ public class LangMerger implements DataProvider {
|
||||||
populateLangIgnore();
|
populateLangIgnore();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void populateLangIgnore() {
|
protected void populateLangIgnore() {
|
||||||
// Key prefixes added here will NOT be transferred to lang templates
|
// Key prefixes added here will NOT be transferred to lang templates
|
||||||
langIgnore.add("create.ponder.debug_"); // Ponder debug scene text
|
langIgnore.add("create.ponder.debug_"); // Ponder debug scene text
|
||||||
langIgnore.add("create.gui.chromatic_projector");
|
langIgnore.add("create.gui.chromatic_projector");
|
||||||
|
@ -82,7 +78,7 @@ public class LangMerger implements DataProvider {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "Lang merger";
|
return displayName + "'s lang merger";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -229,8 +225,8 @@ public class LangMerger implements DataProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void collectEntries() {
|
private void collectEntries() {
|
||||||
for (ILangPartial partial : langPartials)
|
for (LangPartial partial : langPartials)
|
||||||
addAll(partial.getDisplay(), partial.provide()
|
addAll(partial.getDisplayName(), partial.provide()
|
||||||
.getAsJsonObject());
|
.getAsJsonObject());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +243,6 @@ public class LangMerger implements DataProvider {
|
||||||
try (BufferedWriter bufferedwriter = Files.newBufferedWriter(target)) {
|
try (BufferedWriter bufferedwriter = Files.newBufferedWriter(target)) {
|
||||||
Create.LOGGER.info(message);
|
Create.LOGGER.info(message);
|
||||||
bufferedwriter.write(data);
|
bufferedwriter.write(data);
|
||||||
bufferedwriter.close();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.simibubi.create.foundation.data;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.simibubi.create.foundation.utility.FilesHelper;
|
||||||
|
|
||||||
|
public interface LangPartial {
|
||||||
|
String getDisplayName();
|
||||||
|
|
||||||
|
JsonElement provide();
|
||||||
|
|
||||||
|
static JsonElement fromResource(String namespace, String fileName) {
|
||||||
|
String path = "assets/" + namespace + "/lang/default/" + fileName + ".json";
|
||||||
|
JsonElement element = FilesHelper.loadJsonResource(path);
|
||||||
|
if (element == null)
|
||||||
|
throw new IllegalStateException(String.format("Could not find default lang file: %s", path));
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.simibubi.create.foundation.item;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.HumanoidModel.ArmPose;
|
||||||
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
|
public interface CustomArmPoseItem {
|
||||||
|
@Nullable
|
||||||
|
ArmPose getArmPose(ItemStack stack, AbstractClientPlayer player, InteractionHand hand);
|
||||||
|
}
|
|
@ -1,31 +0,0 @@
|
||||||
package com.simibubi.create.foundation.mixin;
|
|
||||||
|
|
||||||
import com.simibubi.create.content.curiosities.zapper.ZapperItem;
|
|
||||||
|
|
||||||
import net.minecraft.world.item.Item;
|
|
||||||
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|
||||||
|
|
||||||
import com.simibubi.create.content.curiosities.weapons.PotatoCannonItem;
|
|
||||||
import net.minecraft.client.model.HumanoidModel;
|
|
||||||
import net.minecraft.client.player.AbstractClientPlayer;
|
|
||||||
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
|
|
||||||
import net.minecraft.world.InteractionHand;
|
|
||||||
|
|
||||||
@Mixin(PlayerRenderer.class)
|
|
||||||
public class PlayerEntityRendererMixin {
|
|
||||||
@Inject(
|
|
||||||
method = "getArmPose",
|
|
||||||
at = @At("HEAD"),
|
|
||||||
cancellable = true
|
|
||||||
)
|
|
||||||
private static void getArmPose(AbstractClientPlayer player, InteractionHand hand, CallbackInfoReturnable<HumanoidModel.ArmPose> ci) {
|
|
||||||
Item handItem = player.getItemInHand(hand).getItem();
|
|
||||||
if (!player.swinging && (handItem instanceof PotatoCannonItem || handItem instanceof ZapperItem))
|
|
||||||
ci.setReturnValue(HumanoidModel.ArmPose.CROSSBOW_HOLD);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.simibubi.create.foundation.mixin;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
|
||||||
|
|
||||||
|
import com.simibubi.create.foundation.item.CustomArmPoseItem;
|
||||||
|
|
||||||
|
import net.minecraft.client.model.HumanoidModel.ArmPose;
|
||||||
|
import net.minecraft.client.player.AbstractClientPlayer;
|
||||||
|
import net.minecraft.client.renderer.entity.player.PlayerRenderer;
|
||||||
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
|
@Mixin(PlayerRenderer.class)
|
||||||
|
public class PlayerRendererMixin {
|
||||||
|
@Inject(method = "getArmPose(Lnet/minecraft/client/player/AbstractClientPlayer;Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/client/model/HumanoidModel$ArmPose;", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/player/AbstractClientPlayer;getItemInHand(Lnet/minecraft/world/InteractionHand;)Lnet/minecraft/world/item/ItemStack;"), locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true)
|
||||||
|
private static void onGetArmPose(AbstractClientPlayer player, InteractionHand hand, CallbackInfoReturnable<ArmPose> cir, ItemStack stack) {
|
||||||
|
if (stack.getItem() instanceof CustomArmPoseItem armPoseProvider) {
|
||||||
|
ArmPose pose = armPoseProvider.getArmPose(stack, player, hand);
|
||||||
|
if (pose != null) {
|
||||||
|
cir.setReturnValue(pose);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,8 +24,8 @@
|
||||||
"HeavyBootsOnPlayerMixin",
|
"HeavyBootsOnPlayerMixin",
|
||||||
"LevelRendererMixin",
|
"LevelRendererMixin",
|
||||||
"MapRendererMapInstanceMixin",
|
"MapRendererMapInstanceMixin",
|
||||||
"PlayerEntityRendererMixin",
|
|
||||||
"ModelDataRefreshMixin",
|
"ModelDataRefreshMixin",
|
||||||
|
"PlayerRendererMixin",
|
||||||
"WindowResizeMixin",
|
"WindowResizeMixin",
|
||||||
"accessor.AgeableListModelAccessor",
|
"accessor.AgeableListModelAccessor",
|
||||||
"accessor.GameRendererAccessor",
|
"accessor.GameRendererAccessor",
|
||||||
|
|
Loading…
Reference in a new issue