Skip to content

Commit 23fcab9

Browse files
committed
Complete adding forge 1.17.1
1 parent ae00af5 commit 23fcab9

File tree

8 files changed

+87
-77
lines changed

8 files changed

+87
-77
lines changed

BlueMapCore/src/main/java/de/bluecolored/bluemap/core/BlueMap.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.spongepowered.configurate.gson.GsonConfigurationLoader;
3131

3232
import java.io.IOException;
33+
import java.util.UUID;
3334
import java.util.concurrent.ForkJoinPool;
3435

3536
public class BlueMap {

BlueMapCore/src/main/java/de/bluecolored/bluemap/core/MinecraftVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class MinecraftVersion implements Comparable<MinecraftVersion> {
3838

3939
private static final Pattern VERSION_REGEX = Pattern.compile("(?:(?<major>\\d+)\\.(?<minor>\\d+))(?:\\.(?<patch>\\d+))?(?:\\-(?:pre|rc)\\d+)?");
4040

41-
public static final MinecraftVersion LATEST_SUPPORTED = new MinecraftVersion(1, 17, 0);
41+
public static final MinecraftVersion LATEST_SUPPORTED = new MinecraftVersion(1, 18, 0);
4242
public static final MinecraftVersion EARLIEST_SUPPORTED = new MinecraftVersion(1, 13);
4343

4444
private final int major, minor, patch;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

implementations/forge-1.17.1/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ buildscript {
1010

1111
apply plugin: 'net.minecraftforge.gradle'
1212

13+
targetCompatibility = 1.16
14+
1315
minecraft {
1416
mappings channel: 'official', version: '1.17.1'
1517
}
@@ -33,7 +35,7 @@ dependencies {
3335

3436
build.dependsOn shadowJar {
3537
destinationDirectory = file '../../build/release'
36-
archiveFileName.set("BlueMap-${archiveVersion.get()}-forge-1.16.4.jar")
38+
archiveFileName.set("BlueMap-${archiveVersion.get()}-forge-1.17.1.jar")
3739

3840
configurations = [project.configurations.include]
3941

implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgeCommandSource.java

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,57 +24,55 @@
2424
*/
2525
package de.bluecolored.bluemap.forge;
2626

27-
import java.io.IOException;
28-
import java.util.Optional;
29-
3027
import com.flowpowered.math.vector.Vector3d;
31-
3228
import de.bluecolored.bluemap.common.plugin.Plugin;
3329
import de.bluecolored.bluemap.common.plugin.serverinterface.CommandSource;
3430
import de.bluecolored.bluemap.common.plugin.text.Text;
3531
import de.bluecolored.bluemap.core.world.World;
36-
import net.minecraft.util.text.ITextComponent;
37-
import net.minecraft.world.server.ServerWorld;
32+
import net.minecraft.commands.CommandSourceStack;
33+
import net.minecraft.network.chat.Component;
34+
import net.minecraft.network.chat.TextComponent;
35+
import net.minecraft.server.level.ServerLevel;
36+
import net.minecraft.world.phys.Vec3;
37+
38+
import java.io.IOException;
39+
import java.util.Optional;
3840

3941
public class ForgeCommandSource implements CommandSource {
4042

4143
private ForgeMod mod;
4244
private Plugin plugin;
43-
private net.minecraft.command.CommandSource delegate;
45+
private CommandSourceStack delegate;
4446

45-
public ForgeCommandSource(ForgeMod mod, Plugin plugin, net.minecraft.command.CommandSource delegate) {
47+
public ForgeCommandSource(ForgeMod mod, Plugin plugin, CommandSourceStack delegate) {
4648
this.mod = mod;
4749
this.plugin = plugin;
4850
this.delegate = delegate;
4951
}
5052

5153
@Override
5254
public void sendMessage(Text text) {
53-
delegate.sendFeedback(ITextComponent.Serializer.func_240643_a_(text.toJSONString()), false);
55+
Component component = TextComponent.Serializer.fromJsonLenient(text.toJSONString());
56+
if (component == null) component = new TextComponent(text.toPlainString());
57+
delegate.sendSuccess(component, false);
5458
}
5559

5660
@Override
5761
public boolean hasPermission(String permission) {
58-
return delegate.hasPermissionLevel(1);
62+
return delegate.hasPermission(1);
5963
}
6064

6165
@Override
6266
public Optional<Vector3d> getPosition() {
63-
net.minecraft.util.math.vector.Vector3d pos = delegate.getPos();
64-
if (pos != null) {
65-
return Optional.of(new Vector3d(pos.x, pos.y, pos.z));
66-
}
67-
68-
return Optional.empty();
67+
Vec3 pos = delegate.getPosition();
68+
return Optional.of(new Vector3d(pos.x, pos.y, pos.z));
6969
}
7070

7171
@Override
7272
public Optional<World> getWorld() {
7373
try {
74-
ServerWorld world = delegate.getWorld();
75-
if (world != null) {
76-
return Optional.ofNullable(plugin.getWorld(mod.getUUIDForWorld(world)));
77-
}
74+
ServerLevel world = delegate.getLevel();
75+
return Optional.ofNullable(plugin.getWorld(mod.getUUIDForWorld(world)));
7876
} catch (IOException ignore) {}
7977

8078
return Optional.empty();

implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgeEventForwarder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ public synchronized void removeAllListeners() {
5454

5555
@SubscribeEvent
5656
public synchronized void onPlayerJoin(PlayerLoggedInEvent evt) {
57-
UUID uuid = evt.getPlayer().getUniqueID();
57+
UUID uuid = evt.getPlayer().getUUID();
5858
for (ServerEventListener listener : eventListeners) listener.onPlayerJoin(uuid);
5959
}
6060

6161
@SubscribeEvent
6262
public synchronized void onPlayerLeave(PlayerLoggedOutEvent evt) {
63-
UUID uuid = evt.getPlayer().getUniqueID();
63+
UUID uuid = evt.getPlayer().getUUID();
6464
for (ServerEventListener listener : eventListeners) listener.onPlayerLeave(uuid);
6565
}
6666

implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgeMod.java

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -35,25 +35,24 @@
3535
import de.bluecolored.bluemap.core.MinecraftVersion;
3636
import de.bluecolored.bluemap.core.logger.Logger;
3737
import de.bluecolored.bluemap.core.resourcepack.ParseResourceException;
38-
import net.minecraft.entity.player.PlayerEntity;
39-
import net.minecraft.entity.player.ServerPlayerEntity;
38+
import net.minecraft.client.Minecraft;
4039
import net.minecraft.server.MinecraftServer;
41-
import net.minecraft.world.DimensionType;
42-
import net.minecraft.world.server.ServerWorld;
43-
import net.minecraft.world.storage.FolderName;
40+
import net.minecraft.server.level.ServerLevel;
41+
import net.minecraft.server.level.ServerPlayer;
42+
import net.minecraft.world.level.dimension.DimensionType;
43+
import net.minecraft.world.level.storage.LevelResource;
4444
import net.minecraftforge.common.MinecraftForge;
4545
import net.minecraftforge.event.TickEvent.ServerTickEvent;
4646
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent;
4747
import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedOutEvent;
4848
import net.minecraftforge.eventbus.api.SubscribeEvent;
49-
import net.minecraftforge.fml.ExtensionPoint;
49+
import net.minecraftforge.fml.IExtensionPoint;
5050
import net.minecraftforge.fml.ModLoadingContext;
5151
import net.minecraftforge.fml.common.Mod;
52-
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
53-
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
54-
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
55-
import net.minecraftforge.fml.network.FMLNetworkConstants;
56-
import org.apache.commons.lang3.tuple.Pair;
52+
import net.minecraftforge.fmllegacy.network.FMLNetworkConstants;
53+
import net.minecraftforge.fmlserverevents.FMLServerStartedEvent;
54+
import net.minecraftforge.fmlserverevents.FMLServerStartingEvent;
55+
import net.minecraftforge.fmlserverevents.FMLServerStoppingEvent;
5756
import org.apache.logging.log4j.LogManager;
5857

5958
import java.io.File;
@@ -66,25 +65,34 @@
6665
@Mod(Plugin.PLUGIN_ID)
6766
public class ForgeMod implements ServerInterface {
6867

69-
private Plugin pluginInstance = null;
68+
private final Plugin pluginInstance;
7069
private MinecraftServer serverInstance = null;
7170

72-
private Map<File, UUID> worldUUIDs;
73-
private ForgeEventForwarder eventForwarder;
71+
private final Map<File, UUID> worldUUIDs;
72+
private final ForgeEventForwarder eventForwarder;
7473

75-
private LoadingCache<ServerWorld, UUID> worldUuidCache;
74+
private final LoadingCache<ServerLevel, UUID> worldUuidCache;
7675

7776
private int playerUpdateIndex = 0;
78-
private Map<UUID, Player> onlinePlayerMap;
79-
private List<ForgePlayer> onlinePlayerList;
77+
private final Map<UUID, Player> onlinePlayerMap;
78+
private final List<ForgePlayer> onlinePlayerList;
8079

8180
public ForgeMod() {
8281
Logger.global = new Log4jLogger(LogManager.getLogger(Plugin.PLUGIN_NAME));
8382

8483
this.onlinePlayerMap = new ConcurrentHashMap<>();
8584
this.onlinePlayerList = Collections.synchronizedList(new ArrayList<>());
8685

87-
this.pluginInstance = new Plugin(new MinecraftVersion(1, 16, 2), "forge-1.16.2", this);
86+
String versionString = net.minecraft.DetectedVersion.tryDetectVersion().getId();
87+
MinecraftVersion mcVersion;
88+
try {
89+
mcVersion = MinecraftVersion.of(versionString);
90+
} catch (IllegalArgumentException ex) {
91+
mcVersion = new MinecraftVersion(1, 17, 1);
92+
Logger.global.logWarning("Failed to derive version from version-string '" + versionString +
93+
"', falling back to version: " + mcVersion.getVersionString());
94+
}
95+
this.pluginInstance = new Plugin(mcVersion, "forge-1.16.2", this);
8896

8997
this.worldUUIDs = new ConcurrentHashMap<>();
9098
this.eventForwarder = new ForgeEventForwarder();
@@ -97,21 +105,21 @@ public ForgeMod() {
97105
MinecraftForge.EVENT_BUS.register(this);
98106

99107
//Make sure the mod being absent on the other network side does not cause the client to display the server as incompatible
100-
ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.DISPLAYTEST, () -> Pair.of(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true));
108+
ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true));
101109
}
102110

103111
@SubscribeEvent
104112
public void onServerStarting(FMLServerStartingEvent event) {
105113
this.serverInstance = event.getServer();
106114

107115
//register commands
108-
new Commands<>(pluginInstance, event.getServer().getCommandManager().getDispatcher(), forgeSource -> new ForgeCommandSource(this, pluginInstance, forgeSource));
116+
new Commands<>(pluginInstance, event.getServer().getCommands().getDispatcher(), forgeSource -> new ForgeCommandSource(this, pluginInstance, forgeSource));
109117
}
110118

111119
@SubscribeEvent
112120
public void onServerStarted(FMLServerStartedEvent event) {
113121
//save worlds to generate level.dat files
114-
serverInstance.save(false, true, true);
122+
serverInstance.saveAllChunks(false, true, true);
115123

116124
new Thread(() -> {
117125
Logger.global.logInfo("Loading...");
@@ -160,15 +168,15 @@ public UUID getUUIDForWorld(File worldFolder) throws IOException {
160168
return uuid;
161169
}
162170

163-
public UUID getUUIDForWorld(ServerWorld world) throws IOException {
171+
public UUID getUUIDForWorld(ServerLevel world) throws IOException {
164172
try {
165173
return worldUuidCache.get(world);
166174
} catch (RuntimeException e) {
167175
throw new IOException(e);
168176
}
169177
}
170178

171-
private UUID loadUUIDForWorld(ServerWorld world) throws IOException {
179+
private UUID loadUUIDForWorld(ServerLevel world) throws IOException {
172180
File key = getFolderForWorld(world);
173181

174182
UUID uuid = worldUUIDs.get(key);
@@ -180,10 +188,10 @@ private UUID loadUUIDForWorld(ServerWorld world) throws IOException {
180188
return uuid;
181189
}
182190

183-
private File getFolderForWorld(ServerWorld world) throws IOException {
191+
private File getFolderForWorld(ServerLevel world) throws IOException {
184192
MinecraftServer server = world.getServer();
185-
File worldFolder = world.getServer().getDataDirectory().toPath().resolve(server.func_240776_a_(FolderName.field_237253_i_)).toFile();
186-
File dimensionFolder = DimensionType.func_236031_a_(world.func_234923_W_(), worldFolder);
193+
File worldFolder = world.getServer().getServerDirectory().toPath().resolve(server.getWorldPath(LevelResource.ROOT)).toFile();
194+
File dimensionFolder = DimensionType.getStorageFolder(world.dimension(), worldFolder);
187195
return dimensionFolder.getCanonicalFile();
188196
}
189197

@@ -193,7 +201,7 @@ public boolean persistWorldChanges(UUID worldUUID) throws IOException, IllegalAr
193201

194202
serverInstance.execute(() -> {
195203
try {
196-
for (ServerWorld world : serverInstance.getWorlds()) {
204+
for (ServerLevel world : serverInstance.getAllLevels()) {
197205
if (getUUIDForWorld(world).equals(worldUUID)) {
198206
world.save(null, true, false);
199207
}
@@ -225,20 +233,20 @@ public File getConfigFolder() {
225233

226234
@SubscribeEvent
227235
public void onPlayerJoin(PlayerLoggedInEvent evt) {
228-
PlayerEntity playerInstance = evt.getPlayer();
229-
if (!(playerInstance instanceof ServerPlayerEntity)) return;
236+
net.minecraft.world.entity.player.Player playerInstance = evt.getPlayer();
237+
if (!(playerInstance instanceof ServerPlayer)) return;
230238

231-
ForgePlayer player = new ForgePlayer(this, playerInstance.getUniqueID());
239+
ForgePlayer player = new ForgePlayer(this, playerInstance.getUUID());
232240
onlinePlayerMap.put(player.getUuid(), player);
233241
onlinePlayerList.add(player);
234242
}
235243

236244
@SubscribeEvent
237245
public void onPlayerLeave(PlayerLoggedOutEvent evt) {
238-
PlayerEntity player = evt.getPlayer();
239-
if (!(player instanceof ServerPlayerEntity)) return;
246+
net.minecraft.world.entity.player.Player player = evt.getPlayer();
247+
if (!(player instanceof ServerPlayer)) return;
240248

241-
UUID playerUUID = player.getUniqueID();
249+
UUID playerUUID = player.getUUID();
242250
onlinePlayerMap.remove(playerUUID);
243251
synchronized (onlinePlayerList) {
244252
onlinePlayerList.removeIf(p -> p.getUuid().equals(playerUUID));

implementations/forge-1.17.1/src/main/java/de/bluecolored/bluemap/forge/ForgePlayer.java

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,23 @@
2424
*/
2525
package de.bluecolored.bluemap.forge;
2626

27-
import java.io.IOException;
28-
import java.util.EnumMap;
29-
import java.util.Map;
30-
import java.util.UUID;
31-
3227
import com.flowpowered.math.vector.Vector3d;
33-
3428
import de.bluecolored.bluemap.common.plugin.serverinterface.Gamemode;
3529
import de.bluecolored.bluemap.common.plugin.serverinterface.Player;
3630
import de.bluecolored.bluemap.common.plugin.text.Text;
37-
import net.minecraft.entity.player.ServerPlayerEntity;
38-
import net.minecraft.potion.EffectInstance;
39-
import net.minecraft.potion.Effects;
31+
import net.minecraft.client.renderer.EffectInstance;
4032
import net.minecraft.server.MinecraftServer;
41-
import net.minecraft.world.GameType;
33+
import net.minecraft.server.level.ServerLevel;
34+
import net.minecraft.server.level.ServerPlayer;
35+
import net.minecraft.world.effect.MobEffectInstance;
36+
import net.minecraft.world.effect.MobEffects;
37+
import net.minecraft.world.level.GameType;
38+
import net.minecraft.world.phys.Vec3;
39+
40+
import java.io.IOException;
41+
import java.util.EnumMap;
42+
import java.util.Map;
43+
import java.util.UUID;
4244

4345
public class ForgePlayer implements Player {
4446

@@ -50,7 +52,6 @@ public class ForgePlayer implements Player {
5052
GAMEMODE_MAP.put(GameType.SURVIVAL, Gamemode.SURVIVAL);
5153
GAMEMODE_MAP.put(GameType.CREATIVE, Gamemode.CREATIVE);
5254
GAMEMODE_MAP.put(GameType.SPECTATOR, Gamemode.SPECTATOR);
53-
GAMEMODE_MAP.put(GameType.NOT_SET, Gamemode.SURVIVAL);
5455
}
5556

5657
private UUID uuid;
@@ -121,28 +122,28 @@ public void update() {
121122
return;
122123
}
123124

124-
ServerPlayerEntity player = server.getPlayerList().getPlayerByUUID(uuid);
125+
ServerPlayer player = server.getPlayerList().getPlayer(uuid);
125126
if (player == null) {
126127
this.online = false;
127128
return;
128129
}
129130

130-
this.gamemode = GAMEMODE_MAP.get(player.interactionManager.getGameType());
131+
this.gamemode = GAMEMODE_MAP.getOrDefault(player.gameMode.getGameModeForPlayer(), Gamemode.SURVIVAL);
131132
if (this.gamemode == null) this.gamemode = Gamemode.SURVIVAL;
132133

133-
EffectInstance invis = player.getActivePotionEffect(Effects.INVISIBILITY);
134+
MobEffectInstance invis = player.getEffect(MobEffects.INVISIBILITY);
134135
this.invisible = invis != null && invis.getDuration() > 0;
135136

136137
this.name = Text.of(player.getName().getString());
137138
this.online = true;
138139

139-
net.minecraft.util.math.vector.Vector3d pos = player.getPositionVec();
140-
this.position = new Vector3d(pos.getX(), pos.getY(), pos.getZ());
141-
this.sneaking = player.isSneaking();
140+
Vec3 pos = player.getPosition(1f);
141+
this.position = new Vector3d(pos.x(), pos.y(), pos.z());
142+
this.sneaking = player.isCrouching();
142143

143144
try {
144-
this.world = mod.getUUIDForWorld(player.getServerWorld());
145-
} catch (IOException e) {
145+
this.world = mod.getUUIDForWorld((ServerLevel) player.getCommandSenderWorld());
146+
} catch (IOException | ClassCastException e) {
146147
this.world = UNKNOWN_WORLD_UUID;
147148
}
148149
}

0 commit comments

Comments
 (0)