Skip to content

Commit b95f9c5

Browse files
committed
Minecraft 1.17.1 backport
1 parent 6996839 commit b95f9c5

File tree

37 files changed

+487
-108
lines changed

37 files changed

+487
-108
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@ subprojects {
5252
withSourcesJar()
5353

5454
toolchain {
55-
languageVersion = JavaLanguageVersion.of(21)
55+
languageVersion = JavaLanguageVersion.of(17)
5656
}
5757
}
5858

5959
tasks.withType(JavaCompile).configureEach {
6060
it.options.encoding = "UTF-8"
6161

6262
javaCompiler = javaToolchains.compilerFor {
63-
languageVersion = JavaLanguageVersion.of(21)
63+
languageVersion = JavaLanguageVersion.of(17)
6464
}
6565
}
6666
}

gradle.properties

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@ mod_version = 3.4.3
77
maven_group = juliand665
88
archives_base_name = dynamic-fps
99

10-
enabled_platforms=fabric
11-
# enabled_platforms=fabric,forge,neoforge,quilt
10+
enabled_platforms=fabric,forge

gradle/libs.versions.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
[versions]
2-
minecraft = "1.20.5-rc2"
2+
minecraft = "1.17.1"
33

44
# Platform libraries
55

66
fabric_loader = "0.15.10"
7-
fabric_api = "0.97.4+1.20.5"
7+
fabric_api = "0.46.1+1.17"
88

9-
forge = "1.20.4-49.0.30"
9+
forge = "1.17.1-37.1.1"
1010

1111
neoforge = "20.4.160-beta"
1212

1313
quilt_loader = "0.25.0"
14-
quilt_standard_libraries = "8.0.0-alpha.12+1.20.4"
14+
quilt_standard_libraries = "1.1.0-beta.26+1.18.2"
1515

1616
# Third-party libraries
1717

18-
modmenu = "10.0.0-alpha.3"
19-
cloth_config = "14.0.125"
18+
modmenu = "2.0.17"
19+
cloth_config = "5.3.63"
2020

2121
mixinextras = "0.3.5"
2222

platforms/common/src/main/java/dynamic_fps/impl/DynamicFPSMod.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
import dynamic_fps.impl.config.DynamicFPSConfig;
66
import dynamic_fps.impl.service.ModCompat;
77
import dynamic_fps.impl.util.Logging;
8+
import dynamic_fps.impl.util.ModCompatHelper;
89
import dynamic_fps.impl.util.OptionsHolder;
10+
import dynamic_fps.impl.util.duck.DuckScreen;
911
import dynamic_fps.impl.util.duck.DuckLoadingOverlay;
1012
import dynamic_fps.impl.util.duck.DuckSoundEngine;
1113
import dynamic_fps.impl.util.event.InputObserver;
@@ -51,6 +53,8 @@ public class DynamicFPSMod {
5153
// Internal "API" for Dynamic FPS itself
5254

5355
public static void init() {
56+
ModCompatHelper.init();
57+
5458
Platform platform = Platform.getInstance();
5559
String version = platform.getModVersion(Constants.MOD_ID).orElseThrow();
5660

@@ -159,11 +163,15 @@ public static boolean shouldShowToasts() {
159163
}
160164

161165
public static boolean shouldShowLevels() {
162-
return isDisabled() || !isLevelCoveredByOverlay();
166+
return isDisabled() || !(isLevelCoveredByScreen() || isLevelCoveredByOverlay());
163167
}
164168

165169
// Internal logic
166170

171+
private static boolean isLevelCoveredByScreen() {
172+
return minecraft.screen != null && ((DuckScreen) minecraft.screen).dynamic_fps$rendersBackground();
173+
}
174+
167175
private static boolean isIdle() {
168176
long idleTime = modConfig.idleTime();
169177

platforms/common/src/main/java/dynamic_fps/impl/compat/ClothConfig.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
1010
import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
1111
import net.minecraft.ChatFormatting;
1212
import net.minecraft.client.gui.screens.Screen;
13-
import net.minecraft.network.chat.CommonComponents;
1413
import net.minecraft.network.chat.Component;
14+
import net.minecraft.network.chat.TextComponent;
15+
import net.minecraft.network.chat.TranslatableComponent;
1516
import net.minecraft.sounds.SoundSource;
1617

1718
import java.util.Locale;
@@ -43,7 +44,7 @@ public static Screen genConfigScreen(Screen parent) {
4344
);
4445

4546
general.addEntry(
46-
entryBuilder.startTextDescription(CommonComponents.SPACE).build()
47+
entryBuilder.startTextDescription(new TextComponent(" ")).build()
4748
);
4849

4950
general.addEntry(
@@ -101,7 +102,7 @@ public static Screen genConfigScreen(Screen parent) {
101102

102103
volumes.add(
103104
entryBuilder.startIntSlider(
104-
Component.translatable("soundCategory." + name),
105+
new TranslatableComponent("soundCategory." + name),
105106
(int) (config.rawVolumeMultiplier(source) * 100),
106107
0, 100
107108
)
@@ -123,7 +124,7 @@ public static Screen genConfigScreen(Screen parent) {
123124
.setDefaultValue(standard.graphicsState())
124125
.setSaveConsumer(config::setGraphicsState)
125126
.setEnumNameProvider(ClothConfig::graphicsStateMessage)
126-
.setTooltipSupplier(ClothConfig::graphicsStateTooltip)
127+
.setTooltipSupplier((selected) -> ClothConfig.graphicsStateTooltip((GraphicsState) selected)) // what
127128
.build()
128129
);
129130

@@ -173,14 +174,14 @@ private static int fromConfigFpsTarget(int value) {
173174

174175
private static Component fpsTargetMessage(int value) {
175176
if (toConfigFpsTarget(value) != -1) {
176-
return Component.translatable("options.framerate", value);
177+
return new TranslatableComponent("options.framerate", value);
177178
} else {
178-
return Component.translatable("options.framerateLimit.max");
179+
return new TranslatableComponent("options.framerateLimit.max");
179180
}
180181
}
181182

182183
private static Component volumeMultiplierMessage(int value) {
183-
return Component.literal(Integer.toString(value) + "%");
184+
return new TranslatableComponent(Integer.toString(value) + "%");
184185
}
185186

186187
private static Component graphicsStateMessage(Enum<GraphicsState> graphicsState) {

platforms/common/src/main/java/dynamic_fps/impl/mixin/MinecraftMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private void getFramerateLimit(CallbackInfoReturnable<Integer> callbackInfo) {
4848
callbackInfo.setReturnValue(limit);
4949
}
5050
} else if (DynamicFPSMod.uncapMenuFrameRate()) {
51-
if (this.options.enableVsync().get()) {
51+
if (this.options.enableVsync) {
5252
// VSync will regulate to a non-infinite value
5353
callbackInfo.setReturnValue(NO_FRAME_RATE_LIMIT);
5454
} else {
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package dynamic_fps.impl.mixin;
2+
3+
import dynamic_fps.impl.service.ModCompat;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.Unique;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
9+
10+
import dynamic_fps.impl.util.duck.DuckScreen;
11+
import net.minecraft.client.gui.screens.Screen;
12+
13+
@Mixin(Screen.class)
14+
public class ScreenMixin implements DuckScreen {
15+
@Unique
16+
private boolean dynamic_fps$canOptimize = false;
17+
18+
@Unique
19+
private boolean dynamic_fps$hasOptedOut = false;
20+
21+
@Override
22+
public boolean dynamic_fps$rendersBackground() {
23+
return dynamic_fps$canOptimize;
24+
}
25+
26+
@Override
27+
public void dynamic_fps$setRendersBackground() {
28+
this.dynamic_fps$canOptimize = true;
29+
}
30+
31+
@Inject(method = "init", at = @At("HEAD"))
32+
private void onInit(CallbackInfo callbackInfo) {
33+
String name = this.getClass().getName();
34+
35+
this.dynamic_fps$hasOptedOut = ModCompat.getInstance().isScreenOptedOut(name);
36+
37+
// Allow other mods to opt out on behalf of vanilla screens
38+
// That Dynamic FPS forced to opt in via its own mod metadata.
39+
if (!this.dynamic_fps$hasOptedOut) {
40+
this.dynamic_fps$canOptimize = ModCompat.getInstance().isScreenOptedIn(name);
41+
}
42+
}
43+
44+
@Inject(method = "renderDirtBackground", at = @At("HEAD"))
45+
private void onRenderDirtBackground(CallbackInfo callbackInfo) {
46+
if (!this.dynamic_fps$hasOptedOut) {
47+
this.dynamic_fps$canOptimize = true; // Signal to apply optimizations on next frame
48+
}
49+
}
50+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package dynamic_fps.impl.mixin;
2+
3+
import dynamic_fps.impl.util.duck.DuckScreen;
4+
import org.spongepowered.asm.mixin.Mixin;
5+
import org.spongepowered.asm.mixin.injection.At;
6+
import org.spongepowered.asm.mixin.injection.Inject;
7+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
8+
9+
import net.minecraft.client.gui.screens.achievement.StatsScreen;
10+
11+
@Mixin(StatsScreen.class)
12+
public class StatsScreenMixin {
13+
@Inject(method = "onStatsUpdated", at = @At("HEAD"))
14+
private void onStatsUpdated(CallbackInfo callbackInfo) {
15+
((DuckScreen) this).dynamic_fps$setRendersBackground();
16+
}
17+
}
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package dynamic_fps.impl.mixin;
22

3+
import java.util.Deque;
4+
35
import org.spongepowered.asm.mixin.Mixin;
46
import org.spongepowered.asm.mixin.injection.At;
5-
import org.spongepowered.asm.mixin.injection.Inject;
6-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
7+
import org.spongepowered.asm.mixin.injection.Redirect;
78

89
import dynamic_fps.impl.DynamicFPSMod;
10+
import net.minecraft.client.gui.components.toasts.Toast;
911
import net.minecraft.client.gui.components.toasts.ToastComponent;
1012

1113
@Mixin(ToastComponent.class)
1214
public class ToastComponentMixin {
13-
@Inject(method = "freeSlots", at = @At("HEAD"), cancellable = true)
14-
private void hasFreeSlots(CallbackInfoReturnable<Integer> callbackInfo) {
15+
@Redirect(method = "render", at = @At(value = "INVOKE", target = "Ljava/util/Deque;isEmpty()Z"))
16+
private boolean onQueueIsEmpty(Deque<Toast> queued) {
1517
if (!DynamicFPSMod.shouldShowToasts()) {
16-
callbackInfo.setReturnValue(0);
18+
return true;
19+
} else {
20+
return queued.isEmpty();
1721
}
1822
}
1923
}

platforms/common/src/main/java/dynamic_fps/impl/service/ModCompat.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@ public interface ModCompat {
77

88
boolean disableOverlayOptimization();
99

10+
Set<String> getOptedInScreens();
11+
Set<String> getOptedOutScreens();
12+
13+
default boolean isScreenOptedIn(String className) {
14+
return getOptedInScreens().contains(className);
15+
}
16+
17+
default boolean isScreenOptedOut(String className) {
18+
return getOptedOutScreens().contains(className);
19+
}
20+
1021
static ModCompat getInstance() {
1122
return Services.MOD_COMPAT;
1223
}

platforms/common/src/main/java/dynamic_fps/impl/service/Services.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package dynamic_fps.impl.service;
22

3-
import java.util.Optional;
3+
import java.util.NoSuchElementException;
44
import java.util.ServiceLoader;
55

66
class Services {
77
static Platform PLATFORM = loadService(Platform.class);
88
static ModCompat MOD_COMPAT = loadService(ModCompat.class);
99

1010
static <T> T loadService(Class<T> type) {
11-
Optional<T> optional = ServiceLoader.load(type).findFirst();
12-
13-
if (optional.isPresent()) {
14-
return optional.get();
15-
} else {
11+
try {
12+
return ServiceLoader.load(type).iterator().next();
13+
} catch (NoSuchElementException e) {
1614
throw new RuntimeException("Failed to load Dynamic FPS " + type.getSimpleName() + " service!");
1715
}
1816
}

platforms/common/src/main/java/dynamic_fps/impl/util/HudInfoRenderer.java

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,44 +2,37 @@
22

33
import net.minecraft.client.Minecraft;
44
import net.minecraft.client.gui.Font;
5-
import net.minecraft.client.gui.GuiGraphics;
6-
import net.minecraft.client.gui.Font.DisplayMode;
75
import net.minecraft.network.chat.Component;
86

97
import static dynamic_fps.impl.util.Localization.localized;
108

11-
import org.joml.Matrix4f;
9+
import com.mojang.blaze3d.vertex.PoseStack;
1210

1311
import dynamic_fps.impl.DynamicFPSMod;
1412

1513
public final class HudInfoRenderer {
1614
private static final Minecraft minecraft = Minecraft.getInstance();
1715

18-
public static void renderInfo(GuiGraphics guiGraphics) {
16+
public static void renderInfo(PoseStack poseStack) {
1917
if (DynamicFPSMod.disabledByUser()) {
20-
drawCenteredText(guiGraphics, localized("gui", "hud.disabled"), 32);
18+
drawCenteredText(poseStack, localized("gui", "hud.disabled"), 32);
2119
} else if (DynamicFPSMod.isForcingLowFPS()) {
22-
drawCenteredText(guiGraphics, localized("gui", "hud.reducing"), 32);
20+
drawCenteredText(poseStack, localized("gui", "hud.reducing"), 32);
2321
}
2422
}
2523

26-
private static void drawCenteredText(GuiGraphics guiGraphics, Component component, float y) {
24+
private static void drawCenteredText(PoseStack poseStack, Component component, float y) {
2725
Font fontRenderer = minecraft.gui.getFont();
2826

2927
int stringWidth = fontRenderer.width(component);
3028
int windowWidth = minecraft.getWindow().getGuiScaledWidth();
3129

32-
fontRenderer.drawInBatch(
30+
fontRenderer.drawShadow(
31+
poseStack,
3332
component,
3433
(windowWidth - stringWidth) / 2f,
3534
y,
36-
0xFFFFFFFF,
37-
true,
38-
new Matrix4f(),
39-
guiGraphics.bufferSource(),
40-
DisplayMode.NORMAL,
41-
0,
42-
255
35+
0xFFFFFFFF
4336
);
4437
}
4538
}

platforms/common/src/main/java/dynamic_fps/impl/util/Localization.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package dynamic_fps.impl.util;
22

33
import dynamic_fps.impl.Constants;
4-
import net.minecraft.network.chat.Component;
54
import net.minecraft.network.chat.MutableComponent;
5+
import net.minecraft.network.chat.TranslatableComponent;
66

77
public final class Localization {
88
/** e.g. keyString("title", "config") -> "title.dynamic_fps.config") */
@@ -11,7 +11,7 @@ public static String translationKey(String domain, String path) {
1111
}
1212

1313
public static MutableComponent localized(String domain, String path, Object... args) {
14-
return Component.translatable(translationKey(domain, path), args);
14+
return new TranslatableComponent(translationKey(domain, path), args);
1515
}
1616

1717
private Localization() {}

platforms/common/src/main/java/dynamic_fps/impl/util/Logging.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package dynamic_fps.impl.util;
22

33
import dynamic_fps.impl.Constants;
4-
import org.slf4j.Logger;
5-
import org.slf4j.LoggerFactory;
4+
import org.apache.logging.log4j.LogManager;
5+
import org.apache.logging.log4j.Logger;
66

77
public class Logging {
8-
private static final Logger logger = LoggerFactory.getLogger(Constants.MOD_ID);
8+
private static final Logger logger = LogManager.getLogger(Constants.MOD_ID);
99

1010
public static Logger getLogger() {
1111
return logger;

0 commit comments

Comments
 (0)