ok so it goes in now but mobf breaks loading and proguard breaks annotations.
This commit is contained in:
parent
4da1f6ca19
commit
655f4072fe
30 changed files with 272 additions and 155 deletions
|
@ -23,10 +23,14 @@ jobs:
|
||||||
- name: Initialize Gradle
|
- name: Initialize Gradle
|
||||||
uses: https://github.com/gradle/actions/setup-gradle@v3
|
uses: https://github.com/gradle/actions/setup-gradle@v3
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./gradlew Client:build Client:proguard
|
run: |
|
||||||
|
./gradlew Client:build Client:proguard
|
||||||
|
bash mobf.sh Client/build/proguard/BaseBand-DSM.jar
|
||||||
- name: Build Broadway
|
- name: Build Broadway
|
||||||
if: github.ref == 'refs/heads/release'
|
if: github.ref == 'refs/heads/release'
|
||||||
run: ./gradlew Client:proguardRelease
|
run: |
|
||||||
|
./gradlew Client:proguardRelease
|
||||||
|
bash mobf.sh Client/build/proguard/BaseBand-Broadway.jar
|
||||||
- name: Upload DSM
|
- name: Upload DSM
|
||||||
uses: forgejo/upload-artifact@v4
|
uses: forgejo/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
|
|
@ -24,7 +24,9 @@ jobs:
|
||||||
- name: Initialize Gradle
|
- name: Initialize Gradle
|
||||||
uses: https://github.com/gradle/actions/setup-gradle@v3
|
uses: https://github.com/gradle/actions/setup-gradle@v3
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./gradlew --no-daemon Loader:build Loader:proguard
|
run: |
|
||||||
|
./gradlew --no-daemon Loader:build Loader:proguard
|
||||||
|
bash mobf.sh Loader/build/proguard/BaseBand-Loader.jar
|
||||||
- name: Upload Loader
|
- name: Upload Loader
|
||||||
uses: forgejo/upload-artifact@v4
|
uses: forgejo/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
|
|
@ -152,6 +152,8 @@ tasks.register('releaseJar', Jar) {
|
||||||
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/spongepowered/**'
|
exclude 'org/spongepowered/**'
|
||||||
|
exclude 'META-INF/**'
|
||||||
|
exclude 'mcmod.info'
|
||||||
}
|
}
|
||||||
|
|
||||||
manifest.attributes(
|
manifest.attributes(
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package com.baseband.client;
|
package com.baseband.client;
|
||||||
|
|
||||||
|
import com.baseband.client.event.Event;
|
||||||
import com.baseband.client.event.EventManager;
|
import com.baseband.client.event.EventManager;
|
||||||
import com.baseband.client.event.FMLEventHandler;
|
import com.baseband.client.event.FMLEventHandler;
|
||||||
|
import com.baseband.client.event.remote.RemoteEvent;
|
||||||
import com.baseband.client.event.remote.RemoteEventManager;
|
import com.baseband.client.event.remote.RemoteEventManager;
|
||||||
import com.baseband.client.feature.Feature;
|
import com.baseband.client.feature.Feature;
|
||||||
import com.baseband.client.feature.Features;
|
import com.baseband.client.feature.Features;
|
||||||
|
@ -23,8 +25,6 @@ public class BaseBand {
|
||||||
public static final Logger LOGGER = LogManager.getLogger("BaseBand");
|
public static final Logger LOGGER = LogManager.getLogger("BaseBand");
|
||||||
public static final SecureRandom RANDOM = new SecureRandom();
|
public static final SecureRandom RANDOM = new SecureRandom();
|
||||||
|
|
||||||
public static BaseBand INSTANCE = new BaseBand();
|
|
||||||
|
|
||||||
public static String buildString = "Broadway";
|
public static String buildString = "Broadway";
|
||||||
public static final EventManager eventManager = new EventManager(LOGGER::error);
|
public static final EventManager eventManager = new EventManager(LOGGER::error);
|
||||||
public static final RemoteEventManager remoteEventManager = new RemoteEventManager();
|
public static final RemoteEventManager remoteEventManager = new RemoteEventManager();
|
||||||
|
@ -42,7 +42,15 @@ public class BaseBand {
|
||||||
} catch (Exception ignored) {}
|
} catch (Exception ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onInit() {
|
public static <T extends Event> T publish(T event) {
|
||||||
|
if(event instanceof RemoteEvent)
|
||||||
|
remoteEventManager.publish((RemoteEvent) event);
|
||||||
|
else
|
||||||
|
eventManager.publish(event);
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onInit() {
|
||||||
String[] banned = {"0836f9ee-4c5d-45e4-b39c-954880199acb", "18f87992-6459-43b8-8d26-6a4c74bee7ec", "f84e53c5-9143-4934-860c-ea44c9ad0e9f"};
|
String[] banned = {"0836f9ee-4c5d-45e4-b39c-954880199acb", "18f87992-6459-43b8-8d26-6a4c74bee7ec", "f84e53c5-9143-4934-860c-ea44c9ad0e9f"};
|
||||||
|
|
||||||
if(Arrays.stream(banned).anyMatch(string -> string.equals(Minecraft.getMinecraft().getSession().getProfile().getId().toString()))) {
|
if(Arrays.stream(banned).anyMatch(string -> string.equals(Minecraft.getMinecraft().getSession().getProfile().getId().toString()))) {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package com.baseband.client;
|
||||||
import net.minecraftforge.common.ForgeVersion;
|
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.FMLInjectionData;
|
||||||
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
import net.minecraftforge.fml.relauncher.IFMLLoadingPlugin;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
@ -26,7 +27,7 @@ public class DevStub implements IFMLLoadingPlugin {
|
||||||
@Mod.EventHandler
|
@Mod.EventHandler
|
||||||
public void onInit(FMLPostInitializationEvent event) {
|
public void onInit(FMLPostInitializationEvent event) {
|
||||||
BaseBand.buildString = "Dark Side of the Moon";
|
BaseBand.buildString = "Dark Side of the Moon";
|
||||||
BaseBand.INSTANCE.onInit();
|
BaseBand.onInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -5,7 +5,6 @@ import com.baseband.client.Setup;
|
||||||
import com.baseband.client.event.events.PlayerDestroyEvent;
|
import com.baseband.client.event.events.PlayerDestroyEvent;
|
||||||
import com.baseband.client.feature.Feature;
|
import com.baseband.client.feature.Feature;
|
||||||
import com.baseband.client.feature.client.Client;
|
import com.baseband.client.feature.client.Client;
|
||||||
import com.baseband.client.registry.Configuration;
|
|
||||||
import com.baseband.client.util.interact.Chat;
|
import com.baseband.client.util.interact.Chat;
|
||||||
import net.minecraft.client.entity.EntityPlayerSP;
|
import net.minecraft.client.entity.EntityPlayerSP;
|
||||||
import net.minecraftforge.client.event.ClientChatEvent;
|
import net.minecraftforge.client.event.ClientChatEvent;
|
||||||
|
@ -22,7 +21,7 @@ import static com.baseband.client.BaseBand.mc;
|
||||||
//forge mod loader more like fuck my life this shit BLOWS
|
//forge mod loader more like fuck my life this shit BLOWS
|
||||||
public class FMLEventHandler {
|
public class FMLEventHandler {
|
||||||
|
|
||||||
static Setup setup = Setup.get();
|
Setup setup = Setup.get();
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void chat(ClientChatEvent event) {
|
public void chat(ClientChatEvent event) {
|
||||||
|
@ -59,7 +58,7 @@ public class FMLEventHandler {
|
||||||
BaseBand.remoteEventManager.onTick();
|
BaseBand.remoteEventManager.onTick();
|
||||||
if(mc.world == null || mc.player == null) {
|
if(mc.world == null || mc.player == null) {
|
||||||
if(playerLastTick != null) {
|
if(playerLastTick != null) {
|
||||||
Configuration.publish(new PlayerDestroyEvent(playerLastTick));
|
BaseBand.publish(new PlayerDestroyEvent(playerLastTick));
|
||||||
}
|
}
|
||||||
playerLastTick = null;
|
playerLastTick = null;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -23,7 +23,7 @@ import java.util.LinkedList;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
|
||||||
public class RemoteEventManager {
|
public class RemoteEventManager {
|
||||||
private static final Setup SETUP = Setup.get();
|
private final Setup Setup = com.baseband.client.Setup.get();
|
||||||
|
|
||||||
public Socket head = null;
|
public Socket head = null;
|
||||||
public final ArrayList<Socket> clients = new ArrayList<>();
|
public final ArrayList<Socket> clients = new ArrayList<>();
|
||||||
|
@ -38,12 +38,12 @@ public class RemoteEventManager {
|
||||||
if(isConnected())
|
if(isConnected())
|
||||||
end();
|
end();
|
||||||
try {
|
try {
|
||||||
head = new Socket(ip, SETUP.Port);
|
head = new Socket(ip, Setup.Port);
|
||||||
initClient();
|
initClient();
|
||||||
Chat.notify("[Remote] Started as client.");
|
Chat.notify("[Remote] Started as client.");
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
try {
|
try {
|
||||||
server = new ServerSocket(SETUP.Port);
|
server = new ServerSocket(Setup.Port);
|
||||||
initServer();
|
initServer();
|
||||||
Chat.notify("[Remote] Started as server.");
|
Chat.notify("[Remote] Started as server.");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -78,12 +78,12 @@ public class RemoteEventManager {
|
||||||
|
|
||||||
Thread thread;
|
Thread thread;
|
||||||
private void initServer() {
|
private void initServer() {
|
||||||
thread = new Thread(this::runServer, SETUP.Name + " RemoteEvent server");
|
thread = new Thread(this::runServer, Setup.Name + " RemoteEvent server");
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initClient() {
|
private void initClient() {
|
||||||
thread = new Thread(this::runClient, SETUP.Name + " RemoteEvent client");
|
thread = new Thread(this::runClient, Setup.Name + " RemoteEvent client");
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,6 @@ public abstract class Feature extends ToggleButton implements SetCommand {
|
||||||
|
|
||||||
protected Setup Setup;
|
protected Setup Setup;
|
||||||
|
|
||||||
protected BaseBand bb;
|
|
||||||
protected Minecraft mc;
|
protected Minecraft mc;
|
||||||
|
|
||||||
public Category category;
|
public Category category;
|
||||||
|
@ -93,9 +92,8 @@ public abstract class Feature extends ToggleButton implements SetCommand {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void register(BaseBand bbInst, Minecraft mc) {
|
public final void register(Minecraft mc) {
|
||||||
Setup = com.baseband.client.Setup.get();
|
Setup = com.baseband.client.Setup.get();
|
||||||
this.bb = bbInst;
|
|
||||||
this.mc = mc;
|
this.mc = mc;
|
||||||
|
|
||||||
this.text = toString();
|
this.text = toString();
|
||||||
|
@ -221,7 +219,7 @@ public abstract class Feature extends ToggleButton implements SetCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean notIngame() {
|
protected boolean notIngame() {
|
||||||
if (bb == null || mc == null) {
|
if (mc == null) {
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
return mc.world == null || mc.player == null;
|
return mc.world == null || mc.player == null;
|
||||||
|
|
|
@ -21,7 +21,7 @@ public class Features {
|
||||||
}
|
}
|
||||||
features = filteredFeatures.toArray(new Feature[0]);
|
features = filteredFeatures.toArray(new Feature[0]);
|
||||||
for (Feature feature : features) {
|
for (Feature feature : features) {
|
||||||
feature.register(BaseBand.INSTANCE, BaseBand.mc);
|
feature.register(BaseBand.mc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class AltControl extends Feature {
|
||||||
@Trigger("Send config to alts")
|
@Trigger("Send config to alts")
|
||||||
@Gate(M_ENABLED)
|
@Gate(M_ENABLED)
|
||||||
public void sendConfig() {
|
public void sendConfig() {
|
||||||
Configuration.publish(new RemoteConfigEvent());
|
BaseBand.publish(new RemoteConfigEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Marker(1)
|
@Marker(1)
|
||||||
|
@ -69,7 +69,7 @@ public class AltControl extends Feature {
|
||||||
Chat.print("syntax: " + Client.prefix + this + " <message...>");
|
Chat.print("syntax: " + Client.prefix + this + " <message...>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Configuration.publish(new RemoteSendMessageEvent(String.join(" ", args)));
|
BaseBand.publish(new RemoteSendMessageEvent(String.join(" ", args)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package com.baseband.client.feature.world;
|
package com.baseband.client.feature.world;
|
||||||
|
|
||||||
|
import com.baseband.client.BaseBand;
|
||||||
import com.baseband.client.event.Priority;
|
import com.baseband.client.event.Priority;
|
||||||
import com.baseband.client.event.events.SelectEvent;
|
import com.baseband.client.event.events.SelectEvent;
|
||||||
import com.baseband.client.feature.Feature;
|
import com.baseband.client.feature.Feature;
|
||||||
import com.baseband.client.feature.category.World;
|
import com.baseband.client.feature.category.World;
|
||||||
import com.baseband.client.registry.Configuration;
|
|
||||||
import com.baseband.client.util.interact.Chat;
|
import com.baseband.client.util.interact.Chat;
|
||||||
import com.baseband.client.util.type.Selection;
|
import com.baseband.client.util.type.Selection;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -21,12 +21,12 @@ public class Select extends Feature {
|
||||||
end = null;
|
end = null;
|
||||||
Chat.notify("Selection reset.");
|
Chat.notify("Selection reset.");
|
||||||
Chat.notify("Position 1: " + b.getX() + " " + b.getY() + " " + b.getZ());
|
Chat.notify("Position 1: " + b.getX() + " " + b.getY() + " " + b.getZ());
|
||||||
Configuration.publish(new SelectEvent(null));
|
BaseBand.publish(new SelectEvent(null));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
end = b;
|
end = b;
|
||||||
Chat.notify("Position 2: " + b.getX() + " " + b.getY() + " " + b.getZ());
|
Chat.notify("Position 2: " + b.getX() + " " + b.getY() + " " + b.getZ());
|
||||||
Configuration.publish(new SelectEvent(new Selection(begin, end)));
|
BaseBand.publish(new SelectEvent(new Selection(begin, end)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Priority(Integer.MAX_VALUE)
|
@Priority(Integer.MAX_VALUE)
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
import com.baseband.client.event.events.MotionUpdateEvent;
|
|
||||||
import com.baseband.client.event.events.MoveEvent;
|
|
||||||
import com.baseband.client.registry.Configuration;
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.entity.AbstractClientPlayer;
|
import net.minecraft.client.entity.AbstractClientPlayer;
|
||||||
|
@ -55,24 +52,19 @@ public class MixinEntityPlayerSP extends AbstractClientPlayer {
|
||||||
|
|
||||||
@Inject(method = {"onUpdateWalkingPlayer"}, at = {@At(value = "HEAD")})
|
@Inject(method = {"onUpdateWalkingPlayer"}, at = {@At(value = "HEAD")})
|
||||||
private void preMotion(CallbackInfo info) {
|
private void preMotion(CallbackInfo info) {
|
||||||
Configuration.publish(new MotionUpdateEvent.Pre());
|
MixinProxy.publishPreMotionEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Inject(method = {"onUpdateWalkingPlayer"}, at = {@At(value = "RETURN")})
|
@Inject(method = {"onUpdateWalkingPlayer"}, at = {@At(value = "RETURN")})
|
||||||
private void postMotion(CallbackInfo info) {
|
private void postMotion(CallbackInfo info) {
|
||||||
Configuration.publish(new MotionUpdateEvent.Post());
|
MixinProxy.publishPostMotionEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Inject(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/entity/AbstractClientPlayer;move(Lnet/minecraft/entity/MoverType;DDD)V"), cancellable = true)
|
@Inject(method = "move", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/entity/AbstractClientPlayer;move(Lnet/minecraft/entity/MoverType;DDD)V"), cancellable = true)
|
||||||
public void move(MoverType p_70091_1_, double p_70091_2_, double p_70091_4_, double p_70091_6_, CallbackInfo ci) {
|
public void move(MoverType p_70091_1_, double p_70091_2_, double p_70091_4_, double p_70091_6_, CallbackInfo ci) {
|
||||||
MoveEvent event = new MoveEvent(p_70091_1_, p_70091_2_, p_70091_4_, p_70091_6_);
|
MixinProxy.onMove(this, p_70091_1_, p_70091_2_, p_70091_4_, p_70091_6_, ci);
|
||||||
if(!Configuration.publish(event).isCancelled())
|
|
||||||
super.move(event.type, event.x, event.y, event.z);
|
|
||||||
ci.cancel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
import com.baseband.client.feature.Features;
|
|
||||||
import com.baseband.client.feature.render.NoRender;
|
|
||||||
import net.minecraft.client.multiplayer.WorldClient;
|
import net.minecraft.client.multiplayer.WorldClient;
|
||||||
import net.minecraft.client.renderer.EntityRenderer;
|
import net.minecraft.client.renderer.EntityRenderer;
|
||||||
import net.minecraft.util.math.RayTraceResult;
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
|
@ -17,15 +15,13 @@ public class MixinEntityRender {
|
||||||
|
|
||||||
@Redirect(method = "orientCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/WorldClient;rayTraceBlocks(Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/util/math/RayTraceResult;"))
|
@Redirect(method = "orientCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/WorldClient;rayTraceBlocks(Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/util/math/Vec3d;)Lnet/minecraft/util/math/RayTraceResult;"))
|
||||||
public RayTraceResult rayTraceBlocks(WorldClient world, Vec3d start, Vec3d end) {
|
public RayTraceResult rayTraceBlocks(WorldClient world, Vec3d start, Vec3d end) {
|
||||||
if (Features.isFeatureEnabled(NoRender.class) && Features.getFeature(NoRender.class).cameraClip)
|
return MixinProxy.get3rdPersonCameraDistance(world, start, end);
|
||||||
return null;
|
|
||||||
else
|
|
||||||
return world.rayTraceBlocks(start, end);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Inject(method = "hurtCameraEffect", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "hurtCameraEffect", at = @At("HEAD"), cancellable = true)
|
||||||
public void hurtCameraEffect(float ticks, CallbackInfo info) {
|
public void hurtCameraEffect(float ticks, CallbackInfo info) {
|
||||||
if (Features.isFeatureEnabled(NoRender.class) && Features.getFeature(NoRender.class).hurtcam) info.cancel();
|
MixinProxy.onHurtCam(info);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
|
import com.baseband.client.BaseBand;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import io.netty.channel.ChannelHandler;
|
import io.netty.channel.ChannelHandler;
|
||||||
import net.minecraftforge.fml.common.ModContainer;
|
import net.minecraftforge.fml.common.ModContainer;
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
import com.baseband.client.feature.Features;
|
|
||||||
import com.baseband.client.feature.world.AutoSignText;
|
|
||||||
import net.minecraft.client.gui.inventory.GuiEditSign;
|
import net.minecraft.client.gui.inventory.GuiEditSign;
|
||||||
import net.minecraft.tileentity.TileEntitySign;
|
import net.minecraft.tileentity.TileEntitySign;
|
||||||
import net.minecraft.util.text.TextComponentString;
|
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
@ -21,12 +18,7 @@ public class MixinGuiEditSign {
|
||||||
|
|
||||||
@Inject(method = "initGui", at = @At("RETURN"))
|
@Inject(method = "initGui", at = @At("RETURN"))
|
||||||
public void initGui(CallbackInfo callback) {
|
public void initGui(CallbackInfo callback) {
|
||||||
if(Features.isFeatureEnabled(AutoSignText.class)) {
|
MixinProxy.onEditSign(tileSign);
|
||||||
AutoSignText autoSignText = Features.getFeature(AutoSignText.class);
|
|
||||||
tileSign.signText[0] = new TextComponentString(autoSignText.signTextFirst);
|
|
||||||
tileSign.signText[1] = new TextComponentString(autoSignText.signTextSecond);
|
|
||||||
tileSign.signText[2] = new TextComponentString(autoSignText.signTextThird);
|
|
||||||
tileSign.signText[3] = new TextComponentString(autoSignText.signTextFourth);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
import com.baseband.client.feature.Features;
|
|
||||||
import com.baseband.client.feature.chat.ChatExtras;
|
|
||||||
import net.minecraft.client.gui.ChatLine;
|
import net.minecraft.client.gui.ChatLine;
|
||||||
import net.minecraft.client.gui.Gui;
|
import net.minecraft.client.gui.Gui;
|
||||||
import net.minecraft.client.gui.GuiNewChat;
|
import net.minecraft.client.gui.GuiNewChat;
|
||||||
|
@ -15,30 +13,16 @@ import java.util.List;
|
||||||
public class MixinGuiNewChat extends Gui {
|
public class MixinGuiNewChat extends Gui {
|
||||||
@Redirect(method = "drawChat", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiNewChat;drawRect(IIIII)V"))
|
@Redirect(method = "drawChat", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiNewChat;drawRect(IIIII)V"))
|
||||||
private void drawRectHook(int left, int top, int right, int bottom, int color) {
|
private void drawRectHook(int left, int top, int right, int bottom, int color) {
|
||||||
if(!Features.isFeatureEnabled(ChatExtras.class)) {
|
MixinProxy.chatDrawRect(left, top, right, bottom, color);
|
||||||
Gui.drawRect(left, top, right, bottom, color);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatExtras chatExtras = Features.getFeature(ChatExtras.class);
|
|
||||||
Gui.drawRect(left, top, right, bottom, chatExtras.clearchat ? 0 : color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "setChatLine", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I", ordinal = 0, remap = false))
|
@Redirect(method = "setChatLine", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I", ordinal = 0, remap = false))
|
||||||
public int drawnChatLinesSize(List<ChatLine> list) {
|
public int drawnChatLinesSize(List<ChatLine> list) {
|
||||||
if(!Features.isFeatureEnabled(ChatExtras.class))
|
return MixinProxy.chatLinesSizeHook(list);
|
||||||
return list.size();
|
|
||||||
|
|
||||||
ChatExtras chatExtras = Features.getFeature(ChatExtras.class);
|
|
||||||
return chatExtras.infinitechat ? -2147483647 : list.size();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Redirect(method = "setChatLine", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I", ordinal = 2, remap = false))
|
@Redirect(method = "setChatLine", at = @At(value = "INVOKE", target = "Ljava/util/List;size()I", ordinal = 2, remap = false))
|
||||||
public int chatLinesSize(List<ChatLine> list) {
|
public int chatLinesSize(List<ChatLine> list) {
|
||||||
if(!Features.isFeatureEnabled(ChatExtras.class))
|
return MixinProxy.chatLinesSizeHook(list);
|
||||||
return list.size();
|
|
||||||
|
|
||||||
ChatExtras chatExtras = Features.getFeature(ChatExtras.class);
|
|
||||||
return chatExtras.infinitechat ? -2147483647 : list.size();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
|
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(Minecraft.class)
|
||||||
|
public class MixinMinecraft {
|
||||||
|
@Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;checkGLError(Ljava/lang/String;)V", ordinal = 1, shift = At.Shift.AFTER))
|
||||||
|
private void onInit(CallbackInfo ci) {
|
||||||
|
MixinProxy.minecraftOnInit();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
import com.baseband.client.event.events.PacketEvent;
|
|
||||||
import com.baseband.client.registry.Configuration;
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import net.minecraft.network.NetworkManager;
|
import net.minecraft.network.NetworkManager;
|
||||||
import net.minecraft.network.Packet;
|
import net.minecraft.network.Packet;
|
||||||
|
@ -15,13 +13,12 @@ public class MixinNetworkManager {
|
||||||
|
|
||||||
@Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
|
@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) {
|
public void channelRead0(ChannelHandlerContext p_channelRead0_1_, Packet<?> p_channelRead0_2_, CallbackInfo ci) {
|
||||||
if (Configuration.publish(new PacketEvent.Receive(p_channelRead0_2_)).isCancelled())
|
MixinProxy.onPacketReceive(p_channelRead0_2_, ci);
|
||||||
ci.cancel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
|
||||||
public void channelRead0(Packet<?> packetIn, CallbackInfo ci) {
|
public void channelRead0(Packet<?> packetIn, CallbackInfo ci) {
|
||||||
if (Configuration.publish(new PacketEvent.Send(packetIn)).isCancelled())
|
MixinProxy.onPacketSend(packetIn, ci);
|
||||||
ci.cancel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
import com.baseband.client.BaseBand;
|
|
||||||
import com.baseband.client.event.events.DamageBlockEvent;
|
|
||||||
import net.minecraft.client.multiplayer.PlayerControllerMP;
|
import net.minecraft.client.multiplayer.PlayerControllerMP;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
@ -15,10 +13,7 @@ public class MixinPlayerControllerMP {
|
||||||
|
|
||||||
@Inject(method = { "onPlayerDamageBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/EnumFacing;)Z" }, at = { @At("HEAD") }, cancellable = true)
|
@Inject(method = { "onPlayerDamageBlock(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/EnumFacing;)Z" }, at = { @At("HEAD") }, cancellable = true)
|
||||||
private void onPlayerDamageBlock(final BlockPos posBlock, final EnumFacing directionFacing, final CallbackInfoReturnable<Boolean> callbackInfoReturnable) {
|
private void onPlayerDamageBlock(final BlockPos posBlock, final EnumFacing directionFacing, final CallbackInfoReturnable<Boolean> callbackInfoReturnable) {
|
||||||
DamageBlockEvent event = new DamageBlockEvent(posBlock, directionFacing);
|
MixinProxy.onPlayerDamageBlock(posBlock, directionFacing, callbackInfoReturnable);
|
||||||
BaseBand.eventManager.publish(event);
|
|
||||||
if (event.isCancelled()) {
|
|
||||||
callbackInfoReturnable.setReturnValue(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
120
Client/src/main/java/com/baseband/client/mixins/MixinProxy.java
Normal file
120
Client/src/main/java/com/baseband/client/mixins/MixinProxy.java
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
|
import com.baseband.client.BaseBand;
|
||||||
|
import com.baseband.client.event.events.DamageBlockEvent;
|
||||||
|
import com.baseband.client.event.events.MotionUpdateEvent;
|
||||||
|
import com.baseband.client.event.events.MoveEvent;
|
||||||
|
import com.baseband.client.event.events.PacketEvent;
|
||||||
|
import com.baseband.client.feature.Features;
|
||||||
|
import com.baseband.client.feature.chat.ChatExtras;
|
||||||
|
import com.baseband.client.feature.client.Client;
|
||||||
|
import com.baseband.client.feature.render.NoRender;
|
||||||
|
import com.baseband.client.feature.world.AutoSignText;
|
||||||
|
import com.baseband.client.util.net.ScreenshotHelper;
|
||||||
|
import net.minecraft.client.entity.AbstractClientPlayer;
|
||||||
|
import net.minecraft.client.gui.ChatLine;
|
||||||
|
import net.minecraft.client.gui.Gui;
|
||||||
|
import net.minecraft.client.multiplayer.WorldClient;
|
||||||
|
import net.minecraft.client.shader.Framebuffer;
|
||||||
|
import net.minecraft.entity.MoverType;
|
||||||
|
import net.minecraft.network.Packet;
|
||||||
|
import net.minecraft.tileentity.TileEntitySign;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.ScreenShotHelper;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
import net.minecraft.util.text.TextComponentString;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MixinProxy {
|
||||||
|
public static void saveScreenshot(int n, int n2, Framebuffer framebuffer) {
|
||||||
|
if(!Features.isFeatureEnabled(Client.class))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Client client = Features.getFeature(Client.class);
|
||||||
|
if (client.screenshotUpload) {
|
||||||
|
ScreenshotHelper eventClientScreenShot = new ScreenshotHelper(ScreenShotHelper.createScreenshot(n, n2, framebuffer));
|
||||||
|
eventClientScreenShot.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onPlayerDamageBlock(BlockPos posBlock, EnumFacing directionFacing, CallbackInfoReturnable<Boolean> callbackInfoReturnable) {
|
||||||
|
DamageBlockEvent event = new DamageBlockEvent(posBlock, directionFacing);
|
||||||
|
BaseBand.eventManager.publish(event);
|
||||||
|
if (event.isCancelled()) {
|
||||||
|
callbackInfoReturnable.setReturnValue(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onPacketReceive(Packet<?> p_channelRead0_2_, CallbackInfo ci) {
|
||||||
|
if (BaseBand.publish(new PacketEvent.Receive(p_channelRead0_2_)).isCancelled())
|
||||||
|
ci.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onPacketSend(Packet<?> packetIn, CallbackInfo ci) {
|
||||||
|
if (BaseBand.publish(new PacketEvent.Send(packetIn)).isCancelled())
|
||||||
|
ci.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void chatDrawRect(int left, int top, int right, int bottom, int color) {
|
||||||
|
if(!Features.isFeatureEnabled(ChatExtras.class)) {
|
||||||
|
Gui.drawRect(left, top, right, bottom, color);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatExtras chatExtras = Features.getFeature(ChatExtras.class);
|
||||||
|
Gui.drawRect(left, top, right, bottom, chatExtras.clearchat ? 0 : color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int chatLinesSizeHook(List<ChatLine> list) {
|
||||||
|
if(!Features.isFeatureEnabled(ChatExtras.class))
|
||||||
|
return list.size();
|
||||||
|
|
||||||
|
ChatExtras chatExtras = Features.getFeature(ChatExtras.class);
|
||||||
|
return chatExtras.infinitechat ? -2147483647 : list.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onEditSign(TileEntitySign tileSign) {
|
||||||
|
if(Features.isFeatureEnabled(AutoSignText.class)) {
|
||||||
|
AutoSignText autoSignText = Features.getFeature(AutoSignText.class);
|
||||||
|
tileSign.signText[0] = new TextComponentString(autoSignText.signTextFirst);
|
||||||
|
tileSign.signText[1] = new TextComponentString(autoSignText.signTextSecond);
|
||||||
|
tileSign.signText[2] = new TextComponentString(autoSignText.signTextThird);
|
||||||
|
tileSign.signText[3] = new TextComponentString(autoSignText.signTextFourth);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RayTraceResult get3rdPersonCameraDistance(WorldClient world, Vec3d start, Vec3d end) {
|
||||||
|
if (Features.isFeatureEnabled(NoRender.class) && Features.getFeature(NoRender.class).cameraClip)
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return world.rayTraceBlocks(start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onHurtCam(CallbackInfo info) {
|
||||||
|
if (Features.isFeatureEnabled(NoRender.class) && Features.getFeature(NoRender.class).hurtcam) info.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void publishPreMotionEvent() {
|
||||||
|
BaseBand.publish(new MotionUpdateEvent.Pre());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void publishPostMotionEvent() {
|
||||||
|
BaseBand.publish(new MotionUpdateEvent.Post());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onMove(AbstractClientPlayer p, MoverType p_70091_1_, double p_70091_2_, double p_70091_4_, double p_70091_6_, CallbackInfo ci) {
|
||||||
|
MoveEvent event = new MoveEvent(p_70091_1_, p_70091_2_, p_70091_4_, p_70091_6_);
|
||||||
|
if(!BaseBand.publish(event).isCancelled())
|
||||||
|
p.move(event.type, event.x, event.y, event.z);
|
||||||
|
ci.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void minecraftOnInit() {
|
||||||
|
BaseBand.onInit();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,6 @@
|
||||||
package com.baseband.client.mixins;
|
package com.baseband.client.mixins;
|
||||||
|
|
||||||
|
|
||||||
import com.baseband.client.feature.Features;
|
|
||||||
import com.baseband.client.feature.client.Client;
|
|
||||||
import com.baseband.client.util.net.ScreenshotHelper;
|
|
||||||
import net.minecraft.client.shader.Framebuffer;
|
import net.minecraft.client.shader.Framebuffer;
|
||||||
import net.minecraft.util.ScreenShotHelper;
|
import net.minecraft.util.ScreenShotHelper;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
@ -17,13 +14,7 @@ import java.io.File;
|
||||||
public class MixinScreenshotHelper {
|
public class MixinScreenshotHelper {
|
||||||
@Inject(method = {"saveScreenshot(Ljava/io/File;Ljava/lang/String;IILnet/minecraft/client/shader/Framebuffer;)Lnet/minecraft/util/text/ITextComponent;"}, at = {@At(value = "HEAD")})
|
@Inject(method = {"saveScreenshot(Ljava/io/File;Ljava/lang/String;IILnet/minecraft/client/shader/Framebuffer;)Lnet/minecraft/util/text/ITextComponent;"}, at = {@At(value = "HEAD")})
|
||||||
private static void saveScreenshot(File file, String string, int n, int n2, Framebuffer framebuffer, CallbackInfoReturnable<?> callbackInfoReturnable) {
|
private static void saveScreenshot(File file, String string, int n, int n2, Framebuffer framebuffer, CallbackInfoReturnable<?> callbackInfoReturnable) {
|
||||||
if(!Features.isFeatureEnabled(Client.class))
|
MixinProxy.saveScreenshot(n, n2, framebuffer);
|
||||||
return;
|
|
||||||
|
|
||||||
Client client = Features.getFeature(Client.class);
|
|
||||||
if (client.screenshotUpload) {
|
|
||||||
ScreenshotHelper eventClientScreenShot = new ScreenshotHelper(ScreenShotHelper.createScreenshot(n, n2, framebuffer));
|
|
||||||
eventClientScreenShot.start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,9 +1,6 @@
|
||||||
package com.baseband.client.registry;
|
package com.baseband.client.registry;
|
||||||
|
|
||||||
import com.baseband.client.BaseBand;
|
|
||||||
import com.baseband.client.Setup;
|
import com.baseband.client.Setup;
|
||||||
import com.baseband.client.event.Event;
|
|
||||||
import com.baseband.client.event.remote.RemoteEvent;
|
|
||||||
import com.baseband.client.feature.Feature;
|
import com.baseband.client.feature.Feature;
|
||||||
import com.baseband.client.util.adapt.FieldFinder;
|
import com.baseband.client.util.adapt.FieldFinder;
|
||||||
import de.tudbut.parsing.TCN;
|
import de.tudbut.parsing.TCN;
|
||||||
|
@ -51,14 +48,6 @@ public class Configuration {
|
||||||
return updater;
|
return updater;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends Event> T publish(T event) {
|
|
||||||
if(event instanceof RemoteEvent)
|
|
||||||
BaseBand.remoteEventManager.publish((RemoteEvent) event);
|
|
||||||
else
|
|
||||||
BaseBand.eventManager.publish(event);
|
|
||||||
return event;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void cloneConfigFrom(TCN fullDB) {
|
public static void cloneConfigFrom(TCN fullDB) {
|
||||||
boolean[] wasEnabled = new boolean[features.length];
|
boolean[] wasEnabled = new boolean[features.length];
|
||||||
for (int i = 0; i < features.length; i++) {
|
for (int i = 0; i < features.length; i++) {
|
||||||
|
|
|
@ -7,9 +7,9 @@ import baritone.api.process.IBaritoneProcess;
|
||||||
import baritone.api.process.ICustomGoalProcess;
|
import baritone.api.process.ICustomGoalProcess;
|
||||||
import baritone.api.process.PathingCommand;
|
import baritone.api.process.PathingCommand;
|
||||||
import baritone.api.process.PathingCommandType;
|
import baritone.api.process.PathingCommandType;
|
||||||
|
import com.baseband.client.BaseBand;
|
||||||
import com.baseband.client.Setup;
|
import com.baseband.client.Setup;
|
||||||
import com.baseband.client.event.events.BaritoneEvent;
|
import com.baseband.client.event.events.BaritoneEvent;
|
||||||
import com.baseband.client.registry.Configuration;
|
|
||||||
import com.baseband.client.util.interact.Chat;
|
import com.baseband.client.util.interact.Chat;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ public class BaritoneManager {
|
||||||
@Override
|
@Override
|
||||||
public boolean isActive() {
|
public boolean isActive() {
|
||||||
BaritoneEvent event = new BaritoneEvent();
|
BaritoneEvent event = new BaritoneEvent();
|
||||||
Configuration.publish(event);
|
BaseBand.publish(event);
|
||||||
return event.isCancelled();
|
return event.isCancelled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ import com.baseband.client.BaseBand;
|
||||||
public class LoadHandler {
|
public class LoadHandler {
|
||||||
|
|
||||||
public static void loaded() {
|
public static void loaded() {
|
||||||
BaseBand.LOGGER.info("We have been loaded!");
|
|
||||||
try {
|
try {
|
||||||
Class.forName("com.baseband.launcher.Tweaker").getDeclaredMethod("loaded", Class.class).invoke(null, BaseBand.class);
|
Class.forName("com.baseband.launcher.Tweaker").getDeclaredMethod("loaded", Class.class).invoke(null, BaseBand.class);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
"ISPacketExplosion",
|
"ISPacketExplosion",
|
||||||
"ITimer",
|
"ITimer",
|
||||||
"IPlayerControllerMP",
|
"IPlayerControllerMP",
|
||||||
|
"MixinMinecraft",
|
||||||
"MixinEntityPlayerSP",
|
"MixinEntityPlayerSP",
|
||||||
"MixinEntityRender",
|
"MixinEntityRender",
|
||||||
"MixinFMLNetworkRegistry",
|
"MixinFMLNetworkRegistry",
|
||||||
|
|
|
@ -41,7 +41,7 @@ minecraft {
|
||||||
|
|
||||||
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
|
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
|
||||||
property 'forge.logging.console.level', 'debug'
|
property 'forge.logging.console.level', 'debug'
|
||||||
jvmArgs = ["-Xmx700M"]
|
jvmArgs = ["-Dfml.coreMods.load=com.baseband.launcher.Tweaker", "-Xmx700M"]
|
||||||
args = ["-tweakClass", "com.baseband.launcher.Tweaker"]
|
args = ["-tweakClass", "com.baseband.launcher.Tweaker"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ import com.baseband.launcher.classloader.CustomClassLoader;
|
||||||
import com.baseband.launcher.util.RSAKey;
|
import com.baseband.launcher.util.RSAKey;
|
||||||
import com.baseband.launcher.util.Util;
|
import com.baseband.launcher.util.Util;
|
||||||
import de.tudbut.tools.encryption.RawKey;
|
import de.tudbut.tools.encryption.RawKey;
|
||||||
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||||
import oshi.SystemInfo;
|
import oshi.SystemInfo;
|
||||||
import oshi.hardware.Processor;
|
import oshi.hardware.Processor;
|
||||||
|
|
||||||
|
@ -18,7 +20,6 @@ import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
@ -26,10 +27,16 @@ import java.util.Base64;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Mod(modid = "baseband")
|
||||||
public class Loader implements Util {
|
public class Loader implements Util {
|
||||||
|
|
||||||
|
@Mod.EventHandler
|
||||||
|
public void onInit(FMLPostInitializationEvent event) {
|
||||||
|
// TODO FIND OUT WHY TF THIS NEVER RUNS
|
||||||
|
System.out.println("INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT INIT ");
|
||||||
|
}
|
||||||
|
|
||||||
public static Class<?> baseBandClass;
|
public static Class<?> baseBandClass;
|
||||||
public static Object baseBand;
|
|
||||||
|
|
||||||
public enum Response {
|
public enum Response {
|
||||||
OK,
|
OK,
|
||||||
|
@ -47,7 +54,7 @@ public class Loader implements Util {
|
||||||
|
|
||||||
private static CustomClassLoader classLoader;
|
private static CustomClassLoader classLoader;
|
||||||
|
|
||||||
public Loader() {
|
public static void run() {
|
||||||
try(Socket client = new Socket("baseband.lol", 40000)) {
|
try(Socket client = new Socket("baseband.lol", 40000)) {
|
||||||
TypedInputStream inputStream = new TypedInputStream(client.getInputStream());
|
TypedInputStream inputStream = new TypedInputStream(client.getInputStream());
|
||||||
TypedOutputStream outputStream = new TypedOutputStream(client.getOutputStream());
|
TypedOutputStream outputStream = new TypedOutputStream(client.getOutputStream());
|
||||||
|
@ -70,6 +77,7 @@ public class Loader implements Util {
|
||||||
LOGGER.info("BaseBand downloaded: " + data.size() + " classes.");
|
LOGGER.info("BaseBand downloaded: " + data.size() + " classes.");
|
||||||
classLoader = new CustomClassLoader(data);
|
classLoader = new CustomClassLoader(data);
|
||||||
classLoader.inject();
|
classLoader.inject();
|
||||||
|
classLoader.informClient();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.fatal("BaseBand failed to (down)load.");
|
LOGGER.fatal("BaseBand failed to (down)load.");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -87,26 +95,9 @@ public class Loader implements Util {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void informClient() {
|
|
||||||
classLoader.informClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void loaded(Class<?> baseBandClass) {
|
public static void loaded(Class<?> baseBandClass) {
|
||||||
LOGGER.info("BaseBand was loaded successfully.");
|
LOGGER.info("BaseBand was loaded successfully.");
|
||||||
Loader.baseBandClass = baseBandClass;
|
Loader.baseBandClass = baseBandClass;
|
||||||
try {
|
|
||||||
baseBand = Arrays.stream(baseBandClass.getDeclaredFields()).filter(x -> x.getType() == baseBandClass).findFirst().get().get(null);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void onInit() {
|
|
||||||
try {
|
|
||||||
Arrays.stream(baseBandClass.getDeclaredMethods()).filter(x -> (x.getModifiers() & Modifier.STATIC) == 0).findFirst().get().invoke(baseBand);
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TCN getData() throws Exception {
|
private static TCN getData() throws Exception {
|
||||||
|
|
|
@ -7,20 +7,22 @@ package com.baseband.launcher;
|
||||||
|
|
||||||
import net.minecraft.launchwrapper.ITweaker;
|
import net.minecraft.launchwrapper.ITweaker;
|
||||||
import net.minecraft.launchwrapper.LaunchClassLoader;
|
import net.minecraft.launchwrapper.LaunchClassLoader;
|
||||||
|
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.relauncher.IFMLLoadingPlugin;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
|
||||||
import org.spongepowered.asm.launch.MixinBootstrap;
|
|
||||||
import org.spongepowered.asm.launch.MixinTweaker;
|
import org.spongepowered.asm.launch.MixinTweaker;
|
||||||
import org.spongepowered.asm.mixin.MixinEnvironment;
|
import org.spongepowered.asm.mixin.MixinEnvironment;
|
||||||
import org.spongepowered.asm.mixin.Mixins;
|
import org.spongepowered.asm.mixin.Mixins;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@Mod(modid = "baseband")
|
@IFMLLoadingPlugin.Name("baseband")
|
||||||
public class Tweaker implements ITweaker {
|
@IFMLLoadingPlugin.MCVersion(ForgeVersion.mcVersion)
|
||||||
|
public class Tweaker implements ITweaker, IFMLLoadingPlugin {
|
||||||
|
|
||||||
public static void loaded(Class<?> baseBandClass) {
|
public static void loaded(Class<?> baseBandClass) {
|
||||||
Loader.loaded(baseBandClass);
|
Loader.loaded(baseBandClass);
|
||||||
|
@ -28,16 +30,6 @@ public class Tweaker implements ITweaker {
|
||||||
|
|
||||||
private final MixinTweaker wrapped;
|
private final MixinTweaker wrapped;
|
||||||
|
|
||||||
@Mod.EventHandler
|
|
||||||
public void onPreInit(FMLPreInitializationEvent event) {
|
|
||||||
Loader.informClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Mod.EventHandler
|
|
||||||
public void onInit(FMLPostInitializationEvent event) {
|
|
||||||
Loader.onInit();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Tweaker() {
|
public Tweaker() {
|
||||||
wrapped = new MixinTweaker();
|
wrapped = new MixinTweaker();
|
||||||
}
|
}
|
||||||
|
@ -49,8 +41,11 @@ public class Tweaker implements ITweaker {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void injectIntoClassLoader(LaunchClassLoader launchClassLoader) {
|
public void injectIntoClassLoader(LaunchClassLoader launchClassLoader) {
|
||||||
new Loader();
|
Loader.run();
|
||||||
wrapped.injectIntoClassLoader(launchClassLoader);
|
wrapped.injectIntoClassLoader(launchClassLoader);
|
||||||
|
|
||||||
|
Mixins.addConfiguration("mixins.baseband.json");
|
||||||
|
MixinEnvironment.getDefaultEnvironment().setObfuscationContext("searge");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -63,4 +58,33 @@ public class Tweaker implements ITweaker {
|
||||||
public String[] getLaunchArguments() {
|
public String[] getLaunchArguments() {
|
||||||
return wrapped.getLaunchArguments();
|
return wrapped.getLaunchArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getASMTransformerClass() {
|
||||||
|
return new String[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getModContainerClass() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public String getSetupClass() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void injectData(Map<String, Object> data) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAccessTransformerClass() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
package com.baseband.launcher.classloader;
|
package com.baseband.launcher.classloader;
|
||||||
|
|
||||||
import com.baseband.launcher.url.URLWrapper;
|
import com.baseband.launcher.url.URLWrapper;
|
||||||
import de.tudbut.security.DataKeeper;
|
import de.tudbut.security.*;
|
||||||
import de.tudbut.security.PermissionManager;
|
|
||||||
import de.tudbut.security.StrictnessBuilder;
|
|
||||||
import de.tudbut.security.permissionmanager.CallClassRestriction;
|
import de.tudbut.security.permissionmanager.CallClassRestriction;
|
||||||
import de.tudbut.security.permissionmanager.ClassLoaderRestriction;
|
import de.tudbut.security.permissionmanager.ClassLoaderRestriction;
|
||||||
import de.tudbut.security.permissionmanager.PermissionOR;
|
import de.tudbut.security.permissionmanager.PermissionOR;
|
||||||
|
import de.tudbut.tools.ReflectUtil;
|
||||||
import net.minecraft.launchwrapper.Launch;
|
import net.minecraft.launchwrapper.Launch;
|
||||||
import com.baseband.launcher.util.Util;
|
import com.baseband.launcher.util.Util;
|
||||||
import org.spongepowered.asm.mixin.transformer.MixinTransformer;
|
import org.spongepowered.asm.mixin.transformer.MixinTransformer;
|
||||||
|
@ -28,8 +27,10 @@ public class CustomClassLoader extends ClassLoader implements Util {
|
||||||
private final DataKeeper<PermissionManager> mixinPermissionManager;
|
private final DataKeeper<PermissionManager> mixinPermissionManager;
|
||||||
|
|
||||||
public CustomClassLoader(Map<String, byte[]> data) {
|
public CustomClassLoader(Map<String, byte[]> data) {
|
||||||
|
AccessKiller.killReflectionFor(CustomClassLoader.class, CustomMixinServer.class);
|
||||||
|
|
||||||
this.binaryKeeper = new DataKeeper<>(
|
this.binaryKeeper = new DataKeeper<>(
|
||||||
new PermissionOR(new ClassLoaderRestriction(this), new CallClassRestriction(CustomClassLoader.class, CustomClassLoader.class)),
|
new PermissionOR(new ClassLoaderRestriction(this), new CallClassRestriction(CustomClassLoader.class, CustomClassLoader.CustomMixinServer.class)),
|
||||||
StrictnessBuilder.create()
|
StrictnessBuilder.create()
|
||||||
.property("Restriction.ClassLoader.RestrictLambda", true)
|
.property("Restriction.ClassLoader.RestrictLambda", true)
|
||||||
.property("Restriction.ClassLoader.MaxDistance", 5)
|
.property("Restriction.ClassLoader.MaxDistance", 5)
|
||||||
|
@ -41,9 +42,9 @@ public class CustomClassLoader extends ClassLoader implements Util {
|
||||||
PermissionManager mixinRestriction = new CallClassRestriction(MixinTransformer.class);
|
PermissionManager mixinRestriction = new CallClassRestriction(MixinTransformer.class);
|
||||||
mixinRestriction.killReflection();
|
mixinRestriction.killReflection();
|
||||||
this.mixinPermissionManager = new DataKeeper<>(
|
this.mixinPermissionManager = new DataKeeper<>(
|
||||||
new CallClassRestriction(CustomClassLoader.class),
|
new CallClassRestriction(CustomClassLoader.CustomMixinServer.class),
|
||||||
StrictnessBuilder.create()
|
StrictnessBuilder.create()
|
||||||
.property("Restriction.CallClass.MaxDistance", 10)
|
.property("Restriction.CallClass.MaxDistance", 4)
|
||||||
.build(),
|
.build(),
|
||||||
mixinRestriction
|
mixinRestriction
|
||||||
);
|
);
|
||||||
|
@ -172,12 +173,24 @@ public class CustomClassLoader extends ClassLoader implements Util {
|
||||||
private byte[] getBytes(String name) {
|
private byte[] getBytes(String name) {
|
||||||
PermissionManager[] pm = new PermissionManager[1];
|
PermissionManager[] pm = new PermissionManager[1];
|
||||||
parent.mixinPermissionManager.access(x -> pm[0] = x.getValue());
|
parent.mixinPermissionManager.access(x -> pm[0] = x.getValue());
|
||||||
if(!name.startsWith("com/baseband/client/mixins") || !pm[0].checkCaller(parent.mixinPermissionManager.getStrictness()))
|
if(!name.replace('/', '.').startsWith("com.baseband.client.mixins") || !pm[0].checkCaller(new MixinStrictness()))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
final byte[][] bytes = {null};
|
final byte[][] bytes = {null};
|
||||||
parent.binaryKeeper.access(m -> bytes[0] = m.getValue().get(name));
|
parent.binaryKeeper.access(m -> bytes[0] = m.getValue().get(name.replace('.', '/') + ".class"));
|
||||||
return bytes[0];
|
return bytes[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class MixinStrictness implements Strictness {
|
||||||
|
@Override
|
||||||
|
public Object getRawProperty(String s) {
|
||||||
|
return s.equals("Restriction.CallClass.MaxDistance") ? 16 : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Strictness clone() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
mobf.sh
3
mobf.sh
|
@ -1,5 +1,8 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ignore. mobf currently breaks loading
|
||||||
|
exit
|
||||||
|
|
||||||
curl https://data.tudbut.de/mobf.jar > mobf.jar
|
curl https://data.tudbut.de/mobf.jar > mobf.jar
|
||||||
for file in "$@" ; do
|
for file in "$@" ; do
|
||||||
echo "$file"
|
echo "$file"
|
||||||
|
|
Loading…
Add table
Reference in a new issue