Skip to content

Commit 6af60ce

Browse files
committed
Alot more work done to make mixins in MangoBot possible...
Now no longer hard coded to load mixins... and you can have as many mixins as youd like!!!
1 parent dbb3334 commit 6af60ce

11 files changed

Lines changed: 96 additions & 72 deletions

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ dependencies {
7575
installer('org.mangorage:installer:4.0.20')
7676
bootstrap("org.mangorage:mangobotbootstrap:1.0.41-beta")
7777

78-
plugin("org.mangorage:mangobot:12.0.71")
78+
plugin("org.mangorage:mangobot:12.0.72")
7979

8080

8181
// SpongeMixin...

src/main/java/module-info.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import org.mangorage.mangobotmixin.mixin.core.MangoBotMixinBlackboardImpl;
2+
import org.mangorage.mangobotmixin.mixin.transformer.SpongeMixinClassTransformerImpl;
3+
14
module org.mangorage.mangobotmixin {
25
requires org.mangorage.mangobotcore;
36
requires org.spongepowered.mixin;
@@ -6,11 +9,14 @@
69

710
exports org.mangorage.mangobotmixin.plugin to org.mangorage.mangobotcore;
811
exports org.mangorage.mangobotmixin.mixin.core to org.spongepowered.mixin;
12+
exports org.mangorage.mangobotmixin.mixin to org.spongepowered.mixin;
13+
exports org.mangorage.mangobotmixin.mixin.transformer to org.spongepowered.mixin;
914

1015

11-
provides org.mangorage.bootstrap.api.transformer.IClassTransformer with org.mangorage.mangobotmixin.mixin.SpongeMixinTransformer;
12-
provides org.spongepowered.asm.service.IGlobalPropertyService with org.mangorage.mangobotmixin.mixin.core.MixinBlackboardImpl;
16+
provides org.mangorage.bootstrap.api.transformer.IClassTransformer with SpongeMixinClassTransformerImpl;
17+
provides org.spongepowered.asm.service.IGlobalPropertyService with MangoBotMixinBlackboardImpl;
1318
provides org.mangorage.mangobotcore.plugin.api.Plugin with org.mangorage.mangobotmixin.plugin.MangoBotMixinPlugin;
19+
provides org.mangorage.mangobotcore.plugin.api.IPluginInfoGetter with org.mangorage.mangobotmixin.mixin.MetadataInfoGrabberImpl;
1420

1521
uses org.mangorage.bootstrap.api.transformer.IClassTransformer;
1622
uses org.spongepowered.asm.service.IGlobalPropertyService;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.mangorage.mangobotmixin.mixin;
2+
3+
import org.mangorage.mangobotcore.plugin.api.IPluginInfoGetter;
4+
import org.mangorage.mangobotcore.plugin.api.Metadata;
5+
import org.spongepowered.asm.mixin.Mixins;
6+
7+
import java.util.List;
8+
9+
public final class MetadataInfoGrabberImpl implements IPluginInfoGetter {
10+
@Override
11+
public void onGet(List<Metadata> list) {
12+
list
13+
.forEach(container -> {
14+
final var extraMap = container.getExtraMap();
15+
if (extraMap != null) {
16+
final var mixins = (List<String>) extraMap.getKey("mixins", List.class);
17+
if (mixins != null) {
18+
for (String mixin : mixins) {
19+
System.out.println("Adding Mixin " + mixin);
20+
Mixins.addConfiguration(mixin);
21+
}
22+
}
23+
}
24+
});
25+
}
26+
}

src/main/java/org/mangorage/mangobotmixin/mixin/SpongeMixinImpl.java

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,54 @@
11
package org.mangorage.mangobotmixin.mixin;
22

3-
import org.mangorage.mangobotmixin.mixin.core.MangoBotMixinBootstrap;
4-
import org.mangorage.mangobotmixin.mixin.core.MixinServiceMangoBot;
5-
import org.mangorage.mangobotmixin.mixin.transformer.MangoBotTransformer;
3+
import org.mangorage.mangobotmixin.mixin.core.MangoBotMixinBootstrapImpl;
4+
import org.mangorage.mangobotmixin.mixin.core.MangoBotMixinServiceImpl;
65

76
import org.spongepowered.asm.launch.MixinBootstrap;
87
import org.spongepowered.asm.mixin.MixinEnvironment;
9-
import org.spongepowered.asm.mixin.Mixins;
8+
import org.spongepowered.asm.mixin.transformer.IMixinTransformer;
9+
import org.spongepowered.asm.mixin.transformer.IMixinTransformerFactory;
1010

1111
import java.lang.reflect.Method;
1212

1313
public final class SpongeMixinImpl {
14-
private static final SpongeMixinImpl INSTANCE = new SpongeMixinImpl();
14+
private static boolean loaded = false;
15+
private static IMixinTransformerFactory factory;
16+
private static IMixinTransformer transformer;
1517

16-
public static void load() {}
18+
public static void setFactory(IMixinTransformerFactory factory) {
19+
if (SpongeMixinImpl.factory != null) return;
20+
SpongeMixinImpl.factory = factory;
21+
}
22+
23+
public static void prepare() {
24+
if (SpongeMixinImpl.transformer != null) return;
25+
SpongeMixinImpl.transformer = factory.createTransformer();
26+
}
27+
28+
public static IMixinTransformer getTransformer() {
29+
return transformer;
30+
}
31+
32+
public static void load() {
33+
if (loaded) return;
34+
loaded = true;
1735

18-
SpongeMixinImpl() {
1936
// Load
2037
// System.setProperty("mixin.debug.verbose", "true");
2138
// System.setProperty("mixin.debug", "true");
2239
// System.setProperty("mixin.env.disableRefMap", "true");
2340
// System.setProperty("mixin.checks", "true");
2441

25-
System.setProperty("mixin.bootstrapService", MangoBotMixinBootstrap.class.getName());
26-
System.setProperty("mixin.service", MixinServiceMangoBot.class.getName());
42+
System.setProperty("mixin.bootstrapService", MangoBotMixinBootstrapImpl.class.getName());
43+
System.setProperty("mixin.service", MangoBotMixinServiceImpl.class.getName());
2744
System.setProperty("mixin.env.remapRefMap", "false");
2845

2946
MixinBootstrap.init();
3047

31-
Mixins.addConfiguration("mangobotcore.mixins.json");
32-
3348
completeMixinBootstrap();
34-
35-
// Mixin Extras Init
3649
}
3750

38-
private void completeMixinBootstrap() {
51+
private static void completeMixinBootstrap() {
3952
// Move to the default phase.
4053
try {
4154
final Method method = MixinEnvironment.class.getDeclaredMethod("gotoPhase", MixinEnvironment.Phase.class);
@@ -45,8 +58,7 @@ private void completeMixinBootstrap() {
4558
} catch(final Exception exception) {
4659
exception.printStackTrace();
4760
}
48-
49-
MangoBotTransformer.getInstance().load();
61+
prepare();
5062
}
5163
}
5264

src/main/java/org/mangorage/mangobotmixin/mixin/core/MixinBlackboardImpl.java renamed to src/main/java/org/mangorage/mangobotmixin/mixin/core/MangoBotMixinBlackboardImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
* @author vectrix
1515
* @since 1.0.0
1616
*/
17-
public final class MixinBlackboardImpl implements IGlobalPropertyService {
17+
public final class MangoBotMixinBlackboardImpl implements IGlobalPropertyService {
1818
private final Map<IPropertyKey, Object> map = new HashMap<>();
1919

20-
public MixinBlackboardImpl() {
20+
public MangoBotMixinBlackboardImpl() {
2121
}
2222

2323
public record Key(String name) implements IPropertyKey {}

src/main/java/org/mangorage/mangobotmixin/mixin/core/MangoBotMixinBootstrap.java renamed to src/main/java/org/mangorage/mangobotmixin/mixin/core/MangoBotMixinBootstrapImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import org.spongepowered.asm.service.IMixinServiceBootstrap;
44

5-
public final class MangoBotMixinBootstrap implements IMixinServiceBootstrap {
5+
public final class MangoBotMixinBootstrapImpl implements IMixinServiceBootstrap {
66
@Override
77
public String getName() {
88
return "MangoBotBootstrap";

src/main/java/org/mangorage/mangobotmixin/mixin/MixinContainer.java renamed to src/main/java/org/mangorage/mangobotmixin/mixin/core/MangoBotMixinContainerImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.mangorage.mangobotmixin.mixin;
1+
package org.mangorage.mangobotmixin.mixin.core;
22

33
import org.jetbrains.annotations.NotNull;
44
import org.spongepowered.asm.launch.platform.container.ContainerHandleURI;
@@ -7,14 +7,14 @@
77
import java.nio.file.Path;
88
import java.util.Map;
99

10-
public final class MixinContainer extends ContainerHandleVirtual {
10+
public final class MangoBotMixinContainerImpl extends ContainerHandleVirtual {
1111
/**
1212
* Creates a new root container handle.
1313
*
1414
* @param name the name
1515
* @since 1.0.0
1616
*/
17-
public MixinContainer(final @NotNull String name) {
17+
public MangoBotMixinContainerImpl(final @NotNull String name) {
1818
super(name);
1919
}
2020

src/main/java/org/mangorage/mangobotmixin/mixin/MixinLogger.java renamed to src/main/java/org/mangorage/mangobotmixin/mixin/core/MangoBotMixinLoggerImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.mangorage.mangobotmixin.mixin;
1+
package org.mangorage.mangobotmixin.mixin.core;
22

33
import org.spongepowered.asm.logging.ILogger;
44
import org.spongepowered.asm.logging.Level;
@@ -7,14 +7,14 @@
77
import java.util.Map;
88
import java.util.concurrent.ConcurrentHashMap;
99

10-
public class MixinLogger extends LoggerAdapterAbstract {
10+
public class MangoBotMixinLoggerImpl extends LoggerAdapterAbstract {
1111
private static final Map<String, ILogger> LOGGER_MAP = new ConcurrentHashMap<>();
1212

1313
public static ILogger get(String name) {
14-
return LOGGER_MAP.computeIfAbsent(name, MixinLogger::new);
14+
return LOGGER_MAP.computeIfAbsent(name, MangoBotMixinLoggerImpl::new);
1515
}
1616

17-
protected MixinLogger(String id) {
17+
protected MangoBotMixinLoggerImpl(String id) {
1818
super(id);
1919
}
2020

src/main/java/org/mangorage/mangobotmixin/mixin/core/MixinServiceMangoBot.java renamed to src/main/java/org/mangorage/mangobotmixin/mixin/core/MangoBotMixinServiceImpl.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import org.jetbrains.annotations.NotNull;
44
import org.mangorage.bootstrap.api.loader.MangoLoader;
5-
import org.mangorage.mangobotmixin.mixin.MixinContainer;
6-
import org.mangorage.mangobotmixin.mixin.MixinLogger;
7-
import org.mangorage.mangobotmixin.mixin.transformer.MangoBotTransformer;
5+
import org.mangorage.mangobotmixin.mixin.SpongeMixinImpl;
86
import org.objectweb.asm.ClassReader;
97
import org.objectweb.asm.Opcodes;
108
import org.objectweb.asm.tree.ClassNode;
@@ -29,9 +27,9 @@
2927
import java.util.Collection;
3028
import java.util.List;
3129

32-
public final class MixinServiceMangoBot implements IMixinService, IClassProvider, IClassBytecodeProvider, ITransformerProvider, IClassTracker {
30+
public final class MangoBotMixinServiceImpl implements IMixinService, IClassProvider, IClassBytecodeProvider, ITransformerProvider, IClassTracker {
3331
private final ReEntranceLock lock = new ReEntranceLock(1);
34-
private final MixinContainer container = new MixinContainer("mangobot");
32+
private final MangoBotMixinContainerImpl container = new MangoBotMixinContainerImpl("mangobot");
3533

3634
@Override
3735
public String getName() {
@@ -56,7 +54,7 @@ public MixinEnvironment.Phase getInitialPhase() {
5654
@Override
5755
public void offer(IMixinInternal iMixinInternal) {
5856
if (iMixinInternal instanceof IMixinTransformerFactory factory) {
59-
MangoBotTransformer.getInstance().set(factory, container);
57+
SpongeMixinImpl.setFactory(factory);
6058
}
6159
}
6260

@@ -142,7 +140,7 @@ public MixinEnvironment.CompatibilityLevel getMaxCompatibilityLevel() {
142140

143141
@Override
144142
public ILogger getLogger(String s) {
145-
return MixinLogger.get(s);
143+
return MangoBotMixinLoggerImpl.get(s);
146144
}
147145

148146
@Override

src/main/java/org/mangorage/mangobotmixin/mixin/transformer/MangoBotTransformer.java

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

0 commit comments

Comments
 (0)