Skip to content

Commit c69c29c

Browse files
authored
Merge pull request #2 from pixfumy/master
v1.0.2
2 parents 94f7f31 + 3a2cdb2 commit c69c29c

8 files changed

Lines changed: 87 additions & 63 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ yarn_mappings = 1.8.9+build.202201091851
88
loader_version = 0.12.12
99

1010
# Mod Properties
11-
mod_version = 1.0.1
11+
mod_version = 1.0.2
1212
maven_group = me.voidxwalker
1313
archives_base_name = anchiale
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package me.voidxwalker.anchiale;
2+
3+
import net.fabricmc.api.ClientModInitializer;
4+
import org.apache.logging.log4j.LogManager;
5+
import org.apache.logging.log4j.Logger;
6+
7+
public class Anchiale implements ClientModInitializer {
8+
public static final Logger LOGGER = LogManager.getLogger();
9+
public static boolean fastReset = false;
10+
@Override
11+
public void onInitializeClient() {
12+
13+
}
14+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package me.voidxwalker.anchiale.mixin;
2+
3+
import me.voidxwalker.anchiale.Anchiale;
4+
import net.minecraft.client.gui.screen.GameMenuScreen;
5+
import net.minecraft.client.gui.screen.Screen;
6+
import net.minecraft.client.gui.screen.TitleScreen;
7+
import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen;
8+
import net.minecraft.client.gui.widget.ButtonWidget;
9+
import net.minecraft.client.resource.language.I18n;
10+
import net.minecraft.client.world.ClientWorld;
11+
import net.minecraft.realms.RealmsBridge;
12+
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
import org.spongepowered.asm.mixin.injection.Inject;
15+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
16+
17+
@Mixin(GameMenuScreen.class)
18+
public class GameMenuScreenMixin extends Screen {
19+
@Inject(method = "init", at = @At("TAIL"))
20+
private void addMenuQuitWorldButton(CallbackInfo ci) {
21+
this.buttons.add(new ButtonWidget(1507, this.width - 200, this.height - 20, I18n.translate("menu.quitWorld")));
22+
}
23+
24+
@Inject(method = "buttonClicked", at = @At("HEAD"), cancellable = true)
25+
private void onMenuQuitWorldClicked(ButtonWidget button, CallbackInfo ci) {
26+
if (button.id == 1507) {
27+
Anchiale.fastReset = true;
28+
boolean bl = this.client.isIntegratedServerRunning();
29+
boolean bl2 = this.client.isConnectedToRealms();
30+
button.active = false;
31+
this.client.world.disconnect();
32+
this.client.connect((ClientWorld)null);
33+
Anchiale.fastReset = false;
34+
if (bl) {
35+
this.client.openScreen(new TitleScreen());
36+
} else if (bl2) {
37+
RealmsBridge realmsBridge = new RealmsBridge();
38+
realmsBridge.switchToRealms(new TitleScreen());
39+
} else {
40+
this.client.openScreen(new MultiplayerScreen(new TitleScreen()));
41+
}
42+
ci.cancel();
43+
}
44+
}
45+
}

src/main/java/me/voidxwalker/anchiale/mixin/IntegratedServerMixin.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.common.collect.Lists;
44
import com.google.common.util.concurrent.Futures;
55
import com.google.common.util.concurrent.ListenableFuture;
6+
import me.voidxwalker.anchiale.Anchiale;
67
import net.minecraft.server.MinecraftServer;
78
import net.minecraft.server.integrated.IntegratedServer;
89
import net.minecraft.server.network.ServerPlayerEntity;
@@ -28,15 +29,23 @@ public IntegratedServerMixin(Proxy proxy, File file) {
2829

2930
@Redirect(method = "stopRunning", at = @At(value = "INVOKE", target = "Lcom/google/common/util/concurrent/Futures;getUnchecked(Ljava/util/concurrent/Future;)Ljava/lang/Object;"))
3031
public V e(Future<V> e){
31-
List<ServerPlayerEntity> list = Lists.newArrayList((Iterable)this.getPlayerManager().getPlayers());
32-
Iterator iterator = list.iterator();
33-
34-
while(iterator.hasNext()) {
35-
ServerPlayerEntity serverPlayerEntity = (ServerPlayerEntity)iterator.next();
36-
this.getPlayerManager().remove(serverPlayerEntity);
32+
if (Anchiale.fastReset) {
33+
Anchiale.LOGGER.info("Exiting world without waiting for server tasks to finish.");
34+
return null;
35+
} else {
36+
Anchiale.LOGGER.info("Exiting world normally.");
37+
Futures.getUnchecked(this.execute(new Runnable() {
38+
public void run() {
39+
List<ServerPlayerEntity> list = Lists.newArrayList((Iterable)IntegratedServerMixin.this.getPlayerManager().getPlayers());
40+
Iterator iterator = list.iterator();
41+
42+
while(iterator.hasNext()) {
43+
ServerPlayerEntity serverPlayerEntity = (ServerPlayerEntity)iterator.next();
44+
IntegratedServerMixin.this.getPlayerManager().remove(serverPlayerEntity);
45+
}
46+
}
47+
}));
3748
}
3849
return null;
3950
}
40-
41-
4251
}

src/main/java/me/voidxwalker/anchiale/mixin/PlayerInstanceMixin.java

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/main/java/me/voidxwalker/anchiale/mixin/PlayerManagerMixin.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/main/resources/anchiale.mixins.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
"compatibilityLevel": "JAVA_8",
66
"mixins": [
77
"IntegratedServerMixin",
8-
"PlayerManagerMixin",
9-
"PlayerInstanceMixin"
10-
8+
"GameMenuScreenMixin"
119
],
1210
"injectors": {
1311
"defaultRequire": 1

src/main/resources/fabric.mod.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,19 @@
44
"version": "${version}",
55
"name": "Anchiale",
66
"description": "",
7+
"entrypoints": {
8+
"client": [
9+
"me.voidxwalker.anchiale.Anchiale"
10+
]
11+
},
712
"authors": [
8-
"RedLime"
13+
"RedLime?",
14+
"voidxwalker",
15+
"Gregor",
16+
"pixfumy"
917
],
1018
"license": "MIT",
1119
"environment": "*",
12-
1320
"mixins": [
1421
"anchiale.mixins.json"
1522
],

0 commit comments

Comments
 (0)