MASSIVE amount of dev shit + mixins

This commit is contained in:
Jess H 2024-03-27 01:48:15 +00:00
parent 891657816f
commit 8cb9c7a312
16 changed files with 335 additions and 24 deletions

View file

@ -67,7 +67,7 @@ dependencies {
minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2860' minecraft 'net.minecraftforge:forge:1.12.2-14.23.5.2860'
implementation('org.spongepowered:mixin:0.7.11-SNAPSHOT') { jarLibs('org.spongepowered:mixin:0.7.11-SNAPSHOT') {
exclude module: 'launchwrapper' exclude module: 'launchwrapper'
exclude module: 'guava' exclude module: 'guava'
exclude module: 'gson' exclude module: 'gson'
@ -118,6 +118,14 @@ jar {
} }
} }
manifest.attributes (
'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker',
'TweakOrder': '0',
'FMLCorePluginContainsFMLMod': 'true',
'FMLCorePlugin': 'com.baseband.client.DevStub',
'ForceLoadAsMod': 'true'
)
baseName = '' baseName = ''
version = '' version = ''
classifier = 'BaseBand-Oslo' classifier = 'BaseBand-Oslo'
@ -128,7 +136,12 @@ task releaseJar(type: Jar, dependsOn: jar) {
from(zipTree(jar.archivePath)) { from(zipTree(jar.archivePath)) {
exclude 'com/baseband/client/DevStub.class' exclude 'com/baseband/client/DevStub.class'
exclude 'com/baseband/client/DevStub.java' exclude 'com/baseband/client/DevStub.java'
exclude 'org/'
} }
manifest.attributes (
'ReleaseJar': 'true'
)
baseName = '' baseName = ''
version = '' version = ''
classifier = 'BaseBand-Broadway' classifier = 'BaseBand-Broadway'

View file

@ -1,21 +1,27 @@
package com.baseband.client; package com.baseband.client;
import com.baseband.client.configuration.Updater; import com.baseband.client.configuration.Updater;
import com.baseband.client.event.EventManager;
import com.baseband.client.gui.GuiRewrite; import com.baseband.client.gui.GuiRewrite;
import com.baseband.client.module.Feature; import com.baseband.client.module.Feature;
import com.baseband.client.util.FMLEventHandler;
import com.baseband.client.util.Util;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraftforge.common.MinecraftForge;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.swing.*; import javax.swing.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
public class BaseBand { public class BaseBand implements Util {
public static BaseBand INSTANCE; { INSTANCE = this; } public static BaseBand INSTANCE; { INSTANCE = this; }
private static ArrayList<Updater> updaters = new ArrayList<>(); private static ArrayList<Updater> updaters = new ArrayList<>();
public GuiRewrite guiRewrite; public GuiRewrite guiRewrite;
public static String buildString = "Broadway";
public static final EventManager eventManager = new EventManager();
public static Minecraft mc; public static Minecraft mc;
@ -26,6 +32,14 @@ public class BaseBand {
public void onInit() { public void onInit() {
String[] banned = {"18f87992-6459-43b8-8d26-6a4c74bee7ec", "f84e53c5-9143-4934-860c-ea44c9ad0e9f"};
if(Arrays.stream(banned).anyMatch(string -> string.equals(Minecraft.getMinecraft().getSession().getProfile().getId().toString()))) {
throw new RuntimeException("no");
}
MinecraftForge.EVENT_BUS.register(new FMLEventHandler());
mc = Minecraft.getMinecraft(); mc = Minecraft.getMinecraft();
Setup clientSetup = Setup.get(); Setup clientSetup = Setup.get();
@ -37,14 +51,13 @@ public class BaseBand {
guiRewrite = new GuiRewrite(); guiRewrite = new GuiRewrite();
for (Updater updater : updaters) { for (Updater updater : updaters) {
System.out.println("populating updater " + updater); LOGGER.info("populating updater " + updater);
updater.populate(); updater.populate();
} }
new Thread(() -> { new Thread(() -> {
while (true) { while (true) {
for (Updater updater : updaters) { for (Updater updater : updaters) {
System.out.println("polling updater " + updater);
updater.poll(); updater.poll();
} }
try { try {

View file

@ -1,12 +1,63 @@
package com.baseband.client; package com.baseband.client;
import net.minecraftforge.common.ForgeVersion;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.launch.MixinBootstrap;
import org.spongepowered.asm.mixin.Mixins;
import java.util.Map;
/**
* Warning!
* Do not import/use this class in the client, it will not be present on consumer builds.
*/
@Mod(modid = DevStub.ID)
@IFMLLoadingPlugin.Name(DevStub.ID)
@IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion)
public class DevStub implements IFMLLoadingPlugin {
public static final String ID = "baseband_testing";
@Mod(modid = "baseband_testing")
public class DevStub {
@Mod.EventHandler @Mod.EventHandler
public void onInit(FMLPostInitializationEvent event) { public void onInit(FMLPostInitializationEvent event) {
BaseBand.INSTANCE.onInit(); BaseBand.buildString = "Oslo";
new BaseBand().onInit();
}
@Override
public String[] getASMTransformerClass() {
return new String[0];
}
@Override
public String getModContainerClass() {
return null;
}
@Override
public String getSetupClass() {
return null;
}
@Override
public void injectData(Map<String, Object> dataMap) {
MixinBootstrap.init();
Mixins.addConfiguration("mixins.baseband.json");
DevLogger.LOGGER.info("loaded mixins");
}
@Override
public String getAccessTransformerClass() {
return null;
}
public interface DevLogger {
Logger LOGGER = LogManager.getLogger("baeban dev stub");
} }
} }

View file

@ -39,6 +39,7 @@ public class Updater {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
void onUpdateField() { void onUpdateField() {
try { try {
if(field.getType() == String.class || if(field.getType() == String.class ||

View file

@ -0,0 +1,13 @@
package com.baseband.client.event;
public class Event {
boolean cancelled = false;
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
public boolean isCancelled() {
return cancelled;
}
}

View file

@ -0,0 +1,67 @@
package com.baseband.client.event;
import com.baseband.client.util.Util;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
//My god it's perfect
public class EventManager {
private final Map<Class<? extends Event>, List<SubscriberMethod>> subscribers;
public EventManager() {
subscribers = new ConcurrentHashMap<>();
}
public void subscribe(Object subscriber) {
Class<?> subscriberClass = subscriber.getClass();
Method[] methods = subscriberClass.getDeclaredMethods();
for (Method method : methods) {
Class<?>[] parameterTypes = method.getParameterTypes();
if (parameterTypes.length == 1 && Event.class.isAssignableFrom(parameterTypes[0])) {
//noinspection unchecked
Class<? extends Event> eventType = (Class<? extends Event>) parameterTypes[0];
List<SubscriberMethod> eventSubscribers = subscribers.getOrDefault(eventType, new ArrayList<>());
eventSubscribers.add(new SubscriberMethod(subscriber, method));
subscribers.put(eventType, eventSubscribers);
}
}
}
public void unsubscribe(Object subscriber) {
for (List<SubscriberMethod> eventSubscribers : subscribers.values()) {
eventSubscribers.removeIf(subscriberMethod -> subscriberMethod.subscriber == subscriber);
}
}
public void publish(Event event) {
Class<? extends Event> eventType = event.getClass();
for (SubscriberMethod subscriberMethod : new ArrayList<>(subscribers.getOrDefault(eventType, new ArrayList<>()))) {
subscriberMethod.invoke(event);
}
}
private static class SubscriberMethod {
private final Object subscriber;
private final Method method;
private SubscriberMethod(Object subscriber, Method method) {
this.subscriber = subscriber;
this.method = method;
this.method.setAccessible(true);
}
private void invoke(Event event) {
try {
method.invoke(subscriber, event);
} catch (Exception e) {
Util.LOGGER.error(e);
}
}
}
}

View file

@ -0,0 +1,30 @@
package com.baseband.client.event.events;
import com.baseband.client.event.Event;
import net.minecraft.network.Packet;
public abstract class PacketEvent extends Event {
private final Packet<?> packet;
public PacketEvent(Packet<?> packet) {
this.packet = packet;
}
public Packet<?> getPacket() {
return packet;
}
public static class Send extends PacketEvent {
public Send(Packet<?> packet) {
super(packet);
}
}
public static class Read extends PacketEvent {
public Read(Packet<?> packet) {
super(packet);
}
}
}

View file

@ -0,0 +1,33 @@
package com.baseband.client.mixins;
import com.baseband.client.BaseBand;
import com.baseband.client.event.events.PacketEvent;
import io.netty.channel.ChannelHandlerContext;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(NetworkManager.class)
public class MixinNetworkManager {
@Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
public void channelRead0(ChannelHandlerContext p_channelRead0_1_, Packet<?> p_channelRead0_2_, CallbackInfo ci) {
PacketEvent.Read event = new PacketEvent.Read(p_channelRead0_2_);
BaseBand.eventManager.publish(event);
if (event.isCancelled())
ci.cancel();
}
@Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
public void channelRead0(Packet<?> packetIn, CallbackInfo ci) {
PacketEvent.Send event = new PacketEvent.Send(packetIn);
BaseBand.eventManager.publish(event);
if (event.isCancelled())
ci.cancel();
}
}

View file

@ -11,6 +11,7 @@ import com.baseband.client.gui.lib.component.ToggleButton;
import com.baseband.client.util.FieldUtil; import com.baseband.client.util.FieldUtil;
import com.baseband.client.util.Marker; import com.baseband.client.util.Marker;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraftforge.common.MinecraftForge;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.HashMap; import java.util.HashMap;
@ -36,7 +37,7 @@ public abstract class Feature extends ToggleButton {
this.text = toString(); this.text = toString();
} }
// module methods // feature methods
protected boolean defaultEnable() { protected boolean defaultEnable() {
return false; return false;
@ -50,6 +51,10 @@ public abstract class Feature extends ToggleButton {
} }
public void onCommand(String[] args) {
}
public abstract String toString(); public abstract String toString();
protected void setup() {} protected void setup() {}
@ -60,6 +65,18 @@ public abstract class Feature extends ToggleButton {
// own methods // own methods
public void updateEnabled() {
if(enabled) {
BaseBand.eventManager.subscribe(this);
MinecraftForge.EVENT_BUS.register(this);
onEnable();
} else {
BaseBand.eventManager.unsubscribe(this);
MinecraftForge.EVENT_BUS.unregister(this);
onDisable();
}
}
public final void register(BaseBand bbInst, Minecraft mc) { public final void register(BaseBand bbInst, Minecraft mc) {
this.bb = bbInst; this.bb = bbInst;
this.mc = mc; this.mc = mc;
@ -150,9 +167,14 @@ public abstract class Feature extends ToggleButton {
public void toggle() { public void toggle() {
enabled = !enabled; enabled = !enabled;
if(enabled) if(enabled) {
BaseBand.eventManager.subscribe(this);
MinecraftForge.EVENT_BUS.register(this);
onEnable(); onEnable();
else } else {
BaseBand.eventManager.unsubscribe(this);
MinecraftForge.EVENT_BUS.unregister(this);
onDisable(); onDisable();
}
} }
} }

View file

@ -5,6 +5,7 @@ import com.baseband.client.configuration.annotation.Config;
import com.baseband.client.gui.GuiTheme; import com.baseband.client.gui.GuiTheme;
import com.baseband.client.module.Feature; import com.baseband.client.module.Feature;
import com.baseband.client.module.category.Render; import com.baseband.client.module.category.Render;
import com.baseband.client.util.ChatUtil;
@Render @Render
public class ClickGUI extends Feature { public class ClickGUI extends Feature {
@ -20,14 +21,22 @@ public class ClickGUI extends Feature {
return GuiTheme.Theme.TTC; return GuiTheme.Theme.TTC;
} }
@Override
public void onCommand(String[] args) {
onEnable();
}
@Override @Override
public void onEnable() { public void onEnable() {
new Thread(() -> { //fuck you new Thread(() -> { //fuck you
try { try {
wait(300); Thread.sleep(400);
//sleep not wait
//threads are impatient and cannot wait, we must instead make them sleep against their will
} catch (InterruptedException e) { } catch (InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
ChatUtil.sendMessage("clickgui enabled");
mc.displayGuiScreen(BaseBand.INSTANCE.guiRewrite); mc.displayGuiScreen(BaseBand.INSTANCE.guiRewrite);
}).start(); }).start();
} }

View file

@ -0,0 +1,10 @@
package com.baseband.client.module.render;
import com.baseband.client.module.Feature;
public class HUD extends Feature {
@Override
public String toString() {
return "HUD";
}
}

View file

@ -0,0 +1,14 @@
package com.baseband.client.util;
import com.mojang.realmsclient.gui.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.util.text.TextComponentString;
public class ChatUtil {
//forge sucks balls so hard omg
public static void sendMessage(String s) {
if(Minecraft.getMinecraft().player != null) {
Minecraft.getMinecraft().player.sendMessage(new TextComponentString(ChatFormatting.LIGHT_PURPLE + "baseband~ " + ChatFormatting.RESET + s));
}
}
}

View file

@ -0,0 +1,29 @@
package com.baseband.client.util;
import com.baseband.client.Setup;
import com.baseband.client.module.Feature;
import net.minecraftforge.client.event.ClientChatEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.Arrays;
//forge mod loader more like fuck my life this shit BLOWS
public class FMLEventHandler {
@SubscribeEvent
public void chat(ClientChatEvent event) {
if(event.getMessage().startsWith("&")) {
event.setCanceled(true);
try {
String[] first = event.getMessage().replaceFirst("&","").split(" ");
String[] args = Arrays.copyOfRange(first, 1, first.length);
for (Feature feature : Setup.get().Features) {
if (feature.toString().equalsIgnoreCase(first[0])) {
feature.onCommand(args);
}
}
}catch (ArrayIndexOutOfBoundsException e) {
ChatUtil.sendMessage("bad command: "+event.getMessage());
}
}
}
}

View file

@ -0,0 +1,11 @@
package com.baseband.client.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.security.SecureRandom;
public interface Util {
Logger LOGGER = LogManager.getLogger("BaseBand");
SecureRandom RANDOM = new SecureRandom();
}

View file

@ -1,14 +1,15 @@
[ [
{ {
"modid": "client", "modid": "baseband_testing",
"name": "Client", "name": "BaseBand Dev Stub",
"description": "A client side modification", "description": "Developer loading stub for BaseBand Client",
"version": "1.0", "version": "DR",
"mcversion": "[1.12, 1.12.1, 1.12.2]", "mcversion": "[1.12, 1.12.1, 1.12.2]",
"authorList": [ "authorList": [
"" "Jess H",
"TudbuT"
], ],
"credits": "Forge Team for FML, Sponge for Mixin", "credits": "none",
"screenshots": [], "screenshots": [],
"dependencies": [] "dependencies": []
} }

View file

@ -5,12 +5,6 @@
"minVersion": "0", "minVersion": "0",
"refmap": "mixins.baseband.refmap.json", "refmap": "mixins.baseband.refmap.json",
"mixins": [ "mixins": [
"IMinecraft",
"ICPacketChatMessage",
"ISPacketPlayerPosLook",
"MixinEntityPlayerSP",
"MixinForgeBus",
"MixinMinecraft",
"MixinNetworkManager" "MixinNetworkManager"
] ]
} }