Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ plugins {

allprojects {
group = "org.enginehub.worldeditcui"
version = "${rootProject.libs.versions.minecraft.get()}+02-SNAPSHOT"
version = "${rootProject.libs.versions.minecraft.get()}+01-SNAPSHOT"

repositories {
// mirrors:
Expand Down
20 changes: 10 additions & 10 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@ format = { version = "1.1" }

[versions]
indra = "3.1.3"
minecraft = "1.21.7"
fabricLoader = "0.16.14"
fabricApi = "0.128.1+1.21.7"
modmenu = "15.0.0-beta.3"
minecraft = "1.21.10"
fabricLoader = "0.17.3"
fabricApi = "0.138.0+1.21.10"
modmenu = "16.0.0-rc.1"
viafabricplus = "3.3.0"
vineflower = "1.10.1"
cuiProtocol = "4.0.1"
cuiProtocol = "4.0.2"

[libraries]
minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" }
parchment = { module = "org.parchmentmc.data:parchment-1.21.5", version = "2025.06.15" }
parchment = { module = "org.parchmentmc.data:parchment-1.21.9", version = "2025.10.05" }
fabric-loader = { module = "net.fabricmc:fabric-loader", version.ref = "fabricLoader" }
fabric-api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabricApi" }
fabric-api-bom = { module = "net.fabricmc.fabric-api:fabric-api-bom", version.ref = "fabricApi" }
fabric-api-networking = { module = "net.fabricmc.fabric-api:fabric-networking-api-v1" }
modmenu = { module = "com.terraformersmc:modmenu", version.ref = "modmenu" }
neoforge = { module = "net.neoforged:neoforge", version = "21.7.1-beta"}
neoforge = { module = "net.neoforged:neoforge", version = "21.10.9-beta"}
viafabricplus-api = { module = "de.florianmichael:ViaFabricPlus", version.ref = "viafabricplus" }
viaversion = { module = "com.viaversion:viaversion-common", version = "5.0.5" }
vineflower = { module = "org.vineflower:vineflower", version.ref = "vineflower" }
Expand All @@ -31,17 +31,17 @@ curseForgeGradle = { id = "net.darkhax.curseforgegradle", version = "1.1.26" }
indra-git = { id = "net.kyori.indra.git", version.ref = "indra" }
indra-spotlessLicenser = { id = "net.kyori.indra.licenser.spotless", version.ref = "indra" }
jvmConflictResolution = { id = "org.gradlex.jvm-dependency-conflict-resolution", version = "2.1.2" }
loom = { id = "dev.architectury.loom", version = "1.10.430" }
loom = { id = "dev.architectury.loom", version = "1.11.454" }
minotaur = { id = "com.modrinth.minotaur", version = "2.8.7" }
publishGithubRelease = { id = "ca.stellardrift.publish-github-release", version = "0.1.0" }
shadow = { id = "com.gradleup.shadow", version = "8.3.5" }
spotless = { id = "com.diffplug.spotless", version = "6.25.0" }
versions = { id = "com.github.ben-manes.versions", version = "0.51.0" }

[libraries.cuiProtocol-fabric]
module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-fabric-mc1.21.7"
module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-fabric-mc1.21.9"
version.ref = "cuiProtocol"

[libraries.cuiProtocol-neoforge]
module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-neoforge-mc1.21.7"
module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-neoforge-mc1.21.9"
version.ref = "cuiProtocol"
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,20 @@
*/
package org.enginehub.worldeditcui.fabric;

import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.systems.RenderSystem;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderEvents;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.Level;
import org.enginehub.worldeditcui.WorldEditCUI;
import org.enginehub.worldeditcui.config.CUIConfiguration;
Expand All @@ -49,10 +49,12 @@ public final class FabricModWorldEditCUI implements ModInitializer {
public static final String MOD_ID = "worldeditcui";
private static FabricModWorldEditCUI instance;

private static final String KEYBIND_CATEGORY_WECUI = "key.categories.worldeditcui";
private final KeyMapping keyBindToggleUI = key("toggle", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN);
private final KeyMapping keyBindClearSel = key("clear", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN);
private final KeyMapping keyBindChunkBorder = key("chunk", InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN);
private static final KeyMapping.Category KEYBIND_CATEGORY_WECUI
= new KeyMapping.Category(ResourceLocation.fromNamespaceAndPath(MOD_ID, "general"));

private final KeyMapping keyBindToggleUI = key("toggle", GLFW.GLFW_KEY_UNKNOWN);
private final KeyMapping keyBindClearSel = key("clear", GLFW.GLFW_KEY_UNKNOWN);
private final KeyMapping keyBindChunkBorder = key("chunk", GLFW.GLFW_KEY_UNKNOWN);

private static final List<PipelineProvider> RENDER_PIPELINES = List.of(
new OptifinePipelineProvider(),
Expand All @@ -69,16 +71,18 @@ public final class FabricModWorldEditCUI implements ModInitializer {
private boolean visible = true;
private int delayedHelo = 0;

private float lastPartialTicks = 0.0f;

/**
* Register a key binding
*
* @param name id, will be used as a localization key under {@code key.worldeditcui.<name>}
* @param type type
* @param code default value
* @return new, registered keybinding in the mod category
*/
private static KeyMapping key(final String name, final InputConstants.Type type, final int code) {
return KeyBindingHelper.registerKeyBinding(new KeyMapping("key." + MOD_ID + '.' + name, type, code, KEYBIND_CATEGORY_WECUI));
private static KeyMapping key(final String name, final int code) {
return KeyBindingHelper.registerKeyBinding(
new KeyMapping("key." + MOD_ID + '.' + name, code, KEYBIND_CATEGORY_WECUI));
}

@Override
Expand All @@ -94,31 +98,20 @@ public void onInitialize() {
ClientLifecycleEvents.CLIENT_STARTED.register(this::onGameInitDone);
CUINetworking.subscribeToCuiPacket(this::onPluginMessage);
ClientPlayConnectionEvents.JOIN.register(this::onJoinGame);
WorldRenderEvents.AFTER_TRANSLUCENT.register(ctx -> {
if (ctx.advancedTranslucency()) {
try {
RenderSystem.getModelViewStack().pushMatrix();
RenderSystem.getModelViewStack().mul(ctx.matrixStack().last().pose());
// RenderSystem.applyModelViewMatrix();
//ctx.worldRenderer().getTranslucentTarget().bindWrite(false);
this.onPostRenderEntities(ctx);
} finally {
//Minecraft.getInstance().getMainRenderTarget().bindWrite(false);
RenderSystem.getModelViewStack().popMatrix();
}
}
WorldRenderEvents.END_EXTRACTION.register(ctx -> {
// MC now handles this separately to the actual render, due to it occurring across threads.
// We need to store this for later use during actual render.
lastPartialTicks = ctx.tickCounter().getRealtimeDeltaTicks();
});
WorldRenderEvents.LAST.register(ctx -> {
if (!ctx.advancedTranslucency()) {
try {
RenderSystem.getModelViewStack().pushMatrix();
RenderSystem.getModelViewStack().mul(ctx.matrixStack().last().pose());
// RenderSystem.applyModelViewMatrix();
this.onPostRenderEntities(ctx);
} finally {
RenderSystem.getModelViewStack().popMatrix();
// RenderSystem.applyModelViewMatrix();
}
WorldRenderEvents.END_MAIN.register(ctx -> {
try {
RenderSystem.getModelViewStack().pushMatrix();
RenderSystem.getModelViewStack().mul(ctx.matrices().last().pose());
// RenderSystem.applyModelViewMatrix();
this.onPostRenderEntities(ctx);
} finally {
RenderSystem.getModelViewStack().popMatrix();
// RenderSystem.applyModelViewMatrix();
}
});
}
Expand Down Expand Up @@ -194,7 +187,7 @@ public void onJoinGame(final ClientPacketListener handler, final PacketSender se

public void onPostRenderEntities(final WorldRenderContext ctx) {
if (this.visible) {
this.worldRenderListener.onRender(ctx.tickCounter().getRealtimeDeltaTicks());
this.worldRenderListener.onRender(lastPartialTicks);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@
import net.minecraft.util.FormattedCharSequence;
import org.enginehub.worldeditcui.config.CUIConfiguration;
import org.enginehub.worldeditcui.config.Colour;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;

import java.util.List;
import java.util.Objects;

public class CUIConfigList extends ContainerObjectSelectionList<CUIConfigList.ConfigEntry> {
private static final Logger LOGGER = LogUtils.getLogger();
Expand Down Expand Up @@ -87,28 +89,28 @@ public OnOffEntry(String tag) {
}

@Override
public void render(GuiGraphics gfx, int index, int top, int left, int width, int height, int mouseX, int mouseY, boolean isMouseOver, float partialTick) {
super.render(gfx, index, top, left, width, height, mouseX, mouseY, isMouseOver, partialTick);

this.toggleBotton.setX(left + 105);
this.toggleBotton.setY(top);
this.toggleBotton.render(gfx, mouseX, mouseY, partialTick);
}

@Override
public List<? extends GuiEventListener> children() {
public @NotNull List<? extends GuiEventListener> children() {
return ImmutableList.of(this.resetButton, this.toggleBotton);
}

@Override
public List<? extends NarratableEntry> narratables() {
public @NotNull List<? extends NarratableEntry> narratables() {
return ImmutableList.of(this.resetButton, this.toggleBotton);
}

@Override
protected void updateFromConfig() {
this.toggleBotton.setValue((Boolean)configuration.getConfigArray().get(tag));
}

@Override
public void renderContent(GuiGraphics gfx, int mouseX, int mouseY, boolean isMouseOver, float partialTick) {
super.renderContent(gfx, mouseX, mouseY, isMouseOver, partialTick);

this.toggleBotton.setX(getRowLeft() + 105);
this.toggleBotton.setY(getY());
this.toggleBotton.render(gfx, mouseX, mouseY, partialTick);
}
}

public class ColorConfigEntry extends ConfigEntry {
Expand All @@ -127,7 +129,7 @@ public ColorConfigEntry(String tag) {
configuration.changeValue(tag, tested);
}
});
textField.setFormatter((string, integer) -> {
textField.addFormatter((string, integer) -> {
final String colorSource = textField.getValue();
if (colorSource.length() != 9) {
return FormattedCharSequence.forward(string, invalidFormat);
Expand Down Expand Up @@ -155,27 +157,27 @@ public ColorConfigEntry(String tag) {
}

@Override
public void render(GuiGraphics gfx, int index, int top, int left, int width, int height, int mouseX, int mouseY, boolean isMouseOver, float partialTick) {
super.render(gfx, index, top, left, width, height, mouseX, mouseY, isMouseOver, partialTick);
this.textField.setX(left + 105);
this.textField.setY(top);
this.textField.render(gfx, mouseX, mouseY, partialTick);
}

@Override
public List<? extends GuiEventListener> children() {
public @NotNull List<? extends GuiEventListener> children() {
return ImmutableList.of(this.resetButton, this.textField);
}

@Override
public List<? extends NarratableEntry> narratables() {
public @NotNull List<? extends NarratableEntry> narratables() {
return ImmutableList.of(this.resetButton, this.textField);
}

@Override
protected void updateFromConfig() {
this.textField.setValue(((Colour)configuration.getConfigArray().get(tag)).hexString());
}

@Override
public void renderContent(GuiGraphics gfx, int mouseX, int mouseY, boolean isMouseOver, float partialTick) {
super.renderContent(gfx, mouseX, mouseY, isMouseOver, partialTick);
this.textField.setX(getRowLeft() + 105);
this.textField.setY(getY());
this.textField.render(gfx, mouseX, mouseY, partialTick);
}
}

public abstract class ConfigEntry extends ContainerObjectSelectionList.Entry<ConfigEntry> {
Expand All @@ -186,21 +188,26 @@ public abstract class ConfigEntry extends ContainerObjectSelectionList.Entry<Con
public ConfigEntry(String tag) {
this.tag = tag;

this.resetButton = Button.builder(Component.translatable("controls.reset"), (button) -> {
this.resetButton = Button.builder(Component.translatable("controls.reset"), button -> {
configuration.changeValue(tag, configuration.getDefaultValue(tag));
updateFromConfig();
}).bounds(0, 0, 50, BUTTON_HEIGHT).build();

textField = new StringWidget(configuration.getDescription(tag), minecraft.font);
textField.alignLeft();

textField = new StringWidget(Objects.requireNonNull(configuration.getDescription(tag)), minecraft.font);
//textField.alignLeft();
Component tooltip = configuration.getTooltip(tag);
if (tooltip != null) {
textField.setTooltip(Tooltip.create(tooltip));
}
}

@Override
public void render(GuiGraphics gfx, int index, int top, int left, int width, int height, int mouseX, int mouseY, boolean isMouseOver, float partialTick) {
public void renderContent(GuiGraphics gfx, int mouseX, int mouseY, boolean hovered, float partialTick) {
// new API handles entry position internally
int left = this.getX();
int top = this.getY(); // or getRowTop()

int textLeft = left + 90 - maxNameWidth;

this.textField.setX(textLeft);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"key.worldeditcui.toggle": "CUI Sichtbarkeit An/Aus",
"key.worldeditcui.clear": "WorldEdit Auswahl aufheben",
"key.worldeditcui.chunk": "Chunkgrenzen An/Aus",
"key.categories.worldeditcui": "WorldEditCUI",
"key.category.worldeditcui.general": "WorldEditCUI",
"worldeditcui.color.cuboidedge": "Quader Randfarbe",
"worldeditcui.color.cuboidedge.tooltip": "Wähle die Farbe für den Rand einer Quader-Region aus",
"worldeditcui.color.cuboidgrid": "Quader Rasterfarbe",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"key.worldeditcui.toggle": "Toggle CUI visibility",
"key.worldeditcui.clear": "Clear WorldEdit selection",
"key.worldeditcui.chunk": "Toggle Chunk Border",
"key.categories.worldeditcui": "WorldEditCUI",
"key.category.worldeditcui.general": "WorldEditCUI",
"worldeditcui.color.cuboidedge": "Cuboid Edge Color",
"worldeditcui.color.cuboidedge.tooltip": "Select the color for the edge of a cuboid region",
"worldeditcui.color.cuboidgrid": "Cuboid Grid Color",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"worldeditcui.options.title": "Options WorldEditCUI",
"key.worldeditcui.toggle": "Bascule Visibilité du CUI",
"key.worldeditcui.clear": "Effacer la sélection WorldEdit",
"key.categories.worldeditcui": "WorldEditCUI",
"key.category.worldeditcui.general": "WorldEditCUI",
"worldeditcui.color.cuboidedge": "Couleur des bordures du Cuboïde",
"worldeditcui.color.cuboidgrid": "Couleur de la grille du Cuboïde",
"worldeditcui.color.cuboidpoint1": "Couleur du premier point du Cuboïde",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"worldeditcui.options.title": "WorldEditCUI Opties",
"key.worldeditcui.toggle": "CUI zichtbaarheid omschakelen",
"key.worldeditcui.clear": "WorldEdit selectie verwijderen",
"key.categories.worldeditcui": "WorldEditCUI",
"key.category.worldeditcui.general": "WorldEditCUI",
"worldeditcui.color.cuboidedge": "Randkleur Balk",
"worldeditcui.color.cuboidgrid": "Roosterkleur Balk",
"worldeditcui.color.cuboidpoint1": "Eerste punt kleur Balk",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"worldeditcui.options.title": "Настройки WorldEditCUI",
"key.worldeditcui.toggle": "Переключить видимость CUI",
"key.worldeditcui.clear": "Очистить выделение WorldEdit",
"key.categories.worldeditcui": "WorldEditCUI",
"key.category.worldeditcui.general": "WorldEditCUI",
"worldeditcui.color.cuboidedge": "Цвет границ кубоида",
"worldeditcui.color.cuboidgrid": "Цвет сетки кубоида",
"worldeditcui.color.cuboidpoint1": "Цвет первой точки кубоида",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"worldeditcui.options.title": "Налаштування WorldEditCUI",
"key.worldeditcui.toggle": "Перемкнути видимість CUI",
"key.worldeditcui.clear": "Очистити виділення",
"key.categories.worldeditcui": "WorldEditCUI",
"key.category.worldeditcui.general": "WorldEditCUI",
"worldeditcui.color.cuboidedge": "Колір границі кубоїда",
"worldeditcui.color.cuboidgrid": "Колір сітки кубоїда",
"worldeditcui.color.cuboidpoint1": "Колір першої точки кубоїда",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"worldeditcui.options.title": "WorldEditCUI选项",
"key.worldeditcui.toggle": "显示/隐藏 WECUI",
"key.worldeditcui.clear": "取消WorldEdit选择区域",
"key.categories.worldeditcui": "WorldEditCUI按键设置",
"key.category.worldeditcui.general": "WorldEditCUI按键设置",
"worldeditcui.color.cuboidedge": "长方体边缘颜色",
"worldeditcui.color.cuboidgrid": "长方体网格颜色",
"worldeditcui.color.cuboidpoint1": "长方体第一点颜色",
Expand Down
4 changes: 2 additions & 2 deletions worldeditcui-fabric/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@
"fabric-screen-api-v1": ">=1.0.9",
"fabric-resource-loader-v0": ">=0.4.17",
"fabric-transitive-access-wideners-v1": "*",
"minecraft": ">=1.21.5"
"minecraft": ">=1.21.9"
},
"suggests": {
"worldedit": ">=7.3.12"
"worldedit": ">=7.3.17"
},
"breaks": {
"worldedit": ["7.3.1", "7.3.2", "7.3.3", "7.3.4-beta-01", "7.3.4", "7.3.5", "7.3.6", "7.3.7", "7.3.8", "7.3.9-beta-01", "7.3.9", "7.3.10-beta-01", "7.3.10", "7.3.11", "7.3.12-beta-01", "7.3.12-beta-02"]
Expand Down
Loading