Skip to content

Commit 44c7ff2

Browse files
committed
Updated Loot Table Export (Added Enchantments), World Border Saved Per Server
1 parent ab86ccf commit 44c7ff2

File tree

4 files changed

+85
-2
lines changed

4 files changed

+85
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ You can also override per dimension:
2929
- ```/sm:config WorldBorderNether set 8000```
3030
- ```/sm:config WorldBorderEnd set 8000```
3131

32-
Per-dimension values take priority when set; use 0 to fall back to the global border.
32+
Per-dimension values take priority when set; use 0 to fall back to the global border. Border values are saved per server.
3333

3434
### Datapack Structures Import
3535
Import a datapack URL so its custom structures appear on the SeedMap. Datapack structures render as solid colored squares (one color per structure) and show up in the datapack toggle list so you can enable/disable them like vanilla features. You can also right‑click a datapack structure and mark it complete/incomplete (a green tick is drawn on the icon).

src/main/java/dev/xpple/seedmapper/config/Configs.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,18 @@ private static Component displaySavedSeeds() {
8080
@Config
8181
public static Map<String, String> DatapackSavedCachePaths = new HashMap<>();
8282

83+
@Config
84+
public static Map<String, Integer> WorldBorderSaved = new HashMap<>();
85+
86+
@Config
87+
public static Map<String, Integer> WorldBorderOverworldSaved = new HashMap<>();
88+
89+
@Config
90+
public static Map<String, Integer> WorldBorderNetherSaved = new HashMap<>();
91+
92+
@Config
93+
public static Map<String, Integer> WorldBorderEndSaved = new HashMap<>();
94+
8395
@Config(setter = @Config.Setter("setDatapackColorScheme"))
8496
public static int DatapackColorScheme = 1;
8597

@@ -180,6 +192,21 @@ public static void loadSavedSeedForCurrentServer() {
180192
}
181193
}
182194

195+
public static void loadWorldBorderForCurrentServer() {
196+
String key = getCurrentServerKey();
197+
if (key == null) {
198+
WorldBorder = 0;
199+
WorldBorderOverworld = 0;
200+
WorldBorderNether = 0;
201+
WorldBorderEnd = 0;
202+
return;
203+
}
204+
WorldBorder = Math.max(0, WorldBorderSaved.getOrDefault(key, 0));
205+
WorldBorderOverworld = Math.max(0, WorldBorderOverworldSaved.getOrDefault(key, 0));
206+
WorldBorderNether = Math.max(0, WorldBorderNetherSaved.getOrDefault(key, 0));
207+
WorldBorderEnd = Math.max(0, WorldBorderEndSaved.getOrDefault(key, 0));
208+
}
209+
183210
@Config
184211
public static SeedResolutionArgument.SeedResolution SeedResolutionOrder = new SeedResolutionArgument.SeedResolution();
185212

@@ -222,6 +249,13 @@ private static Component getWorldBorderComment() {
222249

223250
private static void setWorldBorder(int worldBorder) {
224251
WorldBorder = Math.max(0, worldBorder);
252+
storeWorldBorderForCurrentServer(WorldBorderSaved, WorldBorder);
253+
WorldBorderOverworld = 0;
254+
WorldBorderNether = 0;
255+
WorldBorderEnd = 0;
256+
storeWorldBorderForCurrentServer(WorldBorderOverworldSaved, WorldBorderOverworld);
257+
storeWorldBorderForCurrentServer(WorldBorderNetherSaved, WorldBorderNether);
258+
storeWorldBorderForCurrentServer(WorldBorderEndSaved, WorldBorderEnd);
225259
}
226260

227261
@Config(comment = "getWorldBorderOverworldComment", setter = @Config.Setter("setWorldBorderOverworld"))
@@ -233,6 +267,7 @@ private static Component getWorldBorderOverworldComment() {
233267

234268
private static void setWorldBorderOverworld(int worldBorder) {
235269
WorldBorderOverworld = Math.max(0, worldBorder);
270+
storeWorldBorderForCurrentServer(WorldBorderOverworldSaved, WorldBorderOverworld);
236271
}
237272

238273
@Config(comment = "getWorldBorderNetherComment", setter = @Config.Setter("setWorldBorderNether"))
@@ -244,6 +279,7 @@ private static Component getWorldBorderNetherComment() {
244279

245280
private static void setWorldBorderNether(int worldBorder) {
246281
WorldBorderNether = Math.max(0, worldBorder);
282+
storeWorldBorderForCurrentServer(WorldBorderNetherSaved, WorldBorderNether);
247283
}
248284

249285
@Config(comment = "getWorldBorderEndComment", setter = @Config.Setter("setWorldBorderEnd"))
@@ -255,6 +291,19 @@ private static Component getWorldBorderEndComment() {
255291

256292
private static void setWorldBorderEnd(int worldBorder) {
257293
WorldBorderEnd = Math.max(0, worldBorder);
294+
storeWorldBorderForCurrentServer(WorldBorderEndSaved, WorldBorderEnd);
295+
}
296+
297+
private static void storeWorldBorderForCurrentServer(Map<String, Integer> map, int worldBorder) {
298+
String key = getCurrentServerKey();
299+
if (key == null) {
300+
return;
301+
}
302+
if (worldBorder <= 0) {
303+
map.remove(key);
304+
} else {
305+
map.put(key, worldBorder);
306+
}
258307
}
259308

260309
public static int getWorldBorderForDimension(int dimension) {

src/main/java/dev/xpple/seedmapper/mixin/ClientPacketListenerMixin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ private void onHandleLogin(ClientboundLoginPacket packet, CallbackInfo ci) {
2424
@Inject(method = "handleLogin", at = @At("TAIL"))
2525
private void seedmapper$applySavedSeed(ClientboundLoginPacket packet, CallbackInfo ci) {
2626
Configs.loadSavedSeedForCurrentServer();
27+
Configs.loadWorldBorderForCurrentServer();
2728
if (Configs.DatapackAutoload) {
2829
String url = Configs.getSavedDatapackUrlForCurrentServer();
2930
if (url != null && !url.isBlank()) {

src/main/java/dev/xpple/seedmapper/util/LootExportHelper.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.xpple.seedmapper.util;
22

33
import com.github.cubiomes.Cubiomes;
4+
import com.github.cubiomes.EnchantInstance;
45
import com.github.cubiomes.ItemStack;
56
import com.github.cubiomes.LootTableContext;
67
import com.github.cubiomes.Piece;
@@ -11,11 +12,13 @@
1112
import com.google.gson.GsonBuilder;
1213
import com.google.gson.JsonArray;
1314
import com.google.gson.JsonObject;
15+
import dev.xpple.seedmapper.command.arguments.ItemAndEnchantmentsPredicateArgument;
1416
import dev.xpple.seedmapper.feature.StructureChecks;
1517
import net.minecraft.SharedConstants;
1618
import net.minecraft.client.Minecraft;
1719
import net.minecraft.core.BlockPos;
1820
import net.minecraft.core.QuartPos;
21+
import net.minecraft.world.item.Item;
1922

2023
import java.io.IOException;
2124
import java.lang.foreign.Arena;
@@ -95,9 +98,39 @@ public static Result exportLoot(Minecraft minecraft, MemorySegment biomeGenerato
9598
for (int lootIdx = 0; lootIdx < lootCount; lootIdx++) {
9699
MemorySegment itemStack = ItemStack.asSlice(LootTableContext.generated_items(lootTableContext), lootIdx);
97100
int itemId = Cubiomes.get_global_item_id(lootTableContext, ItemStack.item(itemStack));
101+
String itemName = Cubiomes.global_id2item_name(itemId, version).getString(0);
98102
JsonObject itemObj = new JsonObject();
99-
itemObj.addProperty("id", Cubiomes.global_id2item_name(itemId, version).getString(0));
103+
itemObj.addProperty("slot", lootIdx);
100104
itemObj.addProperty("count", ItemStack.count(itemStack));
105+
itemObj.addProperty("itemId", itemName);
106+
itemObj.addProperty("id", itemName);
107+
108+
Item mcItem = ItemAndEnchantmentsPredicateArgument.ITEM_ID_TO_MC.get(itemId);
109+
if (mcItem != null) {
110+
net.minecraft.world.item.ItemStack mcStack = new net.minecraft.world.item.ItemStack(mcItem, ItemStack.count(itemStack));
111+
itemObj.addProperty("displayName", mcStack.getHoverName().getString());
112+
itemObj.addProperty("nbt", mcStack.toString());
113+
} else {
114+
itemObj.addProperty("displayName", itemName);
115+
itemObj.addProperty("nbt", itemName);
116+
}
117+
118+
JsonArray enchantments = new JsonArray();
119+
JsonArray enchantmentLevels = new JsonArray();
120+
MemorySegment enchantmentsInternal = ItemStack.enchantments(itemStack);
121+
int enchantmentCount = ItemStack.enchantment_count(itemStack);
122+
for (int enchantmentIdx = 0; enchantmentIdx < enchantmentCount; enchantmentIdx++) {
123+
MemorySegment enchantInstance = EnchantInstance.asSlice(enchantmentsInternal, enchantmentIdx);
124+
int itemEnchantment = EnchantInstance.enchantment(enchantInstance);
125+
String enchantmentName = Cubiomes.get_enchantment_name(itemEnchantment).getString(0);
126+
if (enchantmentName == null || enchantmentName.isBlank()) {
127+
enchantmentName = "unknown:" + itemEnchantment;
128+
}
129+
enchantments.add(enchantmentName);
130+
enchantmentLevels.add(EnchantInstance.level(enchantInstance));
131+
}
132+
itemObj.add("enchantments", enchantments);
133+
itemObj.add("enchantmentLevels", enchantmentLevels);
101134
items.add(itemObj);
102135
}
103136

0 commit comments

Comments
 (0)