Skip to content

Commit eb87c3a

Browse files
some fix
1 parent 5f75df9 commit eb87c3a

File tree

7 files changed

+126
-145
lines changed

7 files changed

+126
-145
lines changed

src/main/java/com/rae/creatingspace/content/event/CSEventHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.rae.creatingspace.content.life_support.INeedOxygen;
88
import com.rae.creatingspace.content.life_support.sealer.RoomPressuriserBlockEntity;
99
import com.rae.creatingspace.content.life_support.spacesuit.OxygenBacktankBlockEntity;
10+
import com.rae.creatingspace.content.life_support.spacesuit.UpgradableEquipment;
1011
import com.rae.creatingspace.init.CSDamageSources;
1112
import com.rae.creatingspace.init.TagsInit;
1213
import com.rae.creatingspace.legacy.saved.DesignCommands;
@@ -223,6 +224,7 @@ public static void registerCapabilities(RegisterCapabilitiesEvent event) {
223224
CryogenicTankBlockEntity.registerCapabilities(event);
224225
CryogenicTankItem.registerCapabilities(event);
225226
OxygenBacktankBlockEntity.registerCapabilities(event);
227+
UpgradableEquipment.registerCapabilities(event);
226228
}
227229

228230
}
Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.rae.creatingspace.content.fluids.storage;
22

3+
import com.rae.creatingspace.init.DataComponentsInit;
34
import com.rae.creatingspace.init.ingameobject.BlockInit;
45
import com.rae.creatingspace.init.ingameobject.ItemInit;
56
import com.simibubi.create.foundation.ICapabilityProvider;
@@ -28,26 +29,20 @@ public CryogenicTankItem(Block block, Properties properties) {
2829
super(block, properties);
2930
}
3031
//TODO capabilities -> register capabilities in EventHandler with an item fluid capability
31-
@Override
32-
public @Nullable ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) {
33-
return
34-
}
3532
public static void registerCapabilities(RegisterCapabilitiesEvent event) {
3633
event.registerItem(
3734
Capabilities.FluidHandler.ITEM,
38-
(itemStack, item)->{
39-
itemStack.get();
40-
return new FluidHandlerItemStack(DataComponents.,itemStack, 4000) {
41-
@Override
42-
public boolean canDrainFluidType(FluidStack fluid) {
43-
return fluid.getFluid().getFluidType().getTemperature() < 200;
44-
}
45-
46-
@Override
47-
public boolean canFillFluidType(FluidStack fluid) {
48-
return fluid.getFluid().getFluidType().getTemperature() < 200;
49-
}
50-
};
35+
(itemStack, item)->
36+
new FluidHandlerItemStack(() ->DataComponentsInit.SIMPLE_FLUID_CONTENT,itemStack, 4000) {
37+
@Override
38+
public boolean canDrainFluidType(FluidStack fluid) {
39+
return fluid.getFluid().getFluidType().getTemperature() < 200;
40+
}
41+
42+
@Override
43+
public boolean canFillFluidType(FluidStack fluid) {
44+
return fluid.getFluid().getFluidType().getTemperature() < 200;
45+
}
5146
},
5247
BlockInit.CRYOGENIC_TANK.get().asItem()
5348

@@ -57,12 +52,11 @@ public boolean canFillFluidType(FluidStack fluid) {
5752
@Override
5853
public Component getName(ItemStack itemStack) {
5954

60-
CustomData data = itemStack.get(DataComponents.CUSTOM_DATA);
61-
if (data != null) {
62-
CompoundTag fluid = data.copyTag().getCompound("Fluid");
63-
CompoundTag tag = fluid.getCompound("id");
55+
FluidHandlerItemStack fluidTank = (FluidHandlerItemStack) itemStack.getCapability(Capabilities.FluidHandler.ITEM);
56+
if (fluidTank != null) {
57+
FluidStack fluid = fluidTank.getFluid();
6458
return Component.empty().append(super.getName(itemStack)).append(" (").append(
65-
tag.toString()
59+
Component.translatable(fluid.getTranslationKey())
6660
).append(")");
6761
}
6862
return super.getName(itemStack);
@@ -71,13 +65,11 @@ public Component getName(ItemStack itemStack) {
7165
@Override
7266
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> components, TooltipFlag tooltipFlag) {
7367
//TODO make a string constant somewhere for "Fluid"
74-
CustomData data = stack.get(DataComponents.CUSTOM_DATA);
75-
if (data!=null) {
76-
CompoundTag tank = (CompoundTag) data.copyTag().get("Fluid");
77-
78-
if (tank == null) tank = new CompoundTag();
79-
80-
FluidStack fluid = FluidStack.parseOptional(Objects.requireNonNull(context.registries()),tank);
68+
//TODO this should be the standard way to register a tank in an item. -> replace each call to custom data and
69+
// parsing of fluid stack to a call to capability
70+
FluidHandlerItemStack fluidTank = (FluidHandlerItemStack) stack.getCapability(Capabilities.FluidHandler.ITEM);
71+
if (fluidTank != null) {
72+
FluidStack fluid = fluidTank.getFluid();
8173

8274
if (!fluid.isEmpty()) {
8375
components.add(
@@ -94,12 +86,4 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List<Compon
9486

9587
super.appendHoverText(stack, context, components, tooltipFlag);
9688
}
97-
98-
@Override
99-
public int getMaxStackSize(ItemStack stack) {
100-
return super.getMaxStackSize(stack);
101-
}
102-
103-
104-
10589
}

src/main/java/com/rae/creatingspace/content/life_support/spacesuit/UpgradableEquipment.java

Lines changed: 26 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.common.collect.Multimap;
44
import com.simibubi.create.content.equipment.armor.BaseArmorItem;
5+
import com.simibubi.create.foundation.ICapabilityProvider;
56
import net.minecraft.core.Direction;
67
import net.minecraft.nbt.CompoundTag;
78
import net.minecraft.network.chat.Component;
@@ -18,14 +19,13 @@
1819
import net.minecraft.world.item.ArmorMaterial;
1920
import net.minecraft.world.item.ItemStack;
2021
import net.minecraft.world.item.TooltipFlag;
22+
import net.minecraft.world.item.component.ItemAttributeModifiers;
2123
import net.minecraft.world.item.context.UseOnContext;
2224
import net.minecraft.world.level.Level;
23-
import net.minecraftforge.common.capabilities.Capability;
24-
import net.minecraftforge.common.capabilities.ForgeCapabilities;
25-
import net.minecraftforge.common.capabilities.ICapabilityProvider;
26-
import net.minecraftforge.common.util.LazyOptional;
27-
import net.minecraftforge.items.ItemStackHandler;
28-
import net.minecraftforge.network.NetworkHooks;
25+
26+
import net.neoforged.neoforge.capabilities.Capabilities;
27+
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
28+
import net.neoforged.neoforge.items.ItemStackHandler;
2929
import org.jetbrains.annotations.NotNull;
3030
import org.jetbrains.annotations.Nullable;
3131

@@ -36,10 +36,11 @@ public UpgradableEquipment(ArmorMaterial armorMaterial, Type slot, Properties pr
3636
super(armorMaterial, slot, properties, textureLoc);
3737
}
3838

39-
//that's better, way better -> the upgrade item will be an armor item of the same slot
40-
@Override
41-
public ICapabilityProvider initCapabilities(ItemStack stack, @Nullable CompoundTag nbt) {
42-
return new UpgradeInventory(stack);
39+
public static void registerCapabilities(RegisterCapabilitiesEvent event) {
40+
event.registerItem(
41+
Capabilities.ItemHandler.ITEM,
42+
(itemStack, unused) -> new ItemStackHandler(1)
43+
);
4344
}
4445
@Override
4546
public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand interactionHand) {
@@ -74,62 +75,38 @@ public InteractionResult useOn(UseOnContext context) {
7475
}
7576

7677
@Override
77-
public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
78+
public @NotNull ItemAttributeModifiers getDefaultAttributeModifiers(ItemStack stack) {
7879
ItemStack newStack = getUpgrade(stack);
79-
return newStack.isEmpty() ? super.getAttributeModifiers(slot, stack) :
80-
newStack.getItem().getAttributeModifiers(slot, newStack);
80+
return newStack.isEmpty() ? super.getDefaultAttributeModifiers(stack) :
81+
newStack.getItem().getDefaultAttributeModifiers(newStack);
8182
}
8283

8384
@Override
84-
public void appendHoverText(@NotNull ItemStack itemStack, @Nullable Level level, List<Component> components, TooltipFlag flag) {
85-
ItemStack upgrade = getUpgrade(itemStack);
85+
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
86+
ItemStack upgrade = getUpgrade(stack);
8687
if (!upgrade.isEmpty()) {
87-
components.add(
88+
tooltipComponents.add(
8889
Component.translatable("container.upgrade")
8990
.append(" : ")
9091
.append(upgrade.getItem().getDescription()));
9192
}
92-
super.appendHoverText(itemStack, level, components, flag);
93+
super.appendHoverText(stack, context, tooltipComponents, tooltipFlag);
9394
}
9495

9596
@NotNull
9697
private static ItemStack getUpgrade(ItemStack stack) {
97-
CompoundTag tag = stack.getOrCreateTagElement("upgradeElement");
98-
return ItemStack.of(tag);
98+
ItemStackHandler handler = (ItemStackHandler) stack.getCapability(Capabilities.ItemHandler.ITEM);
99+
if (handler!=null)
100+
return handler.getStackInSlot(0);
101+
return ItemStack.EMPTY;
99102
}
100103

101104
private static ItemStack setUpgrade(ItemStack stack, ItemStack upgrade) {
102-
CompoundTag tag = stack.getOrCreateTag();
103-
tag.put("upgradeElement", upgrade.serializeNBT());
104105
ItemStack newStack = stack.copy();
105-
newStack.setTag(tag);
106-
return newStack;
107-
}
108-
109-
//for the menu
110-
public static class UpgradeInventory implements ICapabilityProvider {
111-
112-
private final ItemStackHandler itemStackHandler = new ItemStackHandler(1);
113-
private final LazyOptional<ItemStackHandler> handler = LazyOptional.of(() -> itemStackHandler);
114-
115-
public UpgradeInventory(ItemStack stack) {
116-
// Load the inventory from the item's NBT data
117-
CompoundTag nbt = stack.getOrCreateTag();
118-
itemStackHandler.deserializeNBT(nbt.getCompound("upgradeElement"));
119-
}
120-
121-
@Override
122-
public <T> LazyOptional<T> getCapability(Capability<T> cap, @Nullable Direction side) {
123-
if (cap == ForgeCapabilities.ITEM_HANDLER) {
124-
return handler.cast();
125-
}
126-
return LazyOptional.empty();
127-
}
128-
129-
public void saveInventory(ItemStack stack) {
130-
CompoundTag nbt = stack.getOrCreateTag();
131-
nbt.put("upgradeElement", itemStackHandler.serializeNBT());
132-
stack.setTag(nbt);
106+
ItemStackHandler handler = (ItemStackHandler) stack.getCapability(Capabilities.ItemHandler.ITEM);
107+
if (handler!=null) {
108+
handler.setStackInSlot(0,upgrade);
133109
}
110+
return newStack;
134111
}
135112
}

src/main/java/com/rae/creatingspace/content/rocket/engine/EngineItem.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.minecraft.advancements.CriteriaTriggers;
99
import net.minecraft.core.BlockPos;
1010
import net.minecraft.core.Direction;
11+
import net.minecraft.core.component.DataComponents;
1112
import net.minecraft.nbt.CompoundTag;
1213
import net.minecraft.nbt.NbtOps;
1314
import net.minecraft.network.chat.Component;
@@ -16,10 +17,12 @@
1617
import net.minecraft.world.entity.player.Player;
1718
import net.minecraft.world.item.ItemStack;
1819
import net.minecraft.world.item.TooltipFlag;
20+
import net.minecraft.world.item.component.CustomData;
1921
import net.minecraft.world.item.context.BlockPlaceContext;
2022
import net.minecraft.world.level.Level;
2123
import net.minecraft.world.level.block.Block;
2224
import net.minecraft.world.level.block.state.BlockState;
25+
import net.neoforged.neoforge.registries.DeferredRegister;
2326
import org.jetbrains.annotations.NotNull;
2427
import org.jetbrains.annotations.Nullable;
2528
import org.lwjgl.system.NonnullDefault;
@@ -73,24 +76,33 @@ public ItemStack getDefaultInstance() {
7376

7477
public ItemStack getItemStackFromInfo(int thrust, float efficiency, int mass, ResourceLocation propellantType) {
7578
ItemStack defaultInstance = super.getDefaultInstance();
76-
CompoundTag nbt = defaultInstance.getOrCreateTag();
79+
CustomData data = defaultInstance.get(DataComponents.CUSTOM_DATA);
80+
CompoundTag nbt = new CompoundTag();
81+
if (data != null) {
82+
nbt = data.copyTag();
83+
}
7784
CompoundTag beTag = new CompoundTag();
78-
85+
//TODO maybe do a record to use the DataComponents system
7986
beTag.putInt("thrust", thrust);
8087
beTag.putInt("mass", mass);
8188
beTag.putFloat("efficiency", efficiency);
8289
try {
83-
beTag.put("propellantType", ResourceLocation.CODEC.encodeStart(NbtOps.INSTANCE, propellantType).get().orThrow());
90+
beTag.put("propellantType", ResourceLocation.CODEC.encodeStart(NbtOps.INSTANCE, propellantType).getOrThrow());
8491
} catch (Exception ignored) {}
8592
nbt.put("blockEntity", beTag);
86-
defaultInstance.setTag(nbt);
93+
defaultInstance.set(DataComponents.CUSTOM_DATA,CustomData.of(nbt));
8794
return defaultInstance;
8895
}
8996

9097
@Override
91-
public void appendHoverText(ItemStack itemStack, @Nullable Level level, List<Component> components, TooltipFlag flag) {
92-
CompoundTag beTag = itemStack.getOrCreateTagElement("blockEntity");
93-
appendEngineDependentText(components, beTag);
94-
super.appendHoverText(itemStack, level, components, flag);
98+
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
99+
CustomData data = stack.get(DataComponents.CUSTOM_DATA);
100+
CompoundTag nbt = new CompoundTag();
101+
if (data != null) {
102+
nbt = data.copyTag();
103+
}
104+
CompoundTag beTag = nbt.getCompound("blockEntity");
105+
appendEngineDependentText(tooltipComponents, beTag);
106+
super.appendHoverText(stack, context, tooltipComponents, tooltipFlag);
95107
}
96108
}

0 commit comments

Comments
 (0)