Skip to content

Commit

Permalink
Implement crossbows
Browse files Browse the repository at this point in the history
  • Loading branch information
KnightMiner committed Dec 23, 2022
1 parent ca20a43 commit 656456a
Show file tree
Hide file tree
Showing 21 changed files with 443 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"tconstruct:dagger",
"tconstruct:sword",
"tconstruct:cleaver",
"tconstruct:crossbow",
"tconstruct:longbow",
"tconstruct:flint_and_brick",
"tconstruct:travelers_boots",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"replace": false,
"values": [
"tconstruct:crossbow",
"tconstruct:longbow"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"tconstruct:pickadze",
"tconstruct:excavator",
"tconstruct:kama",
"tconstruct:crossbow",
"tconstruct:longbow",
"tconstruct:flint_and_brick",
"#tconstruct:modifiable/melee/primary",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"tconstruct:dagger",
"tconstruct:sword",
"tconstruct:cleaver",
"tconstruct:crossbow",
"tconstruct:longbow",
"tconstruct:slime_helmet"
]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
{
"replace": false,
"values": []
"values": [
"tconstruct:crossbow"
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"parts": [
{
"item": "tconstruct:bow_limb"
},
{
"item": "tconstruct:bow_grip"
},
{
"item": "tconstruct:bowstring"
}
],
"stats": {
"base": {
"tconstruct:attack_damage": 0.0,
"tconstruct:attack_speed": 1.0,
"tconstruct:draw_speed": 0.8
},
"multipliers": {
"tconstruct:durability": 2.0
}
},
"slots": {
"upgrades": 3,
"abilities": 1
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,8 @@ private void addTools() {
addToolTags(TinkerTools.sword, MULTIPART_TOOL, DURABILITY, HARVEST, MELEE_PRIMARY, ONE_HANDED, SWORD, AOE);
addToolTags(TinkerTools.cleaver, MULTIPART_TOOL, DURABILITY, HARVEST, MELEE_PRIMARY, ONE_HANDED, SWORD, AOE);
// bow
addToolTags(TinkerTools.longbow, MULTIPART_TOOL, DURABILITY, MELEE, LONGBOWS, INTERACTABLE_LEFT);
this.tag(CROSSBOWS); // TODO: crossbows
addToolTags(TinkerTools.crossbow, MULTIPART_TOOL, DURABILITY, MELEE, CROSSBOWS, INTERACTABLE_LEFT);
addToolTags(TinkerTools.longbow, MULTIPART_TOOL, DURABILITY, MELEE, LONGBOWS, INTERACTABLE_LEFT);
// specialized
addToolTags(TinkerTools.flintAndBrick, DURABILITY, MELEE, ONE_HANDED, AOE);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import net.minecraft.data.DataGenerator;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.effect.MobEffectCategory;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.entity.projectile.Projectile;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.item.crafting.RecipeSerializer;
Expand Down Expand Up @@ -532,8 +532,8 @@ void commonSetup(final FMLCommonSetupEvent event) {
TinkerDataCapability.register();
PersistentDataCapability.register();
EntityModifierCapability.register();
// by default, we support modifying arrows, though other entities may come in the future
EntityModifierCapability.registerEntityPredicate(entity -> entity instanceof AbstractArrow);
// by default, we support modifying projectiles (arrows or fireworks mainly, but maybe other stuff). other entities may come in the future
EntityModifierCapability.registerEntityPredicate(entity -> entity instanceof Projectile);
}

@SubscribeEvent
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/slimeknights/tconstruct/tools/TinkerTools.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
import slimeknights.tconstruct.tools.item.CrystalshotItem;
import slimeknights.tconstruct.tools.item.CrystalshotItem.CrystalshotEntity;
import slimeknights.tconstruct.tools.item.ModifiableBowItem;
import slimeknights.tconstruct.tools.item.ModifiableCrossbowItem;
import slimeknights.tconstruct.tools.item.ModifiableSwordItem;
import slimeknights.tconstruct.tools.item.PlateArmorItem;
import slimeknights.tconstruct.tools.item.SlimelytraItem;
Expand Down Expand Up @@ -117,6 +118,7 @@ public TinkerTools() {
public static final ItemObject<ModifiableItem> sword = ITEMS.register("sword", () -> new ModifiableSwordItem(TOOL, ToolDefinitions.SWORD));
public static final ItemObject<ModifiableItem> cleaver = ITEMS.register("cleaver", () -> new ModifiableSwordItem(TOOL, ToolDefinitions.CLEAVER));

public static final ItemObject<ModifiableLauncherItem> crossbow = ITEMS.register("crossbow", () -> new ModifiableCrossbowItem(TOOL, ToolDefinitions.CROSSBOW));
public static final ItemObject<ModifiableLauncherItem> longbow = ITEMS.register("longbow", () -> new ModifiableBowItem(TOOL, ToolDefinitions.LONGBOW));

public static final ItemObject<ModifiableItem> flintAndBrick = ITEMS.register("flint_and_brick", () -> new ModifiableItem(TOOL, ToolDefinitions.FLINT_AND_BRICK));
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/slimeknights/tconstruct/tools/ToolClientEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@
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 @@ -45,6 +48,7 @@
import slimeknights.tconstruct.library.client.modifiers.NormalModifierModel;
import slimeknights.tconstruct.library.client.modifiers.TankModifierModel;
import slimeknights.tconstruct.library.modifiers.ModifierManager;
import slimeknights.tconstruct.library.tools.nbt.ToolStack;
import slimeknights.tconstruct.library.utils.HarvestTiers;
import slimeknights.tconstruct.tools.client.ArmorModelHelper;
import slimeknights.tconstruct.tools.client.CrystalshotRenderer;
Expand All @@ -55,10 +59,13 @@
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.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 @@ -122,7 +129,23 @@ static void clientSetupEvent(FMLClientSetupEvent event) {
MenuScreens.register(TinkerTools.toolContainer.get(), ToolContainerScreen::new);

// properties
TinkerItemProperties.registerBowProperties(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
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public final class ToolDefinitions {
public static final ToolDefinition CLEAVER = ToolDefinition.builder(TinkerTools.cleaver).meleeHarvest().build();

// bows
public static final ToolDefinition CROSSBOW = ToolDefinition.builder(TinkerTools.crossbow).ranged().build();
public static final ToolDefinition LONGBOW = ToolDefinition.builder(TinkerTools.longbow).ranged().build();

// special
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,17 @@ TinkerTags.Blocks.TREE_LOGS, new TreeAOEIterator(0, 0),
.attack(new SweepWeaponAttack(2));

// bows
define(ToolDefinitions.CROSSBOW)
// parts
.part(bowLimb)
.part(bowGrip)
.part(bowstring)
// stats
.stat(ToolStats.ATTACK_DAMAGE, 0f)
.stat(ToolStats.ATTACK_SPEED, 1.0f)
.stat(ToolStats.DRAW_SPEED, 0.8f)
.multiplier(ToolStats.DURABILITY, 2f)
.smallToolStartingSlots();
define(ToolDefinitions.LONGBOW)
// parts
.part(bowLimb)
Expand Down

0 comments on commit 656456a

Please sign in to comment.