注册充电站be

This commit is contained in:
17146 2024-12-06 22:14:37 +08:00
parent f839d00768
commit c171eb0ee8
6 changed files with 187 additions and 10 deletions

View file

@ -0,0 +1,172 @@
package com.atsuishio.superbwarfare.block.entity;
import com.atsuishio.superbwarfare.init.ModBlockEntities;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.world.Container;
import net.minecraft.world.ContainerHelper;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.WorldlyContainer;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.wrapper.SidedInvWrapper;
import org.jetbrains.annotations.Nullable;
public class ChargingStationBlockEntity extends BlockEntity implements WorldlyContainer, MenuProvider {
protected static final int SLOT_FUEL = 0;
protected static final int SLOT_CHARGE = 1;
private static final int[] SLOTS_FOR_UP = new int[]{0};
private static final int[] SLOTS_FOR_SIDES = new int[]{0};
private static final int[] SLOTS_FOR_DOWN = new int[]{0};
public static final int MAX_DATA_COUNT = 2;
public static final int FUEL_TIME = 200;
public static final int CHARGE_SPEED = 20;
protected NonNullList<ItemStack> items = NonNullList.withSize(2, ItemStack.EMPTY);
private LazyOptional<?>[] itemHandlers = SidedInvWrapper.create(this, Direction.UP, Direction.DOWN, Direction.NORTH);
public int fuelTick;
public int energy;
public ChargingStationBlockEntity(BlockPos pos, BlockState state) {
super(ModBlockEntities.CHARGING_STATION.get(), pos, state);
}
public static void serverTick(Level pLevel, BlockPos pPos, BlockState pState, ChargingStationBlockEntity blockEntity) {
if (blockEntity.fuelTick > 0) {
}
}
public NonNullList<ItemStack> getItems() {
return this.items;
}
@Override
public void load(CompoundTag pTag) {
super.load(pTag);
this.energy = pTag.getInt("Energy");
this.fuelTick = pTag.getInt("FuelTick");
this.items = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
ContainerHelper.loadAllItems(pTag, this.items);
}
@Override
protected void saveAdditional(CompoundTag pTag) {
super.saveAdditional(pTag);
pTag.putInt("Energy", this.energy);
pTag.putInt("FuelTick", this.fuelTick);
ContainerHelper.saveAllItems(pTag, this.items);
}
@Override
public int[] getSlotsForFace(Direction pSide) {
return new int[0];
}
@Override
public boolean canPlaceItemThroughFace(int pIndex, ItemStack pItemStack, @Nullable Direction pDirection) {
return pIndex == SLOT_FUEL;
}
@Override
public boolean canTakeItemThroughFace(int pIndex, ItemStack pStack, Direction pDirection) {
return false;
}
@Override
public int getContainerSize() {
return this.items.size();
}
@Override
public boolean isEmpty() {
for (ItemStack itemstack : this.items) {
if (!itemstack.isEmpty()) {
return false;
}
}
return true;
}
@Override
public ItemStack getItem(int pSlot) {
return this.items.get(pSlot);
}
@Override
public ItemStack removeItem(int pSlot, int pAmount) {
return ContainerHelper.removeItem(this.items, pSlot, pAmount);
}
@Override
public ItemStack removeItemNoUpdate(int pSlot) {
return ContainerHelper.takeItem(this.items, pSlot);
}
@Override
public void setItem(int pSlot, ItemStack pStack) {
ItemStack itemstack = this.items.get(pSlot);
boolean flag = !pStack.isEmpty() && ItemStack.isSameItemSameTags(itemstack, pStack);
this.items.set(pSlot, pStack);
if (pStack.getCount() > this.getMaxStackSize()) {
pStack.setCount(this.getMaxStackSize());
}
if (pSlot == 0 && !flag) {
this.setChanged();
}
}
@Override
public boolean stillValid(Player pPlayer) {
return Container.stillValidBlockEntity(this, pPlayer);
}
@Override
public void clearContent() {
this.items.clear();
}
@Override
public Component getDisplayName() {
return Component.translatable("container.superbwarfare.charging_station");
}
@Nullable
@Override
public AbstractContainerMenu createMenu(int pContainerId, Inventory pPlayerInventory, Player pPlayer) {
return null;
}
@Override
public ClientboundBlockEntityDataPacket getUpdatePacket() {
return ClientboundBlockEntityDataPacket.create(this);
}
@Override
public CompoundTag getUpdateTag() {
CompoundTag compoundtag = new CompoundTag();
ContainerHelper.saveAllItems(compoundtag, this.items, true);
return compoundtag;
}
}

View file

@ -1,4 +1,4 @@
package com.atsuishio.superbwarfare.energy; package com.atsuishio.superbwarfare.capability.energy;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -12,6 +12,7 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
public class ItemEnergyProvider implements ICapabilityProvider { public class ItemEnergyProvider implements ICapabilityProvider {
private final LazyOptional<IEnergyStorage> capability; private final LazyOptional<IEnergyStorage> capability;
public ItemEnergyProvider(ItemStack stack, int energyCapacity) { public ItemEnergyProvider(ItemStack stack, int energyCapacity) {

View file

@ -1,9 +1,10 @@
package com.atsuishio.superbwarfare.energy; package com.atsuishio.superbwarfare.capability.energy;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.energy.EnergyStorage; import net.minecraftforge.energy.EnergyStorage;
public class ItemEnergyStorage extends EnergyStorage { public class ItemEnergyStorage extends EnergyStorage {
private static final String NBT_ENERGY = "Energy"; private static final String NBT_ENERGY = "Energy";
private final ItemStack stack; private final ItemStack stack;

View file

@ -1,6 +1,7 @@
package com.atsuishio.superbwarfare.init; package com.atsuishio.superbwarfare.init;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.block.entity.ChargingStationBlockEntity;
import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity; import com.atsuishio.superbwarfare.block.entity.ContainerBlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.DeferredRegister;
@ -13,5 +14,7 @@ public class ModBlockEntities {
public static final RegistryObject<BlockEntityType<ContainerBlockEntity>> CONTAINER = REGISTRY.register("container", public static final RegistryObject<BlockEntityType<ContainerBlockEntity>> CONTAINER = REGISTRY.register("container",
() -> BlockEntityType.Builder.of(ContainerBlockEntity::new, ModBlocks.CONTAINER.get()).build(null)); () -> BlockEntityType.Builder.of(ContainerBlockEntity::new, ModBlocks.CONTAINER.get()).build(null));
public static final RegistryObject<BlockEntityType<ChargingStationBlockEntity>> CHARGING_STATION = REGISTRY.register("charging_station",
() -> BlockEntityType.Builder.of(ChargingStationBlockEntity::new, ModBlocks.CHARGING_STATION.get()).build(null));
} }

View file

@ -1,20 +1,20 @@
package com.atsuishio.superbwarfare.item.gun.sniper; package com.atsuishio.superbwarfare.item.gun.sniper;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.capability.energy.ItemEnergyProvider;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.SentinelItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.SentinelItemRenderer;
import com.atsuishio.superbwarfare.energy.ItemEnergyProvider; import com.atsuishio.superbwarfare.client.tooltip.component.SentinelImageComponent;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.RarityTool; import com.atsuishio.superbwarfare.tools.RarityTool;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.tooltip.component.SentinelImageComponent;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.AnimatedItem;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;

View file

@ -1,10 +1,10 @@
package com.atsuishio.superbwarfare.item.gun.special; package com.atsuishio.superbwarfare.item.gun.special;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.capability.energy.ItemEnergyProvider;
import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.TaserItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.TaserItemRenderer;
import com.atsuishio.superbwarfare.client.tooltip.component.EnergyImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.EnergyImageComponent;
import com.atsuishio.superbwarfare.energy.ItemEnergyProvider;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModPerks; import com.atsuishio.superbwarfare.init.ModPerks;