Skip to content

Commit 428a0fd

Browse files
committed
Update to Forge 47.4.12
1 parent e492e87 commit 428a0fd

4 files changed

Lines changed: 157 additions & 66 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
### Minecraft Forge Hybrid server implementing the Spigot/Bukkit API, formerly known as Thermos/Cauldron/MCPC+
55

66
[![](https://img.shields.io/github/stars/MohistMC/Mohist.svg?label=Stars&logo=github)](https://github.com/MohistMC/Mohist/stargazers)
7-
[![](https://img.shields.io/badge/Forge-1.20.1--47.4.11-brightgreen.svg?colorB=26303d&logo=Conda-Forge)](https://files.minecraftforge.net/net/minecraftforge/forge/index_1.20.1.html)
7+
[![](https://img.shields.io/badge/Forge-1.20.1--47.4.12-brightgreen.svg?colorB=26303d&logo=Conda-Forge)](https://files.minecraftforge.net/net/minecraftforge/forge/index_1.20.1.html)
88
[![](https://img.shields.io/badge/NeoForge-1.20.1--47.1.106-brightgreen.svg?colorB=26303d)](https://neoforged.net/)
99
[![](https://img.shields.io/badge/JDK-17.0.14-brightgreen.svg?colorB=469C00&logo=java)](https://www.azul.com/downloads/?version=java-17-lts#zulu)
1010
[![](https://img.shields.io/badge/Gradle-8.12.1-brightgreen.svg?colorB=469C00&logo=gradle)](https://docs.gradle.org/8.12.1/release-notes.html)
@@ -20,7 +20,7 @@
2020
Progress
2121
------
2222

23-
- [x] Rectify Forge([**1837d8c36**](https://github.com/MinecraftForge/MinecraftForge/commit/1837d8c36))
23+
- [x] Rectify Forge([**f20ab8e6c**](https://github.com/MinecraftForge/MinecraftForge/commit/f20ab8e6c))
2424
- [x] Rectify NeoForge([**e7ac32353**](https://github.com/neoforged/NeoForge/commit/e7ac32353))
2525
- [x] Start patch
2626
* [x] Bukkit([**997de31d**](https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/commits/997de31d))

forge/fmlloader/src/main/java/net/minecraftforge/fml/loading/ImmediateWindowHandler.java

Lines changed: 123 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
package net.minecraftforge.fml.loading;
77

8+
import cpw.mods.modlauncher.Launcher;
9+
import cpw.mods.modlauncher.api.IModuleLayerManager;
810
import net.minecraftforge.fml.loading.progress.ProgressMeter;
911
import net.minecraftforge.fml.loading.progress.StartupNotificationManager;
1012
import org.apache.logging.log4j.LogManager;
@@ -23,28 +25,44 @@ public class ImmediateWindowHandler {
2325

2426
private static ProgressMeter earlyProgress;
2527
public static void load(final String launchTarget, final String[] arguments) {
28+
final var serviceLayer = Launcher.INSTANCE.findLayerManager()
29+
.flatMap(manager -> manager.getLayer(IModuleLayerManager.Layer.SERVICE))
30+
.orElse(null);
31+
final var providerName = FMLConfig.getConfigValue(FMLConfig.ConfigValue.EARLY_WINDOW_PROVIDER);
32+
2633
if (!List.of("forgeclient", "forgeclientuserdev", "forgeclientdev").contains(launchTarget)) {
27-
provider = new DummyProvider();
2834
LOGGER.info("ImmediateWindowProvider not loading because launch target is {}", launchTarget);
2935
} else if (!FMLConfig.getBoolConfigValue(FMLConfig.ConfigValue.EARLY_WINDOW_CONTROL)) {
30-
provider = new DummyProvider();
3136
LOGGER.info("ImmediateWindowProvider not loading because splash screen is disabled");
37+
} else if (providerName == null) {
38+
LOGGER.info("ImmediateWindowProvider not loading because splash screen provider is null");
39+
} else if (serviceLayer == null) {
40+
LOGGER.error("Failed to find service layer for ImmediateWindowProvider");
3241
} else {
33-
final var providername = FMLConfig.getConfigValue(FMLConfig.ConfigValue.EARLY_WINDOW_PROVIDER);
34-
LOGGER.info("Loading ImmediateWindowProvider {}", providername);
35-
final var maybeProvider = ServiceLoader.load(ImmediateWindowProvider.class)
36-
.stream()
37-
.map(ServiceLoader.Provider::get)
38-
.filter(p -> Objects.equals(p.name(), providername))
39-
.findFirst();
40-
provider = maybeProvider.or(() -> {
41-
LOGGER.info("Failed to find ImmediateWindowProvider {}, disabling", providername);
42-
return Optional.of(new DummyProvider());
43-
}).orElseThrow();
42+
LOGGER.info("Loading ImmediateWindowProvider {}", providerName);
43+
44+
for (var itr = ServiceLoader.load(serviceLayer, ImmediateWindowProvider.class).iterator(); itr.hasNext(); ) {
45+
try {
46+
var srvc = itr.next();
47+
if (providerName.equals(srvc.name())) {
48+
provider = new Wrapper(srvc);
49+
break;
50+
}
51+
} catch (ServiceConfigurationError e) {
52+
LOGGER.error("Failed to initalize ImmediateWindowProvider Service", e);
53+
}
54+
}
55+
56+
if (provider == null)
57+
LOGGER.info("Failed to find ImmediateWindowProvider {}, disabling", providerName);
4458
}
59+
4560
// Only update config if the provider isn't the dummy provider
46-
if (!Objects.equals(provider.name(), "dummyprovider"))
61+
if (provider != null)
4762
FMLConfig.updateConfig(FMLConfig.ConfigValue.EARLY_WINDOW_PROVIDER, provider.name());
63+
else
64+
provider = new DummyProvider();
65+
4866
FMLLoader.progressWindowTick = provider.initialize(arguments);
4967
earlyProgress = StartupNotificationManager.addProgressBar("EARLY", 0);
5068
earlyProgress.label("Bootstrapping Minecraft");
@@ -78,6 +96,7 @@ public static void renderTick() {
7896
public static String getGLVersion() {
7997
return provider.getGLVersion();
8098
}
99+
81100
public static void updateProgress(final String message) {
82101
earlyProgress.label(message);
83102
}
@@ -156,4 +175,94 @@ public void periodicTick() {
156175
// NOOP
157176
}
158177
}
178+
179+
// We create a wrapper because we want to log errors to the log files, which not all paths of ModLauncher do. Little dirty, but works for now.
180+
private static class Wrapper implements ImmediateWindowProvider {
181+
private final ImmediateWindowProvider delegate;
182+
183+
private Wrapper(ImmediateWindowProvider delegate) {
184+
this.delegate = delegate;
185+
}
186+
187+
public String name() {
188+
try {
189+
return delegate.name();
190+
} catch (Throwable t) {
191+
LOGGER.error("Failed to call provider.name", t);
192+
throw t;
193+
}
194+
}
195+
196+
public Runnable initialize(String[] arguments) {
197+
try {
198+
return delegate.initialize(arguments);
199+
} catch (Throwable t) {
200+
LOGGER.error("Failed to call provider.initialize", t);
201+
throw t;
202+
}
203+
}
204+
205+
public void updateFramebufferSize(IntConsumer width, IntConsumer height) {
206+
try {
207+
delegate.updateFramebufferSize(width, height);
208+
} catch (Throwable t) {
209+
LOGGER.error("Failed to call provider.updateFramebufferSize", t);
210+
throw t;
211+
}
212+
}
213+
214+
public long setupMinecraftWindow(IntSupplier width, IntSupplier height, Supplier<String> title, LongSupplier monitor) {
215+
try {
216+
return delegate.setupMinecraftWindow(width, height, title, monitor);
217+
} catch (Throwable t) {
218+
LOGGER.error("Failed to call provider.setupMinecraftWindow", t);
219+
throw t;
220+
}
221+
}
222+
223+
public boolean positionWindow(Optional<Object> monitor, IntConsumer widthSetter, IntConsumer heightSetter, IntConsumer xSetter, IntConsumer ySetter) {
224+
try {
225+
return delegate.positionWindow(monitor, widthSetter, heightSetter, xSetter, ySetter);
226+
} catch (Throwable t) {
227+
LOGGER.error("Failed to call provider.positionWindow", t);
228+
throw t;
229+
}
230+
}
231+
232+
public <T> Supplier<T> loadingOverlay(Supplier<?> mc, Supplier<?> ri, Consumer<Optional<Throwable>> ex, boolean fade) {
233+
try {
234+
return delegate.loadingOverlay(mc, ri, ex, fade);
235+
} catch (Throwable t) {
236+
LOGGER.error("Failed to call provider.loadingOverlay", t);
237+
throw t;
238+
}
239+
}
240+
241+
public void updateModuleReads(ModuleLayer layer) {
242+
try {
243+
delegate.updateModuleReads(layer);
244+
} catch (Throwable t) {
245+
LOGGER.error("Failed to call provider.updateModuleReads", t);
246+
throw t;
247+
}
248+
}
249+
250+
public void periodicTick() {
251+
try {
252+
delegate.periodicTick();
253+
} catch (Throwable t) {
254+
LOGGER.error("Failed to call provider.periodicTick", t);
255+
throw t;
256+
}
257+
}
258+
259+
public String getGLVersion() {
260+
try {
261+
return delegate.getGLVersion();
262+
} catch (Throwable t) {
263+
LOGGER.error("Failed to call provider.getGLVersion", t);
264+
throw t;
265+
}
266+
}
267+
}
159268
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ org.gradle.daemon=false
77
bukkit_version=997de31d
88
craftbukkit_version=ddc9a2dad
99
spigot_version=d2eba2c8
10-
forge_version=47.4.11
10+
forge_version=47.4.12
1111
neoforge_version=47.1.106
1212
mohist_group_id=com.mohistmc
1313

src/main/java/net/minecraftforge/common/util/ConcatenatedListView.java

Lines changed: 31 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,79 +7,68 @@
77

88
import com.google.common.collect.Iterables;
99
import com.google.common.collect.Lists;
10-
import java.util.ArrayList;
11-
import java.util.Collection;
12-
import java.util.Collections;
13-
import java.util.HashSet;
14-
import java.util.Iterator;
15-
import java.util.List;
16-
import java.util.ListIterator;
17-
import java.util.Spliterator;
18-
import java.util.function.Supplier;
1910
import org.jetbrains.annotations.NotNull;
2011

12+
import java.util.*;
13+
import java.util.function.Supplier;
14+
2115
/**
2216
* A list that concatenates multiple other lists for efficient iteration.<p/>
2317
* You may use this in place of creating a new list and calling {@link List#addAll(Collection)}
2418
* for each of your collections.<p/>
2519
* This list does not support modification operations, but the underlying lists may be mutated safely externally.
2620
*/
27-
public class ConcatenatedListView<T> implements List<T>
28-
{
21+
public class ConcatenatedListView<T> implements List<T> {
2922
@SafeVarargs
30-
public static <T> ConcatenatedListView<T> of(List<T>... lists)
31-
{
23+
public static <T> ConcatenatedListView<T> of(List<T>... lists) {
3224
return new ConcatenatedListView<>(List.of(lists));
3325
}
3426

35-
public static <T> List<T> of(List<? extends List<? extends T>> members)
36-
{
37-
return switch (members.size()) {
38-
case 0 -> List.of();
39-
case 1 -> Collections.unmodifiableList(members.get(0));
40-
default -> new ConcatenatedListView<>(members);
41-
};
27+
public static <T> List<T> of(List<? extends List<? extends T>> members) {
28+
if (members.isEmpty())
29+
return List.of();
30+
if (members.size() == 1)
31+
return (Collections.unmodifiableList(members.get(0)));
32+
@SuppressWarnings("unchecked")
33+
var typed = (List<List<T>>)members;
34+
return new ConcatenatedListView<>(typed);
4235
}
4336

44-
private final List<? extends List<? extends T>> lists;
37+
private final List<List<T>> lists;
4538

46-
private ConcatenatedListView(List<? extends List<? extends T>> lists)
47-
{
39+
private ConcatenatedListView(List<List<T>> lists) {
4840
this.lists = lists;
4941
}
5042

5143
@Override
52-
public int size()
53-
{
44+
public int size() {
5445
int size = 0;
5546
for (var list : lists)
5647
size += list.size();
5748
return size;
5849
}
5950

6051
@Override
61-
public boolean isEmpty()
62-
{
63-
for (List<? extends T> list : lists)
52+
public boolean isEmpty() {
53+
for (List<? extends T> list : lists) {
6454
if (!list.isEmpty())
6555
return false;
56+
}
6657
return true;
6758
}
6859

6960
@Override
70-
public boolean contains(Object o)
71-
{
72-
for (var list : lists)
61+
public boolean contains(Object o) {
62+
for (var list : lists) {
7363
if (list.contains(o))
7464
return true;
65+
}
7566
return false;
7667
}
7768

7869
@Override
79-
public T get(int index)
80-
{
81-
for (var list : lists)
82-
{
70+
public T get(int index) {
71+
for (var list : lists) {
8372
int size = list.size();
8473
if (index < size)
8574
return list.get(index);
@@ -89,11 +78,9 @@ public T get(int index)
8978
}
9079

9180
@Override
92-
public int indexOf(Object o)
93-
{
81+
public int indexOf(Object o) {
9482
int offset = 0;
95-
for (var list : lists)
96-
{
83+
for (var list : lists) {
9784
int foundIndex = list.indexOf(o);
9885
if (foundIndex >= 0)
9986
return offset + foundIndex;
@@ -103,11 +90,9 @@ public int indexOf(Object o)
10390
}
10491

10592
@Override
106-
public int lastIndexOf(Object o)
107-
{
93+
public int lastIndexOf(Object o) {
10894
int offset = 0;
109-
for (var list : Lists.reverse(lists))
110-
{
95+
for (var list : Lists.reverse(lists)) {
11196
int foundIndex = list.lastIndexOf(o);
11297
if (foundIndex >= 0)
11398
return offset + foundIndex;
@@ -118,20 +103,17 @@ public int lastIndexOf(Object o)
118103

119104
@NotNull
120105
@Override
121-
public Iterator<T> iterator()
122-
{
106+
public Iterator<T> iterator() {
123107
return Iterables.unmodifiableIterable(Iterables.concat(lists)).iterator();
124108
}
125109

126110
@Override
127-
public Spliterator<T> spliterator()
128-
{
111+
public Spliterator<T> spliterator() {
129112
return Iterables.unmodifiableIterable(Iterables.concat(lists)).spliterator();
130113
}
131114

132115
// Delegate to a concatenated collection
133-
private <C extends Collection<T>> C concatenate(Supplier<C> collectionFactory)
134-
{
116+
private <C extends Collection<T>> C concatenate(Supplier<C> collectionFactory) {
135117
var concat = collectionFactory.get();
136118
for (var list : lists)
137119
concat.addAll(list);

0 commit comments

Comments
 (0)