Skip to content

Commit 06da2fe

Browse files
committed
feat: integrate mapping reloads into the reload command
1 parent 3332528 commit 06da2fe

7 files changed

Lines changed: 76 additions & 0 deletions

File tree

core/src/main/java/org/geysermc/geyser/GeyserImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import org.geysermc.geyser.level.WorldManager;
8484
import org.geysermc.geyser.network.GameProtocol;
8585
import org.geysermc.geyser.network.netty.GeyserServer;
86+
import org.geysermc.geyser.pack.SkullResourcePackManager;
8687
import org.geysermc.geyser.ping.GeyserLegacyPingPassthrough;
8788
import org.geysermc.geyser.registry.BlockRegistries;
8889
import org.geysermc.geyser.registry.Registries;
@@ -305,6 +306,10 @@ private void startInstance() {
305306
if (isReloading) {
306307
// If we're reloading, the default locale in the config might have changed.
307308
GeyserLocale.finalizeDefaultLocale(this);
309+
310+
Registries.load();
311+
BlockRegistries.populate();
312+
Registries.populate();
308313
} else {
309314
CodeOfConductManager.load();
310315
}
@@ -777,6 +782,11 @@ public void reloadGeyser() {
777782
this.eventBus.fire(new GeyserPreReloadEvent(this.extensionManager, this.eventBus));
778783

779784
bootstrap.onGeyserDisable();
785+
786+
BlockRegistries.reset();
787+
Registries.reset();
788+
SkullResourcePackManager.SKULL_SKINS.clear();
789+
780790
bootstrap.onGeyserEnable();
781791

782792
isReloading = false;

core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.checkerframework.checker.nullness.qual.Nullable;
2929
import org.geysermc.geyser.registry.loader.RegistryLoader;
3030

31+
import java.util.Arrays;
3132
import java.util.function.Supplier;
3233

3334
/**
@@ -148,4 +149,9 @@ public static <I, M> ArrayRegistry<M> create(RegistryLoader<I, M[]> registryLoad
148149
public static <I, M> ArrayRegistry<M> create(I input, RegistryLoader<I, M[]> registryLoader) {
149150
return new ArrayRegistry<>(input, registryLoader);
150151
}
152+
153+
@Override
154+
public void clear() {
155+
Arrays.fill(this.mappings, null);
156+
}
151157
}

core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,21 @@ public static void populate() {
148148
BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK);
149149
BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT);
150150
}
151+
152+
public static void reset() {
153+
BLOCKS.clear();
154+
JAVA_BLOCK_STATE_IDENTIFIER_TO_ID.clear();
155+
NON_VANILLA_BLOCK_IDS.clear();
156+
WATERLOGGED.clear();
157+
INTERACTIVE.clear();
158+
INTERACTIVE_MAY_BUILD.clear();
159+
CUSTOM_BLOCKS.clear();
160+
CUSTOM_BLOCK_STATE_OVERRIDES.clear();
161+
NON_VANILLA_BLOCK_STATE_OVERRIDES.clear();
162+
CUSTOM_BLOCK_ITEM_OVERRIDES.clear();
163+
EXTENDED_COLLISION_BOXES.clear();
164+
CUSTOM_SKULLS.clear();
165+
166+
COLLISIONS.clear();
167+
}
151168
}

core/src/main/java/org/geysermc/geyser/registry/DeferredRegistry.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,14 @@ public boolean loaded() {
123123
return this.loaded;
124124
}
125125

126+
@Override
127+
public void clear() {
128+
if (!this.loaded) {
129+
return;
130+
}
131+
this.backingRegistry.clear();
132+
}
133+
126134
/**
127135
* A registry initializer.
128136
*

core/src/main/java/org/geysermc/geyser/registry/IRegistry.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,12 @@ interface IRegistry<M> {
5757
* @param consumer the consumer
5858
*/
5959
void register(Consumer<M> consumer);
60+
61+
/**
62+
* Clears The Underlying Mappings.
63+
* Throws {@link UnsupportedOperationException} When The Registry Doesn't Support It.
64+
*/
65+
default void clear() {
66+
throw new UnsupportedOperationException("Registry does not support clear.");
67+
}
6068
}

core/src/main/java/org/geysermc/geyser/registry/Registries.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,14 @@ public static void load() {
239239
DANGEROUS_ENTITIES.load();
240240
}
241241

242+
public static void reset() {
243+
loaded = false;
244+
245+
ITEMS.clear();
246+
TAGS.clear();
247+
POTION_MIXES.clear();
248+
}
249+
242250
public static void populate() {
243251
PacketRegistryPopulator.populate();
244252
DataComponentRegistryPopulator.populate();

core/src/main/java/org/geysermc/geyser/registry/Registry.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525

2626
package org.geysermc.geyser.registry;
2727

28+
import java.util.BitSet;
29+
import java.util.Collection;
30+
import java.util.Map;
2831
import java.util.function.Consumer;
2932
import org.geysermc.geyser.registry.loader.RegistryLoader;
3033

@@ -110,4 +113,20 @@ public void set(M mappings) {
110113
public void register(Consumer<M> consumer) {
111114
consumer.accept(this.mappings);
112115
}
116+
117+
/**
118+
* Clears The Mappings.
119+
*/
120+
@Override
121+
public void clear() {
122+
if (this.mappings instanceof Collection) {
123+
((Collection<?>) this.mappings).clear();
124+
} else if (this.mappings instanceof Map) {
125+
((Map<?, ?>) this.mappings).clear();
126+
} else if (this.mappings instanceof BitSet) {
127+
((BitSet) this.mappings).clear();
128+
} else {
129+
throw new UnsupportedOperationException("Cannot clear registry of type " + (this.mappings == null ? "null" : this.mappings.getClass().getName()));
130+
}
131+
}
113132
}

0 commit comments

Comments
 (0)