添加otto功能和better combat依赖
This commit is contained in:
parent
1d4ad3fcdd
commit
69a7f614b7
9 changed files with 131 additions and 13 deletions
|
@ -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")
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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": "拆弹器",
|
||||
|
|
Loading…
Add table
Reference in a new issue