From f1fe759736c699cecb2f9b4a5f71bc77109626a7 Mon Sep 17 00:00:00 2001 From: JOJO <39382270+GCJOJO@users.noreply.github.com> Date: Sun, 31 May 2026 17:54:30 +0200 Subject: [PATCH 01/10] Updated Permissions --- .../fr/gcjojo/worldscolliding/commands/DialogueCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java b/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java index e9a0d9b..a15547a 100644 --- a/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java +++ b/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java @@ -54,7 +54,7 @@ public static void onRegisterCommands(RegisterCommandsEvent event) { List cinematics = Arrays.asList("laugh", "tp_effect"); List sealTypes = Arrays.asList("remnant", "dark", "light"); - event.getDispatcher().register(Commands.literal("dialogue").requires(commandSourceStack -> commandSourceStack.hasPermission(4)) + event.getDispatcher().register(Commands.literal("dialogue").requires(commandSourceStack -> commandSourceStack.hasPermission(2)) .then(Commands.literal("play") .executes(context -> { ServerPlayer player = context.getSource().getPlayerOrException(); @@ -93,7 +93,7 @@ public static void onRegisterCommands(RegisterCommandsEvent event) { }))) ); - event.getDispatcher().register(Commands.literal("scourge").requires(commandSourceStack -> commandSourceStack.hasPermission(4)) + event.getDispatcher().register(Commands.literal("scourge").requires(commandSourceStack -> commandSourceStack.hasPermission(2)) .then(Commands.literal("cinematic") .then(Commands.argument("action", StringArgumentType.string()) .suggests((context, builder) -> SharedSuggestionProvider.suggest(cinematics, builder)) From 17c124de1f388a1dd07e062c6126d9074f35298c Mon Sep 17 00:00:00 2001 From: JOJO <39382270+GCJOJO@users.noreply.github.com> Date: Sun, 31 May 2026 18:16:52 +0200 Subject: [PATCH 02/10] Scourge Entities should no longer despawn --- TODO.md | 8 ++++---- .../fr/gcjojo/worldscolliding/StoryDimensionData.java | 2 +- .../worldscolliding/entity/AwakenedScourgeEntity.java | 6 ++++++ .../fr/gcjojo/worldscolliding/entity/ScourgeEntity.java | 6 ++++++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index a64eab4..f8090d0 100644 --- a/TODO.md +++ b/TODO.md @@ -3,10 +3,10 @@ - [x] Not using `speaker` field for DialogueAction types - [x] Asynchronous actions - [X] Rendering of images -- [ ] Positioning of images -- [ ] Loading dialogues.json from other namespaces +- [X] Positioning of images +- [X] Loading dialogues.json from other namespaces - [X] Loading speakers from dialogues.json and not being hardcoded - [X] Change how Story Dimension's data is saved and use `player.getPersistentData()` instead - [ ] Images in scourge lore -- [ ] Ban message when The One gets ban -- [ ] If dark end -> after boss defeated, small scourge elevates and disappear and dialogue with The One \ No newline at end of file +- [X] Ban message when The One gets ban +- [X] If dark end -> after boss defeated, small scourge elevates and disappear and dialogue with The One \ No newline at end of file diff --git a/src/main/java/fr/gcjojo/worldscolliding/StoryDimensionData.java b/src/main/java/fr/gcjojo/worldscolliding/StoryDimensionData.java index 59bb6d5..7e0c507 100644 --- a/src/main/java/fr/gcjojo/worldscolliding/StoryDimensionData.java +++ b/src/main/java/fr/gcjojo/worldscolliding/StoryDimensionData.java @@ -31,7 +31,7 @@ public static Vec3 getNextAvailableSpawnpoint() public static class StoryDimensionSavedData extends SavedData { - public Vec3 savedLastSpot; + public Vec3 savedLastSpot = new Vec3(0, 100, 0); private static StoryDimensionSavedData create() { return new StoryDimensionSavedData(); diff --git a/src/main/java/fr/gcjojo/worldscolliding/entity/AwakenedScourgeEntity.java b/src/main/java/fr/gcjojo/worldscolliding/entity/AwakenedScourgeEntity.java index 7f91677..b68bc64 100644 --- a/src/main/java/fr/gcjojo/worldscolliding/entity/AwakenedScourgeEntity.java +++ b/src/main/java/fr/gcjojo/worldscolliding/entity/AwakenedScourgeEntity.java @@ -255,6 +255,12 @@ protected void registerGoals() { this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); } + @Override + public boolean isPersistenceRequired(){ return true; } + + @Override + public boolean requiresCustomPersistence() { return true; } + @Override public void tick() { super.tick(); diff --git a/src/main/java/fr/gcjojo/worldscolliding/entity/ScourgeEntity.java b/src/main/java/fr/gcjojo/worldscolliding/entity/ScourgeEntity.java index 48e2fcf..6b34279 100644 --- a/src/main/java/fr/gcjojo/worldscolliding/entity/ScourgeEntity.java +++ b/src/main/java/fr/gcjojo/worldscolliding/entity/ScourgeEntity.java @@ -130,6 +130,12 @@ public void tick() { } } + @Override + public boolean isPersistenceRequired(){ return true; } + + @Override + public boolean requiresCustomPersistence() { return true; } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { controllers.add(new AnimationController<>(this, "controller", 0, event -> From 0e6541ace6f9f5d7218f52502bfc6d2d482c1039 Mon Sep 17 00:00:00 2001 From: JOJO <39382270+GCJOJO@users.noreply.github.com> Date: Sun, 31 May 2026 18:17:39 +0200 Subject: [PATCH 03/10] Update gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 49452a7..9871539 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,7 +48,7 @@ mod_name=World's Colliding # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=1.1.0 +mod_version=1.1.1 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html From d813a9c83ed8017dcd0bbf210b4bf36b17058a64 Mon Sep 17 00:00:00 2001 From: LinkasPlay Date: Sun, 31 May 2026 23:22:01 +0200 Subject: [PATCH 04/10] bon --- gradle.properties | 2 +- .../commands/CommandRegister.java | 2 +- .../commands/DialogueCommand.java | 42 ++++++++++--------- 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/gradle.properties b/gradle.properties index 9871539..299bc74 100644 --- a/gradle.properties +++ b/gradle.properties @@ -48,7 +48,7 @@ mod_name=World's Colliding # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=All Rights Reserved # The mod version. See https://semver.org/ -mod_version=1.1.1 +mod_version=1.1.2 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/main/java/fr/gcjojo/worldscolliding/commands/CommandRegister.java b/src/main/java/fr/gcjojo/worldscolliding/commands/CommandRegister.java index f202bf5..6c16628 100644 --- a/src/main/java/fr/gcjojo/worldscolliding/commands/CommandRegister.java +++ b/src/main/java/fr/gcjojo/worldscolliding/commands/CommandRegister.java @@ -11,4 +11,4 @@ public class CommandRegister { public static void registerCommands(RegisterCommandsEvent event) { StoryCommand.register(event.getDispatcher()); } -} +} \ No newline at end of file diff --git a/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java b/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java index a15547a..d82b9f1 100644 --- a/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java +++ b/src/main/java/fr/gcjojo/worldscolliding/commands/DialogueCommand.java @@ -52,7 +52,7 @@ public static void onRegisterCommands(RegisterCommandsEvent event) { List chapters = Arrays.asList("dogcheck", "credits", "chapter_0_set", "chapter_1_set", "chapter_1_ask", "chapter_2_set", "chapter_2_ask", "chapter_3_set", "chapter_3_ask", "chapter_4_set", "chapter_5_6_set", "chapter_5_past_set", "chapter_5_set", "chapter_5_ask", "chapter_6_set", "chapter_6_ask", "chapter_7_prologue_set", "chapter_7_light_set", "chapter_7_dark_set"); List animations = Arrays.asList("sceal1", "sceal2", "sceal3", "sceal4", "sceal5", "sceal6", "sceal7", "sceal8", "ascend"); List cinematics = Arrays.asList("laugh", "tp_effect"); - List sealTypes = Arrays.asList("remnant", "dark", "light"); + List sealTypes = Arrays.asList("remnant", "dark", "light", "first_remnant"); event.getDispatcher().register(Commands.literal("dialogue").requires(commandSourceStack -> commandSourceStack.hasPermission(2)) .then(Commands.literal("play") @@ -169,28 +169,30 @@ public static void onRegisterCommands(RegisterCommandsEvent event) { Level level = scourge.level(); BlockPos center = scourge.blockPosition(); - String[] prefixes = {"dark", "mana", "elf", "sunny", "blaze", "e", "lavender"}; - for (BlockPos pos : BlockPos.betweenClosed(center.offset(-3, -3, -3), center.offset(3, 3, 3))) { - BlockState state = level.getBlockState(pos); - ResourceLocation loc = ForgeRegistries.BLOCKS.getKey(state.getBlock()); - - if (loc != null && loc.getNamespace().equals("botania") && loc.getPath().contains("_quartz")) { - String path = loc.getPath(); - for (int i = 0; i < prefixes.length - 1; i++) { - if (path.startsWith(prefixes[i] + "_quartz")) { - String newPath = path.replace(prefixes[i] + "_quartz", prefixes[i+1] + "_quartz"); - Block newBlock = ForgeRegistries.BLOCKS.getValue(ResourceLocation.fromNamespaceAndPath("botania", newPath)); - - if (newBlock != null && newBlock != Blocks.AIR) { - BlockState newState = newBlock.defaultBlockState(); - for (Property prop : state.getProperties()) { - if (newState.hasProperty(prop)) { - newState = copyProperty(state, newState, prop); + if (!itemType.equals("first_remnant")) { + String[] prefixes = {"dark", "mana", "elf", "sunny", "blaze", "e", "lavender"}; + for (BlockPos pos : BlockPos.betweenClosed(center.offset(-3, -3, -3), center.offset(3, 3, 3))) { + BlockState state = level.getBlockState(pos); + ResourceLocation loc = ForgeRegistries.BLOCKS.getKey(state.getBlock()); + + if (loc != null && loc.getNamespace().equals("botania") && loc.getPath().contains("_quartz")) { + String path = loc.getPath(); + for (int i = 0; i < prefixes.length - 1; i++) { + if (path.contains(prefixes[i] + "_quartz")) { + String newPath = path.replace(prefixes[i] + "_quartz", prefixes[i+1] + "_quartz"); + Block newBlock = ForgeRegistries.BLOCKS.getValue(ResourceLocation.fromNamespaceAndPath("botania", newPath)); + + if (newBlock != null && newBlock != Blocks.AIR) { + BlockState newState = newBlock.defaultBlockState(); + for (Property prop : state.getProperties()) { + if (newState.hasProperty(prop)) { + newState = copyProperty(state, newState, prop); + } } + level.setBlockAndUpdate(pos, newState); } - level.setBlockAndUpdate(pos, newState); + break; } - break; } } } From e4360ed6df2d1f8c8ea152b75bde452208ddd131 Mon Sep 17 00:00:00 2001 From: JOJO <39382270+GCJOJO@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:22:45 +0200 Subject: [PATCH 05/10] Update README.md --- README.md | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index dc8dd53..1e209e9 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Join our [discord](https://discord.gg/yMcCq7rWbs) !

Share your ideas or bug discoveries with us !
https://github.com/GCJOJO/WorldsColliding/issues
-## Developping with this mod +## Developing with this mod __How to build__: 1) Install Java JDK 17 2) Open command prompt or any IDE and run : @@ -21,13 +21,16 @@ https://github.com/GCJOJO/WorldsColliding/issues
3) Enjoy ! __How to use the dialogue system__:
-First create a datapack using this folder structure +First create a resource pack using this folder structure ``` - datapack-namespace/ - lang/ - en_us.json - any other language files... - dialogues.json + resourcepacks/ + my_resourcepack/ + assets/ + lang/ + en_us.json + any other language files... + dialogues.json + pack.mcmeta ``` Inside dialogues.json define the different speakers that may speak in your dialogues. @@ -64,14 +67,25 @@ Here is how you define a dialogue, there are multiple actions that can be define { "action": "wait", "time": 20 }, - // clears any non blocking actions, + // clears every actions, { "action": "clear" }, - //you may specify which action type to clear { "action": "clear", "cleared_action": "fade" }, // displays an image on the screen, the width and height are the original size of the image, the image should be properly resized once shown to the player { "action": "image", "id": 0, "image": "my_resourcepack:textures/gui/my_cool_texture.png", "width": 64, "height": 64}, + + // This actions move the image with id 0 with a duration of 80 ticks. + // The image starts at a position of 10% of the screen and ends at 90% of the screen and blends from 0% transparency to 100% + { "action": "move_image", "id": 0, "start_x": 10, "start_y": 10, "end_x": 90, "end_y": 90, "alpha_start": 0, "alpha_end": 255, "time": 80 } + + // This actions executes a command as the player reading the dialogue. + // The text will be replaced by the player's name. + { "action": "command", "command": "say hello from !" } + + // The command is execute as if the player typed it without needing permisions, you don't need to do /execute positioned as ... for any positioned command + // You can simply do : + { "action": "command", "command": "tp @s ~ ~10 ~" } ] } ``` From c7ecfc12ca2b9e841015f55a1980f9d2b1455e76 Mon Sep 17 00:00:00 2001 From: JOJO <39382270+GCJOJO@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:24:02 +0200 Subject: [PATCH 06/10] Update README.md --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1e209e9..d29b9cb 100644 --- a/README.md +++ b/README.md @@ -104,12 +104,13 @@ Non-blocking actions can be stacked on top of each others and stack on top of on Here is a table of Blocking and Non-Blocking Actions -| Blocking | Non-Blocking | -|:----------------:|:---------------:| -| MessageAction | FadeAction | -| ChoiceAction | ImageAction | -| WaitAction | NextAction | -| | CreditAction | -| | ClearAction | +| Blocking | Non-Blocking | +|:---------------------:|:---------------------:| +| MessageAction | FadeAction | +| ChoiceAction | ImageAction | +| WaitAction | NextAction | +| ExecuteCommandAction | CreditAction | +| | ClearAction | +| | MoveImageAction | _This project is currently in active development_ From 9986619b15a680e57888835a6ce5a51b133cdb7d Mon Sep 17 00:00:00 2001 From: JOJO <39382270+GCJOJO@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:29:25 +0200 Subject: [PATCH 07/10] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d29b9cb..419aac0 100644 --- a/README.md +++ b/README.md @@ -92,7 +92,7 @@ Here is how you define a dialogue, there are multiple actions that can be define When defining text such as message or speaker names, you may use localized keys and translate them inside of `en_us.json` or any other language files. You may display you dialogues using the following commands :
-``/dialogue set my_datapack:dialogue_1``
+``/dialogue set my_resourcepack:dialogue_1``
``/dialogue play`` __What are blocking and non-blocking actions ?__
From 25cae0e9ee47c053d8e43ac76d2962e90e23e907 Mon Sep 17 00:00:00 2001 From: JOJO <39382270+GCJOJO@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:39:24 +0200 Subject: [PATCH 08/10] Updated Dialogues --- .../client/gui/DialogueScreen.java | 24 +++++++++++--- .../dialogues/DialogueRawAction.java | 33 +++++++++++++++++++ .../assets/worldscolliding/dialogues.json | 29 +++++++++++++--- 3 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 src/main/java/fr/gcjojo/worldscolliding/dialogues/DialogueRawAction.java diff --git a/src/main/java/fr/gcjojo/worldscolliding/client/gui/DialogueScreen.java b/src/main/java/fr/gcjojo/worldscolliding/client/gui/DialogueScreen.java index 96a57ca..895cc0c 100644 --- a/src/main/java/fr/gcjojo/worldscolliding/client/gui/DialogueScreen.java +++ b/src/main/java/fr/gcjojo/worldscolliding/client/gui/DialogueScreen.java @@ -33,6 +33,8 @@ public class DialogueScreen extends Screen { private float currentFadingTime = -1.0f; private static float endFade = 7.5f; + private boolean guiVisible = true; + private List