添加otto功能和better combat依赖

This commit is contained in:
17146 2025-05-22 17:16:59 +08:00 committed by Light_Quanta
parent 1d4ad3fcdd
commit 69a7f614b7
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
9 changed files with 131 additions and 13 deletions

View file

@ -143,7 +143,9 @@ dependencies {
// implementation "curse.maven:cupboard-326652:6078150"
// implementation "curse.maven:connectivity-470193:6229173"
// // mod
// mod
implementation "curse.maven:better-combat-by-daedelus-639842:6532547"
implementation "curse.maven:playeranimator-658587:6024462"
// implementation fg.deobf("curse.maven:oculus-581495:6020952")
// implementation fg.deobf("curse.maven:embeddium-908741:5681725")
// implementation fg.deobf("curse.maven:timeless-and-classics-zero-1028108:6069384")

View file

@ -1,6 +1,6 @@
package com.atsuishio.superbwarfare.client.tooltip;
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
import com.atsuishio.superbwarfare.client.tooltip.component.CellImageComponent;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
@ -19,7 +19,7 @@ public class ClientCellImageTooltip implements ClientTooltipComponent {
protected final int height;
protected final ItemStack stack;
public ClientCellImageTooltip(GunImageComponent tooltip) {
public ClientCellImageTooltip(CellImageComponent tooltip) {
this.width = tooltip.width;
this.height = tooltip.height;
this.stack = tooltip.stack;

View file

@ -1,19 +1,21 @@
package com.atsuishio.superbwarfare.client.tooltip.component;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.ItemStack;
public class CellImageComponent extends GunImageComponent {
public class CellImageComponent implements TooltipComponent {
public int width;
public int height;
public ItemStack stack;
public CellImageComponent(int width, int height, ItemStack stack) {
super(width, height, stack);
this.width = width;
this.height = height;
this.stack = stack;
}
public CellImageComponent(ItemStack stack) {
this(32, 16, stack);
}
}

View file

@ -142,7 +142,10 @@ public class ModItems {
public static final DeferredHolder<Item, Detonator> DETONATOR = ITEMS.register("detonator", Detonator::new);
public static final DeferredHolder<Item, TargetDeployer> TARGET_DEPLOYER = ITEMS.register("target_deployer", TargetDeployer::new);
public static final DeferredHolder<Item, DPSGeneratorDeployer> DPS_GENERATOR_DEPLOYER = ITEMS.register("dps_generator_deployer", DPSGeneratorDeployer::new);
public static final DeferredHolder<Item, Item> KNIFE = ITEMS.register("knife", () -> new SwordItem(ModItemTier.STEEL, new Item.Properties().attributes(SwordItem.createAttributes(ModItemTier.STEEL, 0, -1.8f))));
public static final DeferredHolder<Item, Item> KNIFE = ITEMS.register("knife", () -> new SwordItem(ModItemTier.STEEL, new Item.Properties()
.attributes(SwordItem.createAttributes(ModItemTier.STEEL, 0, -1.8f))
.durability(1200)
));
public static final DeferredHolder<Item, Hammer> HAMMER = ITEMS.register("hammer", Hammer::new);
public static final DeferredHolder<Item, ElectricBaton> ELECTRIC_BATON = ITEMS.register("electric_baton", ElectricBaton::new);
public static final DeferredHolder<Item, Crowbar> CROWBAR = ITEMS.register("crowbar", Crowbar::new);

View file

@ -2,10 +2,7 @@ package com.atsuishio.superbwarfare.init;
import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.api.event.RegisterContainersEvent;
import com.atsuishio.superbwarfare.item.ArmorPlate;
import com.atsuishio.superbwarfare.item.BatteryItem;
import com.atsuishio.superbwarfare.item.C4Bomb;
import com.atsuishio.superbwarfare.item.SmallContainerBlockItem;
import com.atsuishio.superbwarfare.item.*;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
@ -94,6 +91,9 @@ public class ModTabs {
if (registryObject.get() instanceof BatteryItem batteryItem) {
output.accept(batteryItem.makeFullEnergyStack());
}
if (registryObject.get() == ModItems.ELECTRIC_BATON.get()) {
output.accept(ElectricBaton.makeFullEnergyStack());
}
}))
.build());

View file

@ -1,18 +1,123 @@
package com.atsuishio.superbwarfare.item;
import com.atsuishio.superbwarfare.client.tooltip.component.CellImageComponent;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModMobEffects;
import com.atsuishio.superbwarfare.tiers.ModItemTier;
import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import net.neoforged.neoforge.capabilities.Capabilities;
import org.jetbrains.annotations.NotNull;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;
import java.util.Optional;
public class ElectricBaton extends SwordItem implements EnergyStorageItem {
public static final int MAX_ENERGY = 6000;
public static final int ENERGY_COST = 1000;
public static final String TAG_OPEN = "Open";
public ElectricBaton() {
super(ModItemTier.STEEL, new Properties()
.durability(1114)
.attributes(SwordItem.createAttributes(ModItemTier.STEEL, 3, -2.5f))
.attributes(SwordItem.createAttributes(ModItemTier.STEEL, 2, -2.5f))
);
}
@Override
@ParametersAreNonnullByDefault
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
tooltipComponents.add(Component.translatable("des.superbwarfare.electric_baton").withStyle(ChatFormatting.AQUA));
if (NBTTool.getTag(stack).getBoolean(TAG_OPEN)) {
tooltipComponents.add(Component.translatable("des.superbwarfare.electric_baton.open").withStyle(ChatFormatting.GRAY));
}
}
@Override
public int getMaxEnergy() {
return 6000;
}
@Override
@ParametersAreNonnullByDefault
public @NotNull InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
ItemStack stack = player.getItemInHand(usedHand);
if (player.isCrouching()) {
var tag = NBTTool.getTag(stack);
tag.putBoolean(TAG_OPEN, !tag.getBoolean(TAG_OPEN));
NBTTool.saveTag(stack, tag);
player.displayClientMessage(Component.translatable("des.superbwarfare.electric_baton." + (tag.getBoolean(TAG_OPEN) ? "open" : "close")), true);
}
return InteractionResultHolder.fail(stack);
}
@Override
public boolean isBarVisible(@NotNull ItemStack stack) {
return NBTTool.getTag(stack).getBoolean(TAG_OPEN);
}
@Override
public int getBarWidth(ItemStack stack) {
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
if (cap == null) return 0;
return Math.round(cap.getEnergyStored() * 13F / MAX_ENERGY);
}
@Override
public int getBarColor(@NotNull ItemStack pStack) {
return 0xFFFF00;
}
@Override
@ParametersAreNonnullByDefault
public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
if (NBTTool.getTag(stack).getBoolean(TAG_OPEN)) {
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
if (cap != null && cap.getEnergyStored() >= ENERGY_COST) {
cap.extractEnergy(ENERGY_COST, false);
if (!target.level().isClientSide) {
target.addEffect(new MobEffectInstance(ModMobEffects.SHOCK, 200, 2), attacker);
}
}
}
return super.hurtEnemy(stack, target, attacker);
}
@Override
public @NotNull Optional<TooltipComponent> getTooltipImage(@NotNull ItemStack pStack) {
return Optional.of(new CellImageComponent(pStack));
}
public static ItemStack makeFullEnergyStack() {
ItemStack stack = new ItemStack(ModItems.ELECTRIC_BATON.get());
var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM);
if (cap != null) {
cap.receiveEnergy(MAX_ENERGY, false);
}
var tag = NBTTool.getTag(stack);
tag.putBoolean(TAG_OPEN, true);
NBTTool.saveTag(stack, tag);
return stack;
}
}

View file

@ -11,7 +11,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.function.Supplier;
public enum ModItemTier implements Tier {
STEEL(400, 6.0f, 5.5f, 15, () -> Ingredient.of(ModItems.STEEL_INGOT.get())),
STEEL(400, 6, 5, 15, () -> Ingredient.of(ModItems.STEEL_INGOT.get())),
;
private final int uses;

View file

@ -185,6 +185,9 @@
"item.superbwarfare.knife": "Knife",
"item.superbwarfare.hammer": "Hammer",
"item.superbwarfare.electric_baton": "Electric Baton",
"des.superbwarfare.electric_baton": "Right click while sneaking to switch electroshock mode",
"des.superbwarfare.electric_baton.open": "Electroshock Mode Enabled",
"des.superbwarfare.electric_baton.close": "Electroshock Mode Disabled",
"item.superbwarfare.crowbar": "Crowbar",
"des.superbwarfare.crowbar": "Right-click to open containers. Pick up vehicles when sneaking",
"item.superbwarfare.defuser": "Defuser",

View file

@ -185,6 +185,9 @@
"item.superbwarfare.knife": "军刀",
"item.superbwarfare.hammer": "大锤",
"item.superbwarfare.electric_baton": "电棍",
"des.superbwarfare.electric_baton": "潜行使用以开关电击模式",
"des.superbwarfare.electric_baton.open": "已开启电击模式",
"des.superbwarfare.electric_baton.close": "已关闭电击模式",
"item.superbwarfare.crowbar": "撬棍",
"des.superbwarfare.crowbar": "右击以开启集装箱,潜行时右击以回收载具",
"item.superbwarfare.defuser": "拆弹器",