Skip to content

Commit

Permalink
Add method to register a crossbow item predicate
Browse files Browse the repository at this point in the history
So no need to copy and paste if you want to add more custom crossbow variants
  • Loading branch information
KnightMiner committed Jan 11, 2023
1 parent 86c1af9 commit 1dbcffa
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,17 @@

import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.client.renderer.item.ItemPropertyFunction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import slimeknights.tconstruct.TConstruct;
import slimeknights.tconstruct.library.tools.capability.TinkerDataCapability;
import slimeknights.tconstruct.library.tools.item.ModifiableLauncherItem;
import slimeknights.tconstruct.library.tools.nbt.ToolStack;
import slimeknights.tconstruct.tools.item.ModifiableCrossbowItem;

import java.util.Objects;

/** Properties for tinker tools */
public class TinkerItemProperties {
Expand All @@ -25,9 +32,33 @@ public class TinkerItemProperties {
/** Boolean indicating the bow is pulling */
private static final ItemPropertyFunction PULLING = (stack, level, holder, seed) -> holder != null && holder.isUsingItem() && holder.getUseItem() == stack ? 1.0F : 0.0F;

/** ID for ammo property */
private static final ResourceLocation AMMO_ID = TConstruct.getResource("ammo");
/** Int declaring ammo type */
private static final ItemPropertyFunction AMMO = (stack, level, entity, seed) -> {
CompoundTag nbt = stack.getTag();
if (nbt != null) {
CompoundTag persistentData = nbt.getCompound(ToolStack.TAG_PERSISTENT_MOD_DATA);
if (!persistentData.isEmpty()) {
CompoundTag ammo = persistentData.getCompound(ModifiableCrossbowItem.KEY_CROSSBOW_AMMO.toString());
if (!ammo.isEmpty()) {
// no sense having two keys for ammo, just set 1 for arrow, 2 for fireworks
return ammo.getString("id").equals(Objects.requireNonNull(Items.FIREWORK_ROCKET.getRegistryName()).toString()) ? 2 : 1;
}
}
}
return 0;
};

/** Registers properties for a bow */
public static void registerBowProperties(Item item) {
ItemProperties.register(item, PULL_ID, PULL);
ItemProperties.register(item, PULLING_ID, PULLING);
}

/** Registers properties for a bow */
public static void registerCrossbowProperties(Item item) {
registerBowProperties(item);
ItemProperties.register(item, AMMO_ID, AMMO);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@
import net.minecraft.client.color.item.ItemColors;
import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.renderer.entity.ItemEntityRenderer;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.packs.PackType;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.Items;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.ClientRegistry;
import net.minecraftforge.client.event.ColorHandlerEvent;
Expand Down Expand Up @@ -50,7 +47,6 @@
import slimeknights.tconstruct.library.client.modifiers.TankModifierModel;
import slimeknights.tconstruct.library.modifiers.ModifierId;
import slimeknights.tconstruct.library.modifiers.ModifierManager;
import slimeknights.tconstruct.library.tools.nbt.ToolStack;
import slimeknights.tconstruct.library.utils.HarvestTiers;
import slimeknights.tconstruct.library.utils.Util;
import slimeknights.tconstruct.tools.client.ArmorModelHelper;
Expand All @@ -62,14 +58,11 @@
import slimeknights.tconstruct.tools.client.ToolContainerScreen;
import slimeknights.tconstruct.tools.client.particles.AxeAttackParticle;
import slimeknights.tconstruct.tools.client.particles.HammerAttackParticle;
import slimeknights.tconstruct.tools.item.ModifiableCrossbowItem;
import slimeknights.tconstruct.tools.item.ModifierCrystalItem;
import slimeknights.tconstruct.tools.logic.InteractionHandler;
import slimeknights.tconstruct.tools.modifiers.ability.armor.DoubleJumpModifier;
import slimeknights.tconstruct.tools.network.TinkerControlPacket;

import java.util.Objects;

import static slimeknights.tconstruct.library.client.model.tools.ToolModel.registerItemColors;

@SuppressWarnings("unused")
Expand Down Expand Up @@ -133,23 +126,8 @@ static void clientSetupEvent(FMLClientSetupEvent event) {
MenuScreens.register(TinkerTools.toolContainer.get(), ToolContainerScreen::new);

// properties
TinkerItemProperties.registerBowProperties(TinkerTools.crossbow.asItem());
TinkerItemProperties.registerCrossbowProperties(TinkerTools.crossbow.asItem());
TinkerItemProperties.registerBowProperties(TinkerTools.longbow.asItem());
// no sense having two keys for ammo, just set 1 for arrow, 2 for fireworks
String fireworksID = Objects.requireNonNull(Items.FIREWORK_ROCKET.getRegistryName()).toString();
ItemProperties.register(TinkerTools.crossbow.asItem(), TConstruct.getResource("ammo"), (stack, level, entity, seed) -> {
CompoundTag nbt = stack.getTag();
if (nbt != null) {
CompoundTag persistentData = nbt.getCompound(ToolStack.TAG_PERSISTENT_MOD_DATA);
if (!persistentData.isEmpty()) {
CompoundTag ammo = persistentData.getCompound(ModifiableCrossbowItem.KEY_CROSSBOW_AMMO.toString());
if (!ammo.isEmpty()) {
return ammo.getString("id").equals(fireworksID) ? 2 : 1;
}
}
}
return 0;
});
}

@SubscribeEvent
Expand Down

0 comments on commit 1dbcffa

Please sign in to comment.