正确注册物品能量能力

This commit is contained in:
Light_Quanta 2025-03-30 12:57:31 +08:00
parent 78d98e08f6
commit 5df7a14afb
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
7 changed files with 32 additions and 66 deletions

View file

@ -1,21 +0,0 @@
package com.atsuishio.superbwarfare.capability.energy;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.capabilities.ICapabilityProvider;
import net.neoforged.neoforge.energy.EnergyStorage;
import net.neoforged.neoforge.energy.IEnergyStorage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class ItemEnergyProvider implements ICapabilityProvider<ItemStack, Void, IEnergyStorage> {
private final EnergyStorage energyStorage;
public ItemEnergyProvider(int energyCapacity) {
this.energyStorage = new EnergyStorage(energyCapacity);
}
@Override
public @Nullable IEnergyStorage getCapability(@NotNull ItemStack object, Void context) {
return energyStorage;
}
}

View file

@ -5,26 +5,17 @@ import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.energy.EnergyStorage;
import net.neoforged.neoforge.energy.IEnergyStorage;
import org.jetbrains.annotations.NotNull;
import java.util.Optional;
public class BatteryItem extends Item {
public class BatteryItem extends Item implements EnergyStorageItem {
public int maxEnergy;
public IEnergyStorage getEnergyStorage() {
return energy;
}
private final IEnergyStorage energy;
public BatteryItem(int maxEnergy, Properties properties) {
super(properties.stacksTo(1));
this.maxEnergy = maxEnergy;
this.energy = new EnergyStorage(maxEnergy);
}
@Override
@ -64,4 +55,8 @@ public class BatteryItem extends Item {
return stack;
}
@Override
public int getMaxEnergy() {
return maxEnergy;
}
}

View file

@ -0,0 +1,5 @@
package com.atsuishio.superbwarfare.item;
public interface EnergyStorageItem {
int getMaxEnergy();
}

View file

@ -7,6 +7,7 @@ import com.atsuishio.superbwarfare.client.tooltip.component.SecondaryCataclysmIm
import com.atsuishio.superbwarfare.entity.projectile.GunGrenadeEntity;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.*;
import com.atsuishio.superbwarfare.item.EnergyStorageItem;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
@ -32,8 +33,6 @@ import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.energy.EnergyStorage;
import net.neoforged.neoforge.energy.IEnergyStorage;
import net.neoforged.neoforge.network.PacketDistributor;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem;
@ -45,13 +44,7 @@ import software.bernie.geckolib.util.GeckoLibUtil;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Optional;
public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireWeapon {
private final IEnergyStorage energyStorage = new EnergyStorage(24000);
public IEnergyStorage getEnergyStorage() {
return energyStorage;
}
public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireWeapon, EnergyStorageItem {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public static ItemDisplayContext transformType;
@ -71,12 +64,6 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
return Math.round((float) (cap != null ? cap.getEnergyStored() : 0) * 13.0F / 24000F);
}
// TODO register cap
// @Override
// public ICapabilityProvider initCapabilities(ItemStack stack, CompoundTag tag) {
// return new ItemEnergyProvider(stack, energyCapacity.get());
// }
@Override
public int getBarColor(@NotNull ItemStack pStack) {
return 0x95E9FF;
@ -347,4 +334,9 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW
GunsTool.setGunIntTag(tag, "Ammo", GunsTool.getGunIntTag(tag, "Ammo", 0) - 1);
player.getCooldowns().addCooldown(stack.getItem(), 6);
}
@Override
public int getMaxEnergy() {
return 24000;
}
}

View file

@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModRarity;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.EnergyStorageItem;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
@ -24,8 +25,6 @@ import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.energy.EnergyStorage;
import net.neoforged.neoforge.energy.IEnergyStorage;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
@ -37,21 +36,13 @@ import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Optional;
import java.util.Set;
public class SentinelItem extends GunItem implements GeoItem {
public IEnergyStorage getEnergyStorage() {
return energyStorage;
}
private final IEnergyStorage energyStorage;
public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public static ItemDisplayContext transformType;
public SentinelItem() {
super(new Properties().stacksTo(1).rarity(ModRarity.getLegendary()));
this.energyStorage = new EnergyStorage(24000);
}
@Override
@ -213,4 +204,9 @@ public class SentinelItem extends GunItem implements GeoItem {
public int getAvailableFireModes() {
return FireMode.SEMI.flag;
}
@Override
public int getMaxEnergy() {
return 24000;
}
}

View file

@ -10,6 +10,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModPerks;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.EnergyStorageItem;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.SpecialFireWeapon;
import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage;
@ -34,8 +35,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.level.Level;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.energy.EnergyStorage;
import net.neoforged.neoforge.energy.IEnergyStorage;
import net.neoforged.neoforge.network.PacketDistributor;
import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.animatable.GeoItem;
@ -48,22 +47,16 @@ import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Optional;
import java.util.Set;
public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, EnergyStorageItem {
public static final int MAX_ENERGY = 6000;
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public static ItemDisplayContext transformType;
public IEnergyStorage getEnergyStorage() {
return energyStorage;
}
private final IEnergyStorage energyStorage;
public TaserItem() {
super(new Properties().stacksTo(1).rarity(Rarity.COMMON));
this.energyStorage = new EnergyStorage(MAX_ENERGY);
}
@Override
@ -284,4 +277,9 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon {
energyStorage.extractEnergy(400 + 100 * perkLevel, false);
tag.putBoolean("shoot", true);
}
@Override
public int getMaxEnergy() {
return MAX_ENERGY;
}
}

View file

@ -53,5 +53,6 @@ public class NetworkRegistry {
registrar.playToServer(InteractMessage.TYPE, InteractMessage.STREAM_CODEC, InteractMessage::handler);
registrar.playToServer(AdjustMortarAngleMessage.TYPE, AdjustMortarAngleMessage.STREAM_CODEC, AdjustMortarAngleMessage::handler);
registrar.playToServer(ChangeVehicleSeatMessage.TYPE, ChangeVehicleSeatMessage.STREAM_CODEC, ChangeVehicleSeatMessage::handler);
registrar.playToServer(ShowChargingRangeMessage.TYPE, ShowChargingRangeMessage.STREAM_CODEC, ShowChargingRangeMessage::handler);
}
}