diff --git a/src/main/java/ovh/glitchlabs/ornamentum/Ornamentum.java b/src/main/java/ovh/glitchlabs/ornamentum/Ornamentum.java index 19c1942..e239d1f 100644 --- a/src/main/java/ovh/glitchlabs/ornamentum/Ornamentum.java +++ b/src/main/java/ovh/glitchlabs/ornamentum/Ornamentum.java @@ -55,8 +55,6 @@ public class Ornamentum { ModItems.register(modEventBus); ModCreativeModeTabs.register(modEventBus); - ModBlockEntities.register(modEventBus); - ModMenuTypes.register(modEventBus); // Register the commonSetup method for modloading modEventBus.addListener(this::commonSetup); @@ -105,10 +103,6 @@ public class Ornamentum { } - @SubscribeEvent - public static void onRegisterScreens(net.neoforged.neoforge.client.event.RegisterMenuScreensEvent event) { - event.register(ModMenuTypes.SKYBOX_MENU.get(), ovh.glitchlabs.ornamentum.client.gui.SkyboxScreen::new); - } private static void registerGlassRenderTypes() { net.minecraft.client.renderer.ItemBlockRenderTypes.setRenderLayer(ModBlocks.LIME_GLOW_STAINED_GLASS.get(), net.minecraft.client.renderer.RenderType.translucent()); diff --git a/src/main/java/ovh/glitchlabs/ornamentum/blocks/ModBlocks.java b/src/main/java/ovh/glitchlabs/ornamentum/blocks/ModBlocks.java index b7b7334..5c453ce 100644 --- a/src/main/java/ovh/glitchlabs/ornamentum/blocks/ModBlocks.java +++ b/src/main/java/ovh/glitchlabs/ornamentum/blocks/ModBlocks.java @@ -9,8 +9,6 @@ import net.neoforged.neoforge.registries.DeferredBlock; import net.neoforged.neoforge.registries.DeferredRegister; import ovh.glitchlabs.ornamentum.Ornamentum; import ovh.glitchlabs.ornamentum.items.ModItems; -import ovh.glitchlabs.ornamentum.blocks.SkyboxBlock; - import java.util.function.Supplier; @@ -18,12 +16,6 @@ public class ModBlocks { public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Ornamentum.MODID); - public static final DeferredBlock SKYBOX_BLOCK = registerBlock("skybox_block", - () -> new SkyboxBlock(BlockBehaviour.Properties.of() - .strength(3.0f) - .sound(SoundType.AMETHYST) - .lightLevel(state -> 7))); - //more bricks diff --git a/src/main/java/ovh/glitchlabs/ornamentum/blocks/SkyboxBlock.java b/src/main/java/ovh/glitchlabs/ornamentum/blocks/SkyboxBlock.java deleted file mode 100644 index d1339f4..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/blocks/SkyboxBlock.java +++ /dev/null @@ -1,49 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/block/SkyboxBlock.java -package ovh.glitchlabs.ornamentum.blocks; - -import com.mojang.serialization.MapCodec; -import net.minecraft.core.BlockPos; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseEntityBlock; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; -import ovh.glitchlabs.ornamentum.blocks.entity.SkyboxBlockEntity; - -public class SkyboxBlock extends BaseEntityBlock { - - public static final MapCodec CODEC = simpleCodec(SkyboxBlock::new); - - public SkyboxBlock(BlockBehaviour.Properties properties) { - super(properties); - } - - @Override - protected MapCodec codec() { - return CODEC; - } - - @Override - public RenderShape getRenderShape(BlockState state) { - return RenderShape.MODEL; - } - - @Nullable - @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new SkyboxBlockEntity(pos, state); - } - - @Override - protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hit) { - if (!level.isClientSide() && level.getBlockEntity(pos) instanceof SkyboxBlockEntity be) { - player.openMenu(be, buf -> buf.writeBlockPos(pos)); - } - return InteractionResult.SUCCESS; - } -} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/ornamentum/blocks/entity/ModBlockEntities.java b/src/main/java/ovh/glitchlabs/ornamentum/blocks/entity/ModBlockEntities.java deleted file mode 100644 index 012d357..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/blocks/entity/ModBlockEntities.java +++ /dev/null @@ -1,23 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/block/entity/ModBlockEntities.java -package ovh.glitchlabs.ornamentum.blocks.entity; - -import net.minecraft.core.registries.Registries; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.neoforge.registries.DeferredHolder; -import net.neoforged.neoforge.registries.DeferredRegister; -import ovh.glitchlabs.ornamentum.Ornamentum; -import ovh.glitchlabs.ornamentum.blocks.ModBlocks; - -public class ModBlockEntities { - public static final DeferredRegister> BLOCK_ENTITY_TYPES = - DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Ornamentum.MODID); - - public static final DeferredHolder, BlockEntityType> SKYBOX_BLOCK_ENTITY = - BLOCK_ENTITY_TYPES.register("skybox_block_entity", - () -> BlockEntityType.Builder.of(SkyboxBlockEntity::new, ModBlocks.SKYBOX_BLOCK.get()).build(null)); - - public static void register(IEventBus bus) { - BLOCK_ENTITY_TYPES.register(bus); - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/blocks/entity/SkyboxBlockEntity.java b/src/main/java/ovh/glitchlabs/ornamentum/blocks/entity/SkyboxBlockEntity.java deleted file mode 100644 index ee9fcf8..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/blocks/entity/SkyboxBlockEntity.java +++ /dev/null @@ -1,160 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/block/entity/SkyboxBlockEntity.java -package ovh.glitchlabs.ornamentum.blocks.entity; - -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.util.Mth; -import net.minecraft.world.MenuProvider; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.ContainerData; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.core.BlockPos; -import ovh.glitchlabs.ornamentum.client.ClientSkyboxTracker; -import ovh.glitchlabs.ornamentum.menu.SkyboxMenu; - -public class SkyboxBlockEntity extends BlockEntity implements MenuProvider { - - private int range = 48; - private int colorIndex = 0; - private boolean starsEnabled = true; - private int texturePreset = 0; - - private final ContainerData data = new ContainerData() { - @Override - public int get(int index) { - return switch (index) { - case 0 -> range; - case 1 -> colorIndex; - case 2 -> starsEnabled ? 1 : 0; - case 3 -> texturePreset; - default -> 0; - }; - } - - @Override - public void set(int index, int value) { - switch (index) { - case 0 -> range = value; - case 1 -> colorIndex = value; - case 2 -> starsEnabled = value != 0; - case 3 -> texturePreset = value; - } - } - - @Override - public int getCount() { - return 4; - } - }; - - public SkyboxBlockEntity(BlockPos pos, BlockState state) { - super(ModBlockEntities.SKYBOX_BLOCK_ENTITY.get(), pos, state); - } - - public int getRange() { - return range; - } - - public int getColorIndex() { - return colorIndex; - } - - public boolean isStarsEnabled() { - return starsEnabled; - } - - public int getTexturePreset() { - return texturePreset; - } - - public void setRange(int value) { - this.range = Mth.clamp(value, 8, 128); - syncToClient(); - } - - public void setColorIndex(int value) { - this.colorIndex = value; - syncToClient(); - } - - public void setStarsEnabled(boolean value) { - this.starsEnabled = value; - syncToClient(); - } - - public void setTexturePreset(int value) { - this.texturePreset = value; - syncToClient(); - } - - private void syncToClient() { - setChanged(); - if (level != null && !level.isClientSide()) { - level.sendBlockUpdated(getBlockPos(), getBlockState(), getBlockState(), Block.UPDATE_CLIENTS); - } - } - - @Override - protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.saveAdditional(tag, registries); - tag.putInt("Range", range); - tag.putInt("ColorIndex", colorIndex); - tag.putBoolean("StarsEnabled", starsEnabled); - tag.putInt("TexturePreset", texturePreset); - } - - @Override - protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { - super.loadAdditional(tag, registries); - range = tag.getInt("Range"); - colorIndex = tag.getInt("ColorIndex"); - starsEnabled = tag.getBoolean("StarsEnabled"); - texturePreset = tag.getInt("TexturePreset"); - } - - @Override - public CompoundTag getUpdateTag(HolderLookup.Provider registries) { - CompoundTag tag = new CompoundTag(); - saveAdditional(tag, registries); - return tag; - } - - @Override - public ClientboundBlockEntityDataPacket getUpdatePacket() { - return ClientboundBlockEntityDataPacket.create(this); - } - - @Override - public Component getDisplayName() { - return Component.translatable("block.ornamentum.skybox_block"); - } - - @Override - public AbstractContainerMenu createMenu(int containerId, Inventory playerInventory, Player player) { - return new SkyboxMenu(containerId, playerInventory, this, this.data); - } - - @Override - public void onLoad() { - super.onLoad(); - // Nur der physische Client betritt diesen Zweig, da level.isClientSide() auf dem - // dedizierten Server immer false ist -> ClientSkyboxTracker wird dort nie geladen. - if (level != null && level.isClientSide()) { - ClientSkyboxTracker.register(getBlockPos()); - } - } - - @Override - public void setRemoved() { - super.setRemoved(); - if (level != null && level.isClientSide()) { - ClientSkyboxTracker.unregister(getBlockPos()); - } - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/client/ClientSkyboxTracker.java b/src/main/java/ovh/glitchlabs/ornamentum/client/ClientSkyboxTracker.java deleted file mode 100644 index 3d06455..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/client/ClientSkyboxTracker.java +++ /dev/null @@ -1,70 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/client/ClientSkyboxTracker.java -package ovh.glitchlabs.ornamentum.client; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.player.LocalPlayer; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.core.BlockPos; -import ovh.glitchlabs.ornamentum.blocks.entity.SkyboxBlockEntity; - -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -public class ClientSkyboxTracker { - - private static final Set POSITIONS = ConcurrentHashMap.newKeySet(); - private static final int FADE_DISTANCE = 12; - - public static void register(BlockPos pos) { - POSITIONS.add(pos); - } - - public static void unregister(BlockPos pos) { - POSITIONS.remove(pos); - } - - /** - * Bündelt alle für das Rendering relevanten Werte des aktuell "gewinnenden" - * (nächstgelegenen, aktivsten) Skybox-Blocks. - */ - public record ActiveSkybox(float blend, int colorIndex, boolean starsEnabled, int texturePreset) { - } - - /** - * @return null, wenn kein Skybox-Block in Reichweite ist, sonst die Werte - * des Blocks mit dem stärksten Überblend-Faktor. - */ - public static ActiveSkybox getActive() { - LocalPlayer player = Minecraft.getInstance().player; - ClientLevel level = Minecraft.getInstance().level; - if (player == null || level == null || POSITIONS.isEmpty()) { - return null; - } - - ActiveSkybox best = null; - float bestBlend = 0f; - - for (BlockPos pos : POSITIONS) { - if (!(level.getBlockEntity(pos) instanceof SkyboxBlockEntity be)) { - continue; - } - - double dist = Math.sqrt(player.blockPosition().distSqr(pos)); - int range = be.getRange(); - if (dist >= range) { - continue; - } - - float blend = dist <= range - FADE_DISTANCE - ? 1f - : (float) ((range - dist) / FADE_DISTANCE); - - if (blend > bestBlend) { - bestBlend = blend; - best = new ActiveSkybox(blend, be.getColorIndex(), be.isStarsEnabled(), be.getTexturePreset()); - } - } - - return best; - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/client/ModSkyboxRenderer.java b/src/main/java/ovh/glitchlabs/ornamentum/client/ModSkyboxRenderer.java deleted file mode 100644 index 619ceba..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/client/ModSkyboxRenderer.java +++ /dev/null @@ -1,115 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/client/ModSkyboxRenderer.java -package ovh.glitchlabs.ornamentum.client; - -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.VertexBuffer; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.resources.ResourceLocation; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.client.event.RenderLevelStageEvent; -import org.joml.Matrix4f; -import ovh.glitchlabs.ornamentum.Ornamentum; - -@EventBusSubscriber(modid = Ornamentum.MODID, value = Dist.CLIENT) -public class ModSkyboxRenderer { - - // Ein Preset pro Index aus dem GUI ("Textur wechseln"). Lege die passenden - // PNGs unter assets/ornamentum/textures/sky/ ab (equirektangulare Panoramen). - private static final ResourceLocation[] SKY_TEXTURES = { - ResourceLocation.fromNamespaceAndPath(Ornamentum.MODID, "textures/sky/custom_sky_0.png"), - ResourceLocation.fromNamespaceAndPath(Ornamentum.MODID, "textures/sky/custom_sky_1.png"), - ResourceLocation.fromNamespaceAndPath(Ornamentum.MODID, "textures/sky/custom_sky_2.png"), - ResourceLocation.fromNamespaceAndPath(Ornamentum.MODID, "textures/sky/custom_sky_3.png") - }; - - private static final ResourceLocation STARS_TEXTURE = - ResourceLocation.fromNamespaceAndPath(Ornamentum.MODID, "textures/sky/custom_stars.png"); - - // r, g, b pro Farb-Preset (Index = colorIndex aus dem GUI, "Farbe wechseln") - private static final float[][] COLOR_PRESETS = { - {0.55f, 0.75f, 1.00f}, // Blau - {0.65f, 0.45f, 0.85f}, // Lila - {1.00f, 0.60f, 0.30f}, // Orange - {0.40f, 0.85f, 0.45f}, // Grün - {0.90f, 0.30f, 0.30f}, // Rot - {0.30f, 0.80f, 0.80f} // Türkis - }; - - private static VertexBuffer skySphere; - private static VertexBuffer starSphere; - - @SubscribeEvent - public static void onRenderSky(RenderLevelStageEvent event) { - if (event.getStage() != RenderLevelStageEvent.Stage.AFTER_SKY) { - return; - } - - ClientSkyboxTracker.ActiveSkybox active = ClientSkyboxTracker.getActive(); - if (active == null || active.blend() <= 0f) { - return; - } - - if (skySphere == null) { - skySphere = SkyboxSphereBuilder.buildSphere(16, 16, 100f); - } - if (starSphere == null) { - starSphere = SkyboxSphereBuilder.buildSphere(16, 16, 90f); - } - - ClientLevel level = Minecraft.getInstance().level; - if (level == null) { - return; - } - - long dayTime = level.getDayTime() % 24000; - boolean isNight = dayTime > 13000 && dayTime < 23000; - float partialTick = event.getPartialTick().getGameTimeDeltaPartialTick(true); - float starVisibility = level.getStarBrightness(partialTick); - - float[] color = COLOR_PRESETS[active.colorIndex() % COLOR_PRESETS.length]; - float darken = isNight ? 0.25f : 1.0f; - - PoseStack poseStack = event.getPoseStack(); - if (poseStack == null) { - return; - } - poseStack.pushPose(); - - RenderSystem.enableBlend(); - RenderSystem.defaultBlendFunc(); - RenderSystem.depthMask(false); - RenderSystem.setShader(GameRenderer::getPositionTexShader); - - Matrix4f mvMatrix = new Matrix4f(poseStack.last().pose()); - Matrix4f projMatrix = event.getProjectionMatrix(); - - // 1) Basis-Himmelskugel mit gewählter Textur + Farbton - RenderSystem.setShaderColor(color[0] * darken, color[1] * darken, color[2] * darken, active.blend()); - RenderSystem.setShaderTexture(0, SKY_TEXTURES[active.texturePreset() % SKY_TEXTURES.length]); - skySphere.bind(); - skySphere.drawWithShader(mvMatrix, projMatrix, RenderSystem.getShader()); - - // 2) Sterne-Overlay, nur wenn im GUI aktiviert + es dunkel genug ist - if (active.starsEnabled()) { - float starAlpha = starVisibility * active.blend(); - if (starAlpha > 0.01f) { - RenderSystem.setShaderColor(1f, 1f, 1f, starAlpha); - RenderSystem.setShaderTexture(0, STARS_TEXTURE); - starSphere.bind(); - starSphere.drawWithShader(mvMatrix, projMatrix, RenderSystem.getShader()); - } - } - - VertexBuffer.unbind(); - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - RenderSystem.depthMask(true); - RenderSystem.disableBlend(); - - poseStack.popPose(); - } -} \ No newline at end of file diff --git a/src/main/java/ovh/glitchlabs/ornamentum/client/SkyboxSphereBuilder.java b/src/main/java/ovh/glitchlabs/ornamentum/client/SkyboxSphereBuilder.java deleted file mode 100644 index 717301a..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/client/SkyboxSphereBuilder.java +++ /dev/null @@ -1,69 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/client/SkyboxSphereBuilder.java -package ovh.glitchlabs.ornamentum.client; - -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.MeshData; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexBuffer; -import com.mojang.blaze3d.vertex.VertexFormat; -import org.joml.Vector3f; - -/** - * Baut eine einfache UV-gemappte Kugel als VertexBuffer, die per RenderSystem - * mit einer equirektangularen Panorama-Textur bezogen werden kann. - * - * Hinweis: Die genaue BufferBuilder/Tesselator-API kann sich zwischen NeoForge- - * Patch-Versionen leicht unterscheiden (1.21.x hat die Vertex-Pipeline mehrfach - * überarbeitet). Falls dein Compiler hier meckert, sag Bescheid mit der genauen - * Fehlermeldung - meist reicht eine kleine Anpassung der Methodennamen. - */ -public class SkyboxSphereBuilder { - - public static VertexBuffer buildSphere(int rings, int segments, float radius) { - BufferBuilder builder = Tesselator.getInstance().begin( - VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_TEX); - - for (int r = 0; r < rings; r++) { - float theta1 = (float) (r * Math.PI / rings); - float theta2 = (float) ((r + 1) * Math.PI / rings); - - for (int s = 0; s < segments; s++) { - float phi1 = (float) (s * 2 * Math.PI / segments); - float phi2 = (float) ((s + 1) * 2 * Math.PI / segments); - - Vector3f p1 = sphericalToCartesian(theta1, phi1, radius); - Vector3f p2 = sphericalToCartesian(theta2, phi1, radius); - Vector3f p3 = sphericalToCartesian(theta2, phi2, radius); - Vector3f p4 = sphericalToCartesian(theta1, phi2, radius); - - float u1 = (float) s / segments; - float u2 = (float) (s + 1) / segments; - float v1 = (float) r / rings; - float v2 = (float) (r + 1) / rings; - - builder.addVertex(p1.x, p1.y, p1.z).setUv(u1, v1); - builder.addVertex(p2.x, p2.y, p2.z).setUv(u1, v2); - builder.addVertex(p3.x, p3.y, p3.z).setUv(u2, v2); - - builder.addVertex(p1.x, p1.y, p1.z).setUv(u1, v1); - builder.addVertex(p3.x, p3.y, p3.z).setUv(u2, v2); - builder.addVertex(p4.x, p4.y, p4.z).setUv(u2, v1); - } - } - - MeshData mesh = builder.buildOrThrow(); - VertexBuffer buffer = new VertexBuffer(VertexBuffer.Usage.STATIC); - buffer.bind(); - buffer.upload(mesh); - VertexBuffer.unbind(); - return buffer; - } - - private static Vector3f sphericalToCartesian(float theta, float phi, float radius) { - float x = (float) (radius * Math.sin(theta) * Math.cos(phi)); - float y = (float) (radius * Math.cos(theta)); - float z = (float) (radius * Math.sin(theta) * Math.sin(phi)); - return new Vector3f(x, y, z); - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/client/gui/SkyboxScreen.java b/src/main/java/ovh/glitchlabs/ornamentum/client/gui/SkyboxScreen.java deleted file mode 100644 index cd33ef1..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/client/gui/SkyboxScreen.java +++ /dev/null @@ -1,69 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/client/gui/SkyboxScreen.java -package ovh.glitchlabs.ornamentum.client.gui; - -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.components.Button; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.neoforged.neoforge.network.PacketDistributor; -import ovh.glitchlabs.ornamentum.Ornamentum; -import ovh.glitchlabs.ornamentum.menu.SkyboxMenu; -import ovh.glitchlabs.ornamentum.network.SkyboxSettingsPayload; -import net.minecraft.world.entity.player.Inventory; - -public class SkyboxScreen extends AbstractContainerScreen { - - private static final ResourceLocation BG_TEXTURE = - ResourceLocation.fromNamespaceAndPath(Ornamentum.MODID, "textures/gui/skybox_gui.png"); - - private static final String[] COLOR_NAMES = {"Blau", "Lila", "Orange", "Grün", "Rot", "Türkis"}; - private static final String[] TEXTURE_NAMES = {"Standard", "Nebel", "Sterne+", "Aurora"}; - - public SkyboxScreen(SkyboxMenu menu, Inventory inventory, Component title) { - super(menu, inventory, title); - this.imageWidth = 176; - this.imageHeight = 166; - this.inventoryLabelY = 10000; // Standard-Inventar-Label ausblenden (kein Spieler-Inventar im GUI) - } - - @Override - protected void init() { - super.init(); - int x = leftPos; - int y = topPos; - - addRenderableWidget(Button.builder(Component.literal("-8"), b -> sendChange(0, -8)) - .bounds(x + 20, y + 20, 30, 20).build()); - addRenderableWidget(Button.builder(Component.literal("+8"), b -> sendChange(0, 8)) - .bounds(x + 126, y + 20, 30, 20).build()); - - addRenderableWidget(Button.builder(Component.literal("Farbe wechseln"), b -> sendChange(1, 1)) - .bounds(x + 20, y + 50, 136, 20).build()); - - addRenderableWidget(Button.builder(Component.literal("Sterne umschalten"), b -> sendChange(2, 0)) - .bounds(x + 20, y + 80, 136, 20).build()); - - addRenderableWidget(Button.builder(Component.literal("Textur wechseln"), b -> sendChange(3, 1)) - .bounds(x + 20, y + 110, 136, 20).build()); - } - - private void sendChange(int field, int delta) { - PacketDistributor.sendToServer(new SkyboxSettingsPayload( - menu.getBlockEntity().getBlockPos(), field, delta)); - } - - @Override - protected void renderBg(GuiGraphics guiGraphics, float partialTick, int mouseX, int mouseY) { - guiGraphics.blit(BG_TEXTURE, leftPos, topPos, 0, 0, imageWidth, imageHeight); - } - - @Override - protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) { - var data = menu.getData(); - guiGraphics.drawString(font, "Reichweite: " + data.get(0), 20, 8, 0x404040, false); - guiGraphics.drawString(font, "Farbe: " + COLOR_NAMES[data.get(1) % COLOR_NAMES.length], 20, 38, 0x404040, false); - guiGraphics.drawString(font, "Sterne: " + (data.get(2) != 0 ? "An" : "Aus"), 20, 68, 0x404040, false); - guiGraphics.drawString(font, "Textur: " + TEXTURE_NAMES[data.get(3) % TEXTURE_NAMES.length], 20, 98, 0x404040, false); - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockLootTableProvider.java b/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockLootTableProvider.java index 50197f9..e09a529 100644 --- a/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockLootTableProvider.java +++ b/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockLootTableProvider.java @@ -17,8 +17,6 @@ public class ModBlockLootTableProvider extends BlockLootSubProvider { @Override protected void generate() { - dropSelf(ModBlocks.SKYBOX_BLOCK.get()); - dropSelf(ModBlocks.POOL_TILES.get()); dropSelf(ModBlocks.POOL_TILES1.get()); diff --git a/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockStateProvider.java b/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockStateProvider.java index 682dd4f..cbc8fe1 100644 --- a/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockStateProvider.java +++ b/src/main/java/ovh/glitchlabs/ornamentum/datagen/ModBlockStateProvider.java @@ -16,8 +16,6 @@ public class ModBlockStateProvider extends BlockStateProvider { @Override protected void registerStatesAndModels() { - blockWithItem(ModBlocks.SKYBOX_BLOCK); - blockWithItem(ModBlocks.POOL_TILES); blockWithItem(ModBlocks.POOL_TILES1); diff --git a/src/main/java/ovh/glitchlabs/ornamentum/items/ModCreativeModeTabs.java b/src/main/java/ovh/glitchlabs/ornamentum/items/ModCreativeModeTabs.java index d41f16c..a0e70fd 100644 --- a/src/main/java/ovh/glitchlabs/ornamentum/items/ModCreativeModeTabs.java +++ b/src/main/java/ovh/glitchlabs/ornamentum/items/ModCreativeModeTabs.java @@ -23,8 +23,6 @@ public class ModCreativeModeTabs { .title(Component.translatable("creativetab.ornamentum.ornamentum")) .displayItems((itemDisplayParameters, output) -> { - output.accept(ModBlocks.SKYBOX_BLOCK); - //Grates output.accept(ModBlocks.IRON_GRATE); output.accept(ModBlocks.GOLD_GRATE); diff --git a/src/main/java/ovh/glitchlabs/ornamentum/menu/ModMenuTypes.java b/src/main/java/ovh/glitchlabs/ornamentum/menu/ModMenuTypes.java deleted file mode 100644 index 962e708..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/menu/ModMenuTypes.java +++ /dev/null @@ -1,22 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/menu/ModMenuTypes.java -package ovh.glitchlabs.ornamentum.menu; - -import net.minecraft.core.registries.Registries; -import net.minecraft.world.inventory.MenuType; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; -import net.neoforged.neoforge.registries.DeferredHolder; -import net.neoforged.neoforge.registries.DeferredRegister; -import ovh.glitchlabs.ornamentum.Ornamentum; - -public class ModMenuTypes { - public static final DeferredRegister> MENU_TYPES = - DeferredRegister.create(Registries.MENU, Ornamentum.MODID); - - public static final DeferredHolder, MenuType> SKYBOX_MENU = - MENU_TYPES.register("skybox_menu", () -> IMenuTypeExtension.create(SkyboxMenu::new)); - - public static void register(IEventBus bus) { - MENU_TYPES.register(bus); - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/menu/SkyboxMenu.java b/src/main/java/ovh/glitchlabs/ornamentum/menu/SkyboxMenu.java deleted file mode 100644 index 051a736..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/menu/SkyboxMenu.java +++ /dev/null @@ -1,53 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/menu/SkyboxMenu.java -package ovh.glitchlabs.ornamentum.menu; - -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.world.entity.player.Inventory; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.ContainerData; -import net.minecraft.world.inventory.SimpleContainerData; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.phys.Vec3; -import ovh.glitchlabs.ornamentum.blocks.entity.SkyboxBlockEntity; - -public class SkyboxMenu extends AbstractContainerMenu { - - private final SkyboxBlockEntity blockEntity; - private final ContainerData data; - - // Wird beim Client-seitigen Öffnen des Menüs aufgerufen (über ModMenuTypes / IMenuTypeExtension) - public SkyboxMenu(int containerId, Inventory inv, RegistryFriendlyByteBuf buf) { - this(containerId, inv, - (SkyboxBlockEntity) inv.player.level().getBlockEntity(buf.readBlockPos()), - new SimpleContainerData(4)); - } - - // Wird server- und clientseitig verwendet (die echte BlockEntity liefert die Daten) - public SkyboxMenu(int containerId, Inventory inv, SkyboxBlockEntity blockEntity, ContainerData data) { - super(ModMenuTypes.SKYBOX_MENU.get(), containerId); - this.blockEntity = blockEntity; - this.data = data; - addDataSlots(data); - } - - public SkyboxBlockEntity getBlockEntity() { - return blockEntity; - } - - public ContainerData getData() { - return data; - } - - @Override - public boolean stillValid(Player player) { - return blockEntity != null && !blockEntity.isRemoved() - && player.distanceToSqr(Vec3.atCenterOf(blockEntity.getBlockPos())) < 64.0; - } - - @Override - public ItemStack quickMoveStack(Player player, int index) { - // Kein Inventar in diesem Menü - keine Item-Slots zu verschieben. - return ItemStack.EMPTY; - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/network/ModNetworking.java b/src/main/java/ovh/glitchlabs/ornamentum/network/ModNetworking.java deleted file mode 100644 index dbc0b09..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/network/ModNetworking.java +++ /dev/null @@ -1,36 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/network/ModNetworking.java -package ovh.glitchlabs.ornamentum.network; - -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.EventBusSubscriber; -import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; -import net.neoforged.neoforge.network.handling.IPayloadContext; -import net.neoforged.neoforge.network.registration.PayloadRegistrar; -import ovh.glitchlabs.ornamentum.Ornamentum; -import ovh.glitchlabs.ornamentum.blocks.entity.SkyboxBlockEntity; - -@EventBusSubscriber(modid = Ornamentum.MODID, bus = EventBusSubscriber.Bus.MOD) -public class ModNetworking { - - @SubscribeEvent - public static void register(RegisterPayloadHandlersEvent event) { - PayloadRegistrar registrar = event.registrar("1"); - registrar.playToServer(SkyboxSettingsPayload.TYPE, SkyboxSettingsPayload.STREAM_CODEC, - ModNetworking::handleSkyboxSettings); - } - - private static void handleSkyboxSettings(SkyboxSettingsPayload payload, IPayloadContext context) { - context.enqueueWork(() -> { - if (!(context.player().level().getBlockEntity(payload.pos()) instanceof SkyboxBlockEntity be)) { - return; - } - - switch (payload.field()) { - case 0 -> be.setRange(be.getRange() + payload.delta()); - case 1 -> be.setColorIndex((be.getColorIndex() + 1) % 6); - case 2 -> be.setStarsEnabled(!be.isStarsEnabled()); - case 3 -> be.setTexturePreset((be.getTexturePreset() + 1) % 4); - } - }); - } -} diff --git a/src/main/java/ovh/glitchlabs/ornamentum/network/SkyboxSettingsPayload.java b/src/main/java/ovh/glitchlabs/ornamentum/network/SkyboxSettingsPayload.java deleted file mode 100644 index 7153193..0000000 --- a/src/main/java/ovh/glitchlabs/ornamentum/network/SkyboxSettingsPayload.java +++ /dev/null @@ -1,30 +0,0 @@ -// Zielpfad: src/main/java/ovh/glitchlabs/ornamentum/network/SkyboxSettingsPayload.java -package ovh.glitchlabs.ornamentum.network; - -import net.minecraft.core.BlockPos; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -import ovh.glitchlabs.ornamentum.Ornamentum; - -// field: 0 = range (+delta), 1 = colorIndex (+1 zum Weiterschalten), 2 = starsEnabled (toggle, delta ignoriert), -// 3 = texturePreset (+1 zum Weiterschalten) -public record SkyboxSettingsPayload(BlockPos pos, int field, int delta) implements CustomPacketPayload { - - public static final Type TYPE = - new Type<>(ResourceLocation.fromNamespaceAndPath(Ornamentum.MODID, "skybox_settings")); - - public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - BlockPos.STREAM_CODEC, SkyboxSettingsPayload::pos, - ByteBufCodecs.VAR_INT, SkyboxSettingsPayload::field, - ByteBufCodecs.VAR_INT, SkyboxSettingsPayload::delta, - SkyboxSettingsPayload::new - ); - - @Override - public Type type() { - return TYPE; - } -} diff --git a/src/main/resources/assets/ornamentum/textures/block/skybox_block.png b/src/main/resources/assets/ornamentum/textures/block/skybox_block.png deleted file mode 100644 index 9bb8496..0000000 Binary files a/src/main/resources/assets/ornamentum/textures/block/skybox_block.png and /dev/null differ