Skip to content

Commit b538abb

Browse files
Merge pull request #104 from KalWantsPizza/1.21.1-release
Finished my part, ready for review.
2 parents bf5cc28 + f258872 commit b538abb

File tree

13 files changed

+152
-106
lines changed

13 files changed

+152
-106
lines changed

src/main/java/com/rae/creatingspace/api/gui/elements/InputBoxWidget.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ public void setResponder(Consumer<String> stringConsumer){
7070
}
7171

7272
@Override
73-
public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
74-
super.render(graphics, mouseX, mouseY, partialTicks);
73+
protected void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
74+
super.renderWidget(graphics, mouseX, mouseY, partialTicks);
7575
//editBox.render(ms,mouseX,mouseY,partialTicks);
7676
}
7777

src/main/java/com/rae/creatingspace/api/gui/elements/Orbit.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public boolean isMouseOver(double mouseX, double mouseY) {
8181
}
8282

8383
@Override
84-
public void render(@NotNull GuiGraphics ms, int mouseX, int mouseY, float partialTicks) {
84+
protected void renderWidget(@NotNull GuiGraphics ms, int mouseX, int mouseY, float partialTicks) {
8585
if (visible) {
8686
isHovered = isMouseOver(mouseX, mouseY);
8787
beforeRender(ms, mouseX, mouseY, partialTicks);

src/main/java/com/rae/creatingspace/api/gui/elements/SliderWidget.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void setMax(int max) {
5353
this.max = max;
5454
}
5555
@Override
56-
public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
56+
protected void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
5757
if (visible){
5858
lerpedValue.tickChaser();
5959

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

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.rae.creatingspace.content.life_support.spacesuit;
22

33
import com.mojang.serialization.MapCodec;
4+
import com.rae.creatingspace.init.DataComponentsInit;
45
import com.rae.creatingspace.init.graphics.ShapesInit;
56
import com.rae.creatingspace.init.ingameobject.BlockEntityInit;
67
import com.simibubi.create.AllEnchantments;
78
import com.simibubi.create.foundation.block.IBE;
89
import net.minecraft.core.BlockPos;
910
import net.minecraft.core.Direction;
11+
import net.minecraft.core.component.DataComponentPatch;
1012
import net.minecraft.core.component.DataComponents;
1113
import net.minecraft.nbt.CompoundTag;
1214
import net.minecraft.nbt.ListTag;
@@ -27,13 +29,16 @@
2729
import net.minecraft.world.level.block.Block;
2830
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
2931
import net.minecraft.world.level.block.SimpleWaterloggedBlock;
32+
import net.minecraft.world.level.block.entity.BlockEntity;
3033
import net.minecraft.world.level.block.entity.BlockEntityType;
3134
import net.minecraft.world.level.block.state.BlockState;
3235
import net.minecraft.world.level.block.state.StateDefinition.Builder;
3336
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
3437
import net.minecraft.world.level.material.FluidState;
3538
import net.minecraft.world.level.material.Fluids;
3639
import net.minecraft.world.level.pathfinder.PathComputationType;
40+
import net.minecraft.world.level.storage.loot.LootParams;
41+
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
3742
import net.minecraft.world.phys.BlockHitResult;
3843
import net.minecraft.world.phys.HitResult;
3944
import net.minecraft.world.phys.shapes.CollisionContext;
@@ -42,6 +47,7 @@
4247
import org.jetbrains.annotations.Nullable;
4348
import org.lwjgl.system.NonnullDefault;
4449

50+
import java.util.List;
4551
import java.util.Objects;
4652
import java.util.Optional;
4753
@NonnullDefault
@@ -111,12 +117,8 @@ public void setPlacedBy(Level worldIn, BlockPos pos, BlockState state, @Nullable
111117
if (worldIn.isClientSide)
112118
return;
113119
withBlockEntityDo(worldIn, pos, be -> {
114-
//
115120
be.setCapacityEnchantLevel(stack.getEnchantmentLevel(worldIn.holderOrThrow(AllEnchantments.CAPACITY)));
116-
be.setOxygenLevel((int) stack.getOrCreateTag()//TODO implement a DataComponent for Oxygen Level in DataComponentInit
117-
.getFloat("Oxygen"));
118-
if (stack.isEnchanted())
119-
be.setEnchantmentTag(stack.getEnchantmentTags());//TODO look at BacktankBlock
121+
be.setOxygenLevel(stack.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0));
120122
if (stack.has(DataComponents.CUSTOM_NAME))
121123
be.setCustomName(stack.getHoverName());
122124
});
@@ -151,25 +153,15 @@ public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelRead
151153
item = placeable.getActualItem();
152154
}
153155

154-
ItemStack stack = new ItemStack(item);
155156
Optional<OxygenBacktankBlockEntity> blockEntityOptional = getBlockEntityOptional(level, pos);
156157

158+
DataComponentPatch components = blockEntityOptional.map(OxygenBacktankBlockEntity::getComponentPatch)
159+
.orElse(DataComponentPatch.EMPTY);
157160
int air = blockEntityOptional.map(OxygenBacktankBlockEntity::getOxygenLevel)
158161
.orElse(0);
159-
CompoundTag tag = stack.getOrCreateTag(); //TODO DataComponent
160-
tag.putFloat("Oxygen", air);
161-
tag.putFloat("prevOxygen",air);
162-
163-
ListTag enchants = blockEntityOptional.map(OxygenBacktankBlockEntity::getEnchantmentTag)
164-
.orElse(new ListTag());
165-
if (!enchants.isEmpty()) {
166-
ListTag enchantmentTagList = stack.getEnchantmentTags(); //TODO look at BacktankBlock
167-
enchantmentTagList.addAll(enchants);
168-
tag.put("Enchantments", enchantmentTagList);
169-
}
170-
171-
blockEntityOptional.map(OxygenBacktankBlockEntity::getCustomName).ifPresent(stack::setHoverName); //TODO look at BacktankBlock
172-
return stack;
162+
ItemStack stack = new ItemStack(item.builtInRegistryHolder(), 1, components);
163+
stack.set(DataComponentsInit.OXYGEN_LEVEL, air);
164+
return stack;
173165
}
174166

175167
@Override
@@ -193,4 +185,26 @@ public boolean isPathfindable(BlockState state, PathComputationType type) {
193185
return false;
194186
}
195187

188+
@Override
189+
public List<ItemStack> getDrops(BlockState pState, LootParams.Builder pBuilder) {
190+
List<ItemStack> lootDrops = super.getDrops(pState, pBuilder);
191+
192+
BlockEntity blockEntity = pBuilder.getOptionalParameter(LootContextParams.BLOCK_ENTITY);
193+
if (!(blockEntity instanceof OxygenBacktankBlockEntity bbe))
194+
return lootDrops;
195+
196+
DataComponentPatch components = bbe.getComponentPatch()
197+
.forget(c -> c.equals(DataComponentsInit.OXYGEN_LEVEL));
198+
if (components.isEmpty())
199+
return lootDrops;
200+
201+
return lootDrops.stream()
202+
.peek(stack -> {
203+
if (stack.getItem() instanceof OxygenBacktankItem)
204+
stack.applyComponents(components);
205+
})
206+
.toList();
207+
}
208+
209+
196210
}

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

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import net.minecraft.core.Direction;
1414
import net.minecraft.core.Direction.Axis;
1515
import net.minecraft.core.HolderLookup;
16+
import net.minecraft.core.component.DataComponentPatch;
1617
import net.minecraft.core.particles.ParticleTypes;
1718
import net.minecraft.nbt.CompoundTag;
1819
import net.minecraft.nbt.ListTag;
@@ -41,8 +42,9 @@ public class OxygenBacktankBlockEntity extends SmartBlockEntity implements Namea
4142
private Component customName;
4243
private int capacityEnchantLevel;
4344
private ListTag enchantmentTag;
45+
private DataComponentPatch componentPatch;
4446

45-
private final FluidTank OXYGEN_TANK = new FluidTank(1000){
47+
private final FluidTank OXYGEN_TANK = new FluidTank(1000) {
4648
@Override
4749
protected void onContentsChanged() {
4850

@@ -65,8 +67,8 @@ public static void registerCapabilities(RegisterCapabilitiesEvent event) {
6567
event.registerBlockEntity(
6668
Capabilities.FluidHandler.BLOCK,
6769
BlockEntityInit.OXYGEN_BACKTANK.get(),
68-
(be, context)-> {
69-
if (context == Direction.DOWN){
70+
(be, context) -> {
71+
if (context == Direction.DOWN) {
7072
return be.OXYGEN_TANK;
7173
}
7274
return null;
@@ -114,23 +116,29 @@ public int getComparatorOutput() {
114116
}
115117
//TODO add DataComponent and remove prevOxygen + timer (I'm not sure we are using it)
116118

119+
public void setComponentPatch(DataComponentPatch componentPatch) {
120+
this.componentPatch = componentPatch;
121+
}
117122

123+
public DataComponentPatch getComponentPatch() {
124+
return componentPatch;
125+
}
118126

119127
@Override
120-
protected void write(CompoundTag compound,HolderLookup.Provider registries, boolean clientPacket) {
121-
super.write(compound,registries, clientPacket);
128+
protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
129+
super.write(compound, registries, clientPacket);
122130
compound.putInt("Oxygen", oxygenLevel);
123-
compound.putInt("prevOxygen",prevOxygenLevel);
131+
compound.putInt("prevOxygen", prevOxygenLevel);
124132
compound.putInt("Timer", oxygenLevelTimer);
125133
compound.putInt("CapacityEnchantment", capacityEnchantLevel);
126134
if (this.customName != null)
127-
compound.putString("CustomName", Component.Serializer.toJson(this.customName,registries));
135+
compound.putString("CustomName", Component.Serializer.toJson(this.customName, registries));
128136
compound.put("Enchantments", enchantmentTag);
129137
}
130138

131139
@Override
132-
protected void read(CompoundTag compound,HolderLookup.Provider registries, boolean clientPacket) {
133-
super.read(compound,registries, clientPacket);
140+
protected void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
141+
super.read(compound, registries, clientPacket);
134142
int prev = oxygenLevel;
135143
capacityEnchantLevel = compound.getInt("CapacityEnchantment");
136144
OXYGEN_TANK.setCapacity(OxygenBacktankUtil.maxOxygen(capacityEnchantLevel));
@@ -151,7 +159,7 @@ protected void playFilledEffect() {
151159
for (int i = 0; i < 360; i += 10) {
152160
Vec3 m = VecHelper.rotate(baseMotion, i, Axis.Y);
153161
Vec3 v = baseVec.add(m.normalize()
154-
.scale(.25f));
162+
.scale(.25f));
155163

156164
level.addParticle(ParticleTypes.SPIT, v.x, v.y, v.z, m.x, m.y, m.z);
157165
}
@@ -160,7 +168,7 @@ protected void playFilledEffect() {
160168
@Override
161169
public Component getName() {
162170
return this.customName != null ? this.customName
163-
: defaultName;
171+
: defaultName;
164172
}
165173

166174
public int getOxygenLevel() {
@@ -169,7 +177,7 @@ public int getOxygenLevel() {
169177

170178
public void setOxygenLevel(int oxygenLevel) {
171179
this.oxygenLevel = oxygenLevel;
172-
OXYGEN_TANK.setFluid(new FluidStack(FluidInit.LIQUID_OXYGEN.get(),oxygenLevel));
180+
OXYGEN_TANK.setFluid(new FluidStack(FluidInit.LIQUID_OXYGEN.get(), oxygenLevel));
173181
setChanged();
174182
sendData();
175183
}
@@ -195,4 +203,4 @@ public void setCapacityEnchantLevel(int capacityEnchantLevel) {
195203
this.OXYGEN_TANK.setCapacity(OxygenBacktankUtil.maxOxygen(capacityEnchantLevel));
196204
}
197205

198-
}
206+
}

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

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.rae.creatingspace.content.life_support.spacesuit;
22

3+
import com.rae.creatingspace.init.DataComponentsInit;
34
import com.simibubi.create.foundation.item.LayeredArmorItem;
45
import net.minecraft.core.Holder;
56
import net.minecraft.nbt.CompoundTag;
@@ -29,20 +30,6 @@ public OxygenBacktankItem(Holder<ArmorMaterial> material, Properties properties,
2930
this.blockItem = placeable;
3031
}
3132

32-
@Override
33-
public void inventoryTick(ItemStack backtank, Level level, Entity entity, int nbr, boolean isMoving) {
34-
CompoundTag tag = backtank.getOrCreateTag();//TODO data component + remove the prev oxygenLevel and toUpdate as we don't need it.
35-
36-
float o2amount = tag.getFloat("Oxygen");
37-
float prevO2amount = tag.getFloat("prevOxygen");
38-
boolean toUpdate = tag.getBoolean("toUpdate");
39-
if (toUpdate) {
40-
tag.putFloat("prevOxygen",o2amount);
41-
tag.putBoolean("toUpdate", false);
42-
}
43-
// may be ? -> in the ticking entity logic make the server update the itemstack -> here don't now what is before and after
44-
}
45-
4633
@Nullable
4734
public static OxygenBacktankItem getWornBy(Entity entity) {
4835
if (!(entity instanceof LivingEntity livingEntity)) {
@@ -60,7 +47,6 @@ public static OxygenBacktankItem getWornBy(Entity entity) {
6047
.useOn(ctx);
6148
}
6249

63-
@Override
6450
public boolean canBeDepleted() {
6551
return false;
6652
}
@@ -89,9 +75,8 @@ public Block getBlock() {
8975
return blockItem.get().getBlock();
9076
}
9177

92-
public static float getRemainingAir(ItemStack stack) {
93-
CompoundTag orCreateTag = stack.getOrCreateTag();//TODO DataComponent
94-
return orCreateTag.getFloat("Oxygen");
78+
public static int getRemainingAir(ItemStack stack) {
79+
return stack.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0);
9580
}
9681

9782
public static class O2BacktankBlockItem extends BlockItem {

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

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.rae.creatingspace.content.life_support.spacesuit;
22

3+
import com.rae.creatingspace.init.DataComponentsInit;
34
import com.rae.creatingspace.init.TagsInit;
45
import com.simibubi.create.AllEnchantments;
56
import com.simibubi.create.AllSoundEvents;
@@ -62,19 +63,15 @@ public static boolean hasOxygenRemaining(ItemStack backtank) {
6263
return getOxygen(backtank) > 0;
6364
}
6465

65-
public static float getOxygen(ItemStack backtank) {
66-
CompoundTag tag = backtank.getOrCreateTag();//TODO DataComponent
67-
return Math.min(tag.getFloat("Oxygen"), maxOxygen(backtank));
66+
public static int getOxygen(ItemStack backtank) {
67+
return Math.min(backtank.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0), maxOxygen(backtank));
6868
}
6969

7070
public static void consumeOxygen(LivingEntity entity, ItemStack backtank, int i) {
71-
CompoundTag tag = backtank.getOrCreateTag();
7271
int maxOxygen = maxOxygen(backtank);
73-
float oxygen = getOxygen(backtank);
74-
float newOxygen = Math.max(oxygen - i, 0);
75-
tag.putFloat("Oxygen", Math.min(newOxygen, maxOxygen));
76-
tag.putBoolean("toUpdate",true);
77-
backtank.setTag(tag);
72+
int oxygen = getOxygen(backtank);
73+
int newOxygen = Math.max(oxygen - i, 0);
74+
backtank.set(DataComponentsInit.OXYGEN_LEVEL, Math.min(newOxygen, maxOxygen));
7875

7976
if (!(entity instanceof ServerPlayer player))
8077
return;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import com.rae.creatingspace.api.gui.elements.SliderWidget;
44
import com.rae.creatingspace.configs.CSConfigs;
5+
import com.rae.creatingspace.init.DataComponentsInit;
56
import net.minecraft.client.DeltaTracker;
67
import net.minecraft.client.Minecraft;
78
import net.minecraft.client.gui.GuiGraphics;
89
import net.minecraft.client.gui.LayeredDraw;
910
import net.minecraft.client.player.LocalPlayer;
11+
import net.minecraft.core.component.DataComponents;
1012
import net.minecraft.nbt.CompoundTag;
1113
import net.minecraft.world.entity.EquipmentSlot;
1214
import net.minecraft.world.item.ItemStack;
@@ -35,9 +37,7 @@ public void render(GuiGraphics graphics, DeltaTracker deltaTracker) {
3537
ItemStack itemInChestSlot = player.getItemBySlot(EquipmentSlot.CHEST);
3638

3739
if (itemInChestSlot.getItem() instanceof OxygenBacktankItem){
38-
CompoundTag tag = itemInChestSlot.getOrCreateTag();//TODO DataComponents
39-
float o2Value = tag.getFloat("Oxygen");
40-
40+
int o2Value = itemInChestSlot.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0);
4141
gauge.setMax(OxygenBacktankUtil.maxOxygen(itemInChestSlot));
4242
gauge.setChase((int) o2Value);
4343
gauge.render(graphics, (int) mc.mouseHandler.xpos(),(int) mc.mouseHandler.ypos() ,deltaTracker.getRealtimeDeltaTicks());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public static void breatheUnderwater(EntityTickEvent.Pre event) {
114114
entity.getPersistentData()
115115
.putInt("VisualBacktankAir", Math.round(O2Backtanks.stream()
116116
.map(OxygenBacktankUtil::getOxygen)
117-
.reduce(0f, Float::sum)));
117+
.reduce(0, Integer::sum)));
118118

119119
if (!second)
120120
return;

0 commit comments

Comments
 (0)