diff --git a/src/main/java/com/rae/creatingspace/api/gui/elements/InputBoxWidget.java b/src/main/java/com/rae/creatingspace/api/gui/elements/InputBoxWidget.java index f67c6f50..6523fcba 100644 --- a/src/main/java/com/rae/creatingspace/api/gui/elements/InputBoxWidget.java +++ b/src/main/java/com/rae/creatingspace/api/gui/elements/InputBoxWidget.java @@ -70,8 +70,8 @@ public void setResponder(Consumer stringConsumer){ } @Override - public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { - super.render(graphics, mouseX, mouseY, partialTicks); + protected void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + super.renderWidget(graphics, mouseX, mouseY, partialTicks); //editBox.render(ms,mouseX,mouseY,partialTicks); } diff --git a/src/main/java/com/rae/creatingspace/api/gui/elements/Orbit.java b/src/main/java/com/rae/creatingspace/api/gui/elements/Orbit.java index cb98db00..de94068e 100644 --- a/src/main/java/com/rae/creatingspace/api/gui/elements/Orbit.java +++ b/src/main/java/com/rae/creatingspace/api/gui/elements/Orbit.java @@ -81,7 +81,7 @@ public boolean isMouseOver(double mouseX, double mouseY) { } @Override - public void render(@NotNull GuiGraphics ms, int mouseX, int mouseY, float partialTicks) { + protected void renderWidget(@NotNull GuiGraphics ms, int mouseX, int mouseY, float partialTicks) { if (visible) { isHovered = isMouseOver(mouseX, mouseY); beforeRender(ms, mouseX, mouseY, partialTicks); diff --git a/src/main/java/com/rae/creatingspace/api/gui/elements/SliderWidget.java b/src/main/java/com/rae/creatingspace/api/gui/elements/SliderWidget.java index 67c22145..5b30bd4e 100644 --- a/src/main/java/com/rae/creatingspace/api/gui/elements/SliderWidget.java +++ b/src/main/java/com/rae/creatingspace/api/gui/elements/SliderWidget.java @@ -53,7 +53,7 @@ public void setMax(int max) { this.max = max; } @Override - public void render(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + protected void renderWidget(@NotNull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { if (visible){ lerpedValue.tickChaser(); diff --git a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlock.java b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlock.java index 555cdefd..9e9f858f 100644 --- a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlock.java +++ b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlock.java @@ -1,12 +1,14 @@ package com.rae.creatingspace.content.life_support.spacesuit; import com.mojang.serialization.MapCodec; +import com.rae.creatingspace.init.DataComponentsInit; import com.rae.creatingspace.init.graphics.ShapesInit; import com.rae.creatingspace.init.ingameobject.BlockEntityInit; import com.simibubi.create.AllEnchantments; import com.simibubi.create.foundation.block.IBE; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.component.DataComponentPatch; import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -27,6 +29,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition.Builder; @@ -34,6 +37,8 @@ import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.pathfinder.PathComputationType; +import net.minecraft.world.level.storage.loot.LootParams; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.shapes.CollisionContext; @@ -42,6 +47,7 @@ import org.jetbrains.annotations.Nullable; import org.lwjgl.system.NonnullDefault; +import java.util.List; import java.util.Objects; import java.util.Optional; @NonnullDefault @@ -111,12 +117,8 @@ public void setPlacedBy(Level worldIn, BlockPos pos, BlockState state, @Nullable if (worldIn.isClientSide) return; withBlockEntityDo(worldIn, pos, be -> { - // be.setCapacityEnchantLevel(stack.getEnchantmentLevel(worldIn.holderOrThrow(AllEnchantments.CAPACITY))); - be.setOxygenLevel((int) stack.getOrCreateTag()//TODO implement a DataComponent for Oxygen Level in DataComponentInit - .getFloat("Oxygen")); - if (stack.isEnchanted()) - be.setEnchantmentTag(stack.getEnchantmentTags());//TODO look at BacktankBlock + be.setOxygenLevel(stack.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0)); if (stack.has(DataComponents.CUSTOM_NAME)) be.setCustomName(stack.getHoverName()); }); @@ -151,25 +153,15 @@ public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelRead item = placeable.getActualItem(); } - ItemStack stack = new ItemStack(item); Optional blockEntityOptional = getBlockEntityOptional(level, pos); + DataComponentPatch components = blockEntityOptional.map(OxygenBacktankBlockEntity::getComponentPatch) + .orElse(DataComponentPatch.EMPTY); int air = blockEntityOptional.map(OxygenBacktankBlockEntity::getOxygenLevel) .orElse(0); - CompoundTag tag = stack.getOrCreateTag(); //TODO DataComponent - tag.putFloat("Oxygen", air); - tag.putFloat("prevOxygen",air); - - ListTag enchants = blockEntityOptional.map(OxygenBacktankBlockEntity::getEnchantmentTag) - .orElse(new ListTag()); - if (!enchants.isEmpty()) { - ListTag enchantmentTagList = stack.getEnchantmentTags(); //TODO look at BacktankBlock - enchantmentTagList.addAll(enchants); - tag.put("Enchantments", enchantmentTagList); - } - - blockEntityOptional.map(OxygenBacktankBlockEntity::getCustomName).ifPresent(stack::setHoverName); //TODO look at BacktankBlock - return stack; + ItemStack stack = new ItemStack(item.builtInRegistryHolder(), 1, components); + stack.set(DataComponentsInit.OXYGEN_LEVEL, air); + return stack; } @Override @@ -193,4 +185,26 @@ public boolean isPathfindable(BlockState state, PathComputationType type) { return false; } + @Override + public List getDrops(BlockState pState, LootParams.Builder pBuilder) { + List lootDrops = super.getDrops(pState, pBuilder); + + BlockEntity blockEntity = pBuilder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); + if (!(blockEntity instanceof OxygenBacktankBlockEntity bbe)) + return lootDrops; + + DataComponentPatch components = bbe.getComponentPatch() + .forget(c -> c.equals(DataComponentsInit.OXYGEN_LEVEL)); + if (components.isEmpty()) + return lootDrops; + + return lootDrops.stream() + .peek(stack -> { + if (stack.getItem() instanceof OxygenBacktankItem) + stack.applyComponents(components); + }) + .toList(); + } + + } diff --git a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlockEntity.java b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlockEntity.java index 8ef895c5..65fb4198 100644 --- a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlockEntity.java +++ b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankBlockEntity.java @@ -13,6 +13,7 @@ import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentPatch; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -41,8 +42,9 @@ public class OxygenBacktankBlockEntity extends SmartBlockEntity implements Namea private Component customName; private int capacityEnchantLevel; private ListTag enchantmentTag; + private DataComponentPatch componentPatch; - private final FluidTank OXYGEN_TANK = new FluidTank(1000){ + private final FluidTank OXYGEN_TANK = new FluidTank(1000) { @Override protected void onContentsChanged() { @@ -65,8 +67,8 @@ public static void registerCapabilities(RegisterCapabilitiesEvent event) { event.registerBlockEntity( Capabilities.FluidHandler.BLOCK, BlockEntityInit.OXYGEN_BACKTANK.get(), - (be, context)-> { - if (context == Direction.DOWN){ + (be, context) -> { + if (context == Direction.DOWN) { return be.OXYGEN_TANK; } return null; @@ -114,23 +116,29 @@ public int getComparatorOutput() { } //TODO add DataComponent and remove prevOxygen + timer (I'm not sure we are using it) + public void setComponentPatch(DataComponentPatch componentPatch) { + this.componentPatch = componentPatch; + } + public DataComponentPatch getComponentPatch() { + return componentPatch; + } @Override - protected void write(CompoundTag compound,HolderLookup.Provider registries, boolean clientPacket) { - super.write(compound,registries, clientPacket); + protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) { + super.write(compound, registries, clientPacket); compound.putInt("Oxygen", oxygenLevel); - compound.putInt("prevOxygen",prevOxygenLevel); + compound.putInt("prevOxygen", prevOxygenLevel); compound.putInt("Timer", oxygenLevelTimer); compound.putInt("CapacityEnchantment", capacityEnchantLevel); if (this.customName != null) - compound.putString("CustomName", Component.Serializer.toJson(this.customName,registries)); + compound.putString("CustomName", Component.Serializer.toJson(this.customName, registries)); compound.put("Enchantments", enchantmentTag); } @Override - protected void read(CompoundTag compound,HolderLookup.Provider registries, boolean clientPacket) { - super.read(compound,registries, clientPacket); + protected void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) { + super.read(compound, registries, clientPacket); int prev = oxygenLevel; capacityEnchantLevel = compound.getInt("CapacityEnchantment"); OXYGEN_TANK.setCapacity(OxygenBacktankUtil.maxOxygen(capacityEnchantLevel)); @@ -151,7 +159,7 @@ protected void playFilledEffect() { for (int i = 0; i < 360; i += 10) { Vec3 m = VecHelper.rotate(baseMotion, i, Axis.Y); Vec3 v = baseVec.add(m.normalize() - .scale(.25f)); + .scale(.25f)); level.addParticle(ParticleTypes.SPIT, v.x, v.y, v.z, m.x, m.y, m.z); } @@ -160,7 +168,7 @@ protected void playFilledEffect() { @Override public Component getName() { return this.customName != null ? this.customName - : defaultName; + : defaultName; } public int getOxygenLevel() { @@ -169,7 +177,7 @@ public int getOxygenLevel() { public void setOxygenLevel(int oxygenLevel) { this.oxygenLevel = oxygenLevel; - OXYGEN_TANK.setFluid(new FluidStack(FluidInit.LIQUID_OXYGEN.get(),oxygenLevel)); + OXYGEN_TANK.setFluid(new FluidStack(FluidInit.LIQUID_OXYGEN.get(), oxygenLevel)); setChanged(); sendData(); } @@ -195,4 +203,4 @@ public void setCapacityEnchantLevel(int capacityEnchantLevel) { this.OXYGEN_TANK.setCapacity(OxygenBacktankUtil.maxOxygen(capacityEnchantLevel)); } -} +} \ No newline at end of file diff --git a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankItem.java b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankItem.java index 3b868fee..9dab7e4c 100644 --- a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankItem.java +++ b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankItem.java @@ -1,5 +1,6 @@ package com.rae.creatingspace.content.life_support.spacesuit; +import com.rae.creatingspace.init.DataComponentsInit; import com.simibubi.create.foundation.item.LayeredArmorItem; import net.minecraft.core.Holder; import net.minecraft.nbt.CompoundTag; @@ -29,20 +30,6 @@ public OxygenBacktankItem(Holder material, Properties properties, this.blockItem = placeable; } - @Override - public void inventoryTick(ItemStack backtank, Level level, Entity entity, int nbr, boolean isMoving) { - CompoundTag tag = backtank.getOrCreateTag();//TODO data component + remove the prev oxygenLevel and toUpdate as we don't need it. - - float o2amount = tag.getFloat("Oxygen"); - float prevO2amount = tag.getFloat("prevOxygen"); - boolean toUpdate = tag.getBoolean("toUpdate"); - if (toUpdate) { - tag.putFloat("prevOxygen",o2amount); - tag.putBoolean("toUpdate", false); - } - // may be ? -> in the ticking entity logic make the server update the itemstack -> here don't now what is before and after - } - @Nullable public static OxygenBacktankItem getWornBy(Entity entity) { if (!(entity instanceof LivingEntity livingEntity)) { @@ -60,7 +47,6 @@ public static OxygenBacktankItem getWornBy(Entity entity) { .useOn(ctx); } - @Override public boolean canBeDepleted() { return false; } @@ -89,9 +75,8 @@ public Block getBlock() { return blockItem.get().getBlock(); } - public static float getRemainingAir(ItemStack stack) { - CompoundTag orCreateTag = stack.getOrCreateTag();//TODO DataComponent - return orCreateTag.getFloat("Oxygen"); + public static int getRemainingAir(ItemStack stack) { + return stack.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0); } public static class O2BacktankBlockItem extends BlockItem { diff --git a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankUtil.java b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankUtil.java index eb5a1fe1..a72535b1 100644 --- a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankUtil.java +++ b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/OxygenBacktankUtil.java @@ -1,5 +1,6 @@ package com.rae.creatingspace.content.life_support.spacesuit; +import com.rae.creatingspace.init.DataComponentsInit; import com.rae.creatingspace.init.TagsInit; import com.simibubi.create.AllEnchantments; import com.simibubi.create.AllSoundEvents; @@ -62,19 +63,15 @@ public static boolean hasOxygenRemaining(ItemStack backtank) { return getOxygen(backtank) > 0; } - public static float getOxygen(ItemStack backtank) { - CompoundTag tag = backtank.getOrCreateTag();//TODO DataComponent - return Math.min(tag.getFloat("Oxygen"), maxOxygen(backtank)); + public static int getOxygen(ItemStack backtank) { + return Math.min(backtank.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0), maxOxygen(backtank)); } public static void consumeOxygen(LivingEntity entity, ItemStack backtank, int i) { - CompoundTag tag = backtank.getOrCreateTag(); int maxOxygen = maxOxygen(backtank); - float oxygen = getOxygen(backtank); - float newOxygen = Math.max(oxygen - i, 0); - tag.putFloat("Oxygen", Math.min(newOxygen, maxOxygen)); - tag.putBoolean("toUpdate",true); - backtank.setTag(tag); + int oxygen = getOxygen(backtank); + int newOxygen = Math.max(oxygen - i, 0); + backtank.set(DataComponentsInit.OXYGEN_LEVEL, Math.min(newOxygen, maxOxygen)); if (!(entity instanceof ServerPlayer player)) return; diff --git a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/RemainingO2Overlay.java b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/RemainingO2Overlay.java index f178fd67..09f0e088 100644 --- a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/RemainingO2Overlay.java +++ b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/RemainingO2Overlay.java @@ -2,11 +2,13 @@ import com.rae.creatingspace.api.gui.elements.SliderWidget; import com.rae.creatingspace.configs.CSConfigs; +import com.rae.creatingspace.init.DataComponentsInit; import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.LayeredDraw; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ItemStack; @@ -35,9 +37,7 @@ public void render(GuiGraphics graphics, DeltaTracker deltaTracker) { ItemStack itemInChestSlot = player.getItemBySlot(EquipmentSlot.CHEST); if (itemInChestSlot.getItem() instanceof OxygenBacktankItem){ - CompoundTag tag = itemInChestSlot.getOrCreateTag();//TODO DataComponents - float o2Value = tag.getFloat("Oxygen"); - + int o2Value = itemInChestSlot.getOrDefault(DataComponentsInit.OXYGEN_LEVEL, 0); gauge.setMax(OxygenBacktankUtil.maxOxygen(itemInChestSlot)); gauge.setChase((int) o2Value); gauge.render(graphics, (int) mc.mouseHandler.xpos(),(int) mc.mouseHandler.ypos() ,deltaTracker.getRealtimeDeltaTicks()); diff --git a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/SpacesuitHelmetItem.java b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/SpacesuitHelmetItem.java index 4c6a06b2..d088dd6a 100644 --- a/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/SpacesuitHelmetItem.java +++ b/src/main/java/com/rae/creatingspace/content/life_support/spacesuit/SpacesuitHelmetItem.java @@ -114,7 +114,7 @@ public static void breatheUnderwater(EntityTickEvent.Pre event) { entity.getPersistentData() .putInt("VisualBacktankAir", Math.round(O2Backtanks.stream() .map(OxygenBacktankUtil::getOxygen) - .reduce(0f, Float::sum))); + .reduce(0, Integer::sum))); if (!second) return; diff --git a/src/main/java/com/rae/creatingspace/content/planets/CustomDimensionEffects.java b/src/main/java/com/rae/creatingspace/content/planets/CustomDimensionEffects.java index 6aae7e51..76041d83 100644 --- a/src/main/java/com/rae/creatingspace/content/planets/CustomDimensionEffects.java +++ b/src/main/java/com/rae/creatingspace/content/planets/CustomDimensionEffects.java @@ -18,13 +18,13 @@ public abstract class CustomDimensionEffects extends DimensionSpecialEffects { //TODO replace with ResourceLocation.parse(), or CreatingSpace.resource() - private static final ResourceLocation SPACE_SKY_LOCATION = new ResourceLocation("creatingspace", "textures/environment/space_sky.png"); - private static final ResourceLocation EARTH_LOCATION = new ResourceLocation("creatingspace", "textures/environment/earth.png"); - private static final ResourceLocation MOON_LOCATION = new ResourceLocation("creatingspace", "textures/environment/moon.png"); - private static final ResourceLocation MARS_LOCATION = new ResourceLocation("creatingspace", "textures/environment/mars.png"); - private static final ResourceLocation SATURN_LOCATION = new ResourceLocation("creatingspace", "textures/environment/saturn.png"); - private static final ResourceLocation SUN_LOCATION = new ResourceLocation("textures/environment/sun.png"); - private static final ResourceLocation MOON_PHASES_LOCATION = new ResourceLocation("textures/environment/moon_phases.png"); + private static final ResourceLocation SPACE_SKY_LOCATION = ResourceLocation.fromNamespaceAndPath("creatingspace", "textures/environment/space_sky.png"); + private static final ResourceLocation EARTH_LOCATION = ResourceLocation.fromNamespaceAndPath("creatingspace", "textures/environment/earth.png"); + private static final ResourceLocation MOON_LOCATION = ResourceLocation.fromNamespaceAndPath("creatingspace", "textures/environment/moon.png"); + private static final ResourceLocation MARS_LOCATION = ResourceLocation.fromNamespaceAndPath("creatingspace", "textures/environment/mars.png"); + private static final ResourceLocation SATURN_LOCATION = ResourceLocation.fromNamespaceAndPath("creatingspace", "textures/environment/saturn.png"); + private static final ResourceLocation SUN_LOCATION = ResourceLocation.fromNamespaceAndPath("creatingspace","textures/environment/sun.png"); + private static final ResourceLocation MOON_PHASES_LOCATION = ResourceLocation.fromNamespaceAndPath("creatingspace","textures/environment/moon_phases.png"); public CustomDimensionEffects(float cloudLevel, boolean hasGround, SkyType skyType, boolean forceBrightLightmap, boolean constantAmbientLight) { super(cloudLevel, hasGround, skyType, forceBrightLightmap, constantAmbientLight); @@ -233,16 +233,49 @@ protected void renderAstralBody(PoseStack poseStack, BufferBuilder bufferbuilder Matrix4f matrix4f = poseStack.last().pose(); RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShaderTexture(0, bodyTexture); - //TODO same as end of renderSpaceSky - bufferbuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - bufferbuilder.vertex(matrix4f, -bodySize, bodyDistance, -bodySize).uv(f15, f14).endVertex(); - bufferbuilder.vertex(matrix4f, bodySize, bodyDistance, -bodySize).uv(f13, f14).endVertex(); - bufferbuilder.vertex(matrix4f, bodySize, bodyDistance, bodySize).uv(f13, f16).endVertex(); - bufferbuilder.vertex(matrix4f, -bodySize, bodyDistance, bodySize).uv(f15, f16).endVertex(); - BufferUploader.drawWithShader(bufferbuilder.end()); + for (int i = 0; i < 6; ++i) { + poseStack.pushPose(); + //make all the face + if (i == 1) { + poseStack.mulPose(Axis.XP.rotationDegrees(90.0F)); + } + + if (i == 2) { + poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F)); + } + + if (i == 3) { + poseStack.mulPose(Axis.XP.rotationDegrees(180.0F)); + } + + if (i == 4) { + poseStack.mulPose(Axis.ZP.rotationDegrees(90.0F)); + } + + if (i == 5) { + poseStack.mulPose(Axis.ZP.rotationDegrees(-90.0F)); + } + + int l = i % 3; + int i1 = i / 4 % 2; + float col_begin = (float) (l) / 3.0F; + float l_begin = (float) (i1) / 2.0F; + float col_end = (float) (l + 1) / 3.0F; + float l_end = (float) (i1 + 1) / 2.0F; + + float size = 100.0F; + float distance = 100.0F; + //this is the standard brut force way to draw a square with a texture + // uv is the coordinates on the texture and the addVertex takes the perspective matrix and the 3 position + bufferbuilder.addVertex(matrix4f, -size, -distance, -size).setUv(col_end, l_end); + bufferbuilder.addVertex(matrix4f, -size, -distance, size).setUv(col_begin, l_end); + bufferbuilder.addVertex(matrix4f, size, -distance, size).setUv(col_begin, l_begin); + bufferbuilder.addVertex(matrix4f, size, -distance, -size).setUv(col_end, l_begin); + BufferUploader.drawWithShader(bufferbuilder.buildOrThrow()); + //tesselator.end(); + } + poseStack.popPose(); } - poseStack.popPose(); - } } } diff --git a/src/main/java/com/rae/creatingspace/content/rocket/engine/design/DesignBlueprintItem.java b/src/main/java/com/rae/creatingspace/content/rocket/engine/design/DesignBlueprintItem.java index 65645953..8eb434ef 100644 --- a/src/main/java/com/rae/creatingspace/content/rocket/engine/design/DesignBlueprintItem.java +++ b/src/main/java/com/rae/creatingspace/content/rocket/engine/design/DesignBlueprintItem.java @@ -78,38 +78,42 @@ public void fillItemCategory(CreativeModeTab modeTab, NonNullList ite @Override public InteractionResultHolder use(Level level, Player player, InteractionHand interactionHand) { ItemStack stack = player.getItemInHand(interactionHand); - CompoundTag nbt = stack.getOrCreateTag();//TODO replace with a data component call with null check -> same as in first methode - ResourceLocation registry = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, - nbt.get("design_type")).result().orElse(null); - ResourceLocation location = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, - nbt.get("design")).result().orElse(null); - if (registry != null) { + CustomData data = stack.get(DataComponents.CUSTOM_DATA); + if(data != null) { + CompoundTag nbt = data.copyTag(); + ResourceLocation registry = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, + nbt.get("design_type")).result().orElse(null); + ResourceLocation location = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, + nbt.get("design")).result().orElse(null); + if (registry != null) { save(stack, player); player.displayClientMessage(Component.translatable("item.creatingspace.design_blueprint.message") .append(" ") .append(Component.translatable( - registry.getPath() + "." + - location.getNamespace() + "." + location.getPath())) + registry.getPath() + "." + + location.getNamespace() + "." + location.getPath())) .append(" ") .append(Component.translatable(registry.toLanguageKey())), true); - + } } return super.use(level, player, interactionHand); } private static void save(ItemStack stack, Player player) { - CompoundTag nbt = stack.getOrCreateTag();//TODO replace with a data component call with null check - ResourceLocation registry = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, - nbt.get("design_type")).result().orElse(null); - ResourceLocation location = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, - nbt.get("design")).result().orElse(null); - if (registry.getPath().equals(DEFERRED_EXHAUST_PACK_TYPE.getRegistryName().getPath())) { - UnlockedDesignManager.addExhaustForPlayer(player, location); - - } - if (registry.getPath().equals(DEFERRED_POWER_PACK_TYPE.getRegistryName().getPath())) { - UnlockedDesignManager.addPowerPackForPlayer(player, location); + CustomData data = stack.get(DataComponents.CUSTOM_DATA); + if(data != null) { + CompoundTag nbt = data.copyTag(); + ResourceLocation registry = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, + nbt.get("design_type")).result().orElse(null); + ResourceLocation location = ResourceLocation.CODEC.parse(NbtOps.INSTANCE, + nbt.get("design")).result().orElse(null); + if (registry.getPath().equals(DEFERRED_EXHAUST_PACK_TYPE.getRegistryName().getPath())) { + UnlockedDesignManager.addExhaustForPlayer(player, location); + } + if (registry.getPath().equals(DEFERRED_POWER_PACK_TYPE.getRegistryName().getPath())) { + UnlockedDesignManager.addPowerPackForPlayer(player, location); + } } } } diff --git a/src/main/java/com/rae/creatingspace/init/DataComponentsInit.java b/src/main/java/com/rae/creatingspace/init/DataComponentsInit.java index 1fe47c25..d9e93ae3 100644 --- a/src/main/java/com/rae/creatingspace/init/DataComponentsInit.java +++ b/src/main/java/com/rae/creatingspace/init/DataComponentsInit.java @@ -7,6 +7,7 @@ import net.minecraft.core.registries.Registries; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.ExtraCodecs; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.fluids.SimpleFluidContent; import net.neoforged.neoforge.registries.DeferredRegister; @@ -34,6 +35,12 @@ public class DataComponentsInit { ) ); + public static final DataComponentType OXYGEN_LEVEL = register( + "oxygen", + builder -> builder.persistent(ExtraCodecs.NON_NEGATIVE_INT).networkSynchronized(ByteBufCodecs.VAR_INT) + ); + + private static DataComponentType register(String name, UnaryOperator> builder) { DataComponentType type = builder.apply(DataComponentType.builder()).build(); DATA_COMPONENTS.register(name, () -> type); diff --git a/src/main/java/com/rae/creatingspace/init/ingameobject/BlockInit.java b/src/main/java/com/rae/creatingspace/init/ingameobject/BlockInit.java index 2311093e..24d97c53 100644 --- a/src/main/java/com/rae/creatingspace/init/ingameobject/BlockInit.java +++ b/src/main/java/com/rae/creatingspace/init/ingameobject/BlockInit.java @@ -13,8 +13,6 @@ import com.rae.creatingspace.content.rocket.flight_recorder.FlightRecorderBlock; import com.rae.creatingspace.init.graphics.SpriteShiftInit; import com.rae.creatingspace.content.life_support.spacesuit.OxygenBacktankBlock; -import com.rae.creatingspace.legacy.server.blocks.*; - import com.rae.creatingspace.legacy.server.blocks.multiblock.BigRocketStructuralBlock; import com.rae.creatingspace.legacy.server.blocks.multiblock.SmallRocketStructuralBlock; import com.rae.creatingspace.content.rocket.engine.SuperRocketStructuralBlock;