Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions src/main/java/io/github/arctanmc/arctan/ArctanClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,25 @@

package io.github.arctanmc.arctan;

import io.github.arctanmc.arctan.rpc.DiscordRPC;
import io.github.arctanmc.arctan.config.ArctanConfig;
import io.github.arctanmc.arctan.module.Module;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quiltmc.loader.api.ModContainer;
import org.quiltmc.loader.api.QuiltLoader;
import org.quiltmc.qsl.base.api.entrypoint.client.ClientModInitializer;

public class ArctanClient implements ClientModInitializer {
public static final String MOD_ID = "arctan";
public static final Logger LOGGER = LogManager.getLogger("ArctanClient");

public static final ArctanConfig CONFIG = ArctanConfig.load(QuiltLoader.getConfigDir().resolve(MOD_ID+ ".json"));
public static final boolean DEBUG = QuiltLoader.isDevelopmentEnvironment();

@Override
public void onInitializeClient(ModContainer mod) {
Module.loadAll();
LOGGER.info("Initialized");
DiscordRPC.init();
}
}
59 changes: 59 additions & 0 deletions src/main/java/io/github/arctanmc/arctan/config/ArctanConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package io.github.arctanmc.arctan.config;

import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Modifier;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import io.github.arctanmc.arctan.ArctanClient;
import it.unimi.dsi.fastutil.objects.Reference2BooleanOpenHashMap;

public class ArctanConfig {
private static final Gson GSON = new GsonBuilder()
.setPrettyPrinting()
.excludeFieldsWithModifiers(Modifier.PRIVATE)
.create();

private Path path;

public final Map<String, Boolean> enabledModules = new Reference2BooleanOpenHashMap<>();

public ArctanConfig() {}

public ArctanConfig(Path path) {
this.path = path;
}

public static ArctanConfig load(Path path) {
ArctanConfig config;

if (Files.exists(path)) {
try (FileReader reader = new FileReader(path.toFile())) {
config = GSON.fromJson(reader, ArctanConfig.class);
config.path = path;
} catch (IOException e) {
ArctanClient.LOGGER.error("Error while loading config. Reverting to defaults.", e);
config = new ArctanConfig(path);
}
} else {
config = new ArctanConfig(path);
}

try {
config.save();
} catch (IOException e) {
ArctanClient.LOGGER.error("Couldn't save config.", e);
}

return config;
}

public void save() throws IOException {
Files.writeString(path, GSON.toJson(this));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,20 @@
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

import io.github.arctanmc.arctan.module.Module;

@Mixin(GameRenderer.class)
public class BobHurtMixin {
/**
* @author Akashii_Kun
* @author Maximumpower55
*/
@Redirect(method = "bobHurt", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/LivingEntity;hurtDir:F"))
private float editHurtDirection(LivingEntity entity) {
return (float) (Mth.atan2(Mth.lerp(Minecraft.getInstance().getFrameTime(), entity.zo - entity.getZ(), entity.getZ()), Mth.lerp(Minecraft.getInstance().getFrameTime(), entity.xo - entity.getX(), entity.getX())) * (180D / Math.PI) - (double) entity.getYRot());
if (Module.DAMAGETILT.isEnabled()) {
return (float) (Mth.atan2(Mth.lerp(Minecraft.getInstance().getFrameTime(), entity.zo - entity.getZ(), entity.getZ()), Mth.lerp(Minecraft.getInstance().getFrameTime(), entity.xo - entity.getX(), entity.getX())) * (180D / Math.PI) - (double) entity.getYRot());
}

return entity.hurtDir;
}
}
38 changes: 38 additions & 0 deletions src/main/java/io/github/arctanmc/arctan/module/Module.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package io.github.arctanmc.arctan.module;

import io.github.arctanmc.arctan.ArctanClient;
import io.github.arctanmc.arctan.module.rpc.DiscordRPCModule;

/**
* @author Maximumpower55
*/
public interface Module {
static final Module DAMAGETILT = register(new SimpleModule("damagetilt"), true);
static final Module DISCORD_RPC = register(new DiscordRPCModule(), true);

private static Module register(Module module, boolean enabledByDefault) {
ArctanClient.CONFIG.enabledModules.putIfAbsent(module.getId(), enabledByDefault);

if (module.isEnabled()) module.onEnable();

try {
ArctanClient.CONFIG.save();
} catch (Exception e) {
//TODO: handle exception
}

return module;
}

// Had to make this because of class loading stuff.
static void loadAll() {}

String getId();

default void onEnable() {}
default void onDisable() {}

default boolean isEnabled() {
return ArctanClient.CONFIG.enabledModules.get(getId());
}
}
29 changes: 29 additions & 0 deletions src/main/java/io/github/arctanmc/arctan/module/SimpleModule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.github.arctanmc.arctan.module;

import io.github.arctanmc.arctan.ArctanClient;

/**
* @author Maximumpower55
*/
public class SimpleModule implements Module {
private final String id;

public SimpleModule(String id) {
this.id = id;
}

@Override
public void onEnable() {
if (ArctanClient.DEBUG) ArctanClient.LOGGER.info("{} Module Enabled.", id);
}

@Override
public void onDisable() {
if (ArctanClient.DEBUG) ArctanClient.LOGGER.info("{} Module Disabled.", id);
}

@Override
public String getId() {
return id;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,30 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

package io.github.arctanmc.arctan.rpc;
package io.github.arctanmc.arctan.module.rpc;

import com.jagrosh.discordipc.IPCClient;
import com.jagrosh.discordipc.IPCListener;
import com.jagrosh.discordipc.entities.DiscordBuild;
import com.jagrosh.discordipc.entities.RichPresence;
import com.jagrosh.discordipc.exceptions.NoDiscordClientException;
import io.github.arctanmc.arctan.ArctanClient;
import io.github.arctanmc.arctan.module.SimpleModule;
import net.minecraft.client.Minecraft;

import java.lang.invoke.MethodHandles;
import java.time.OffsetDateTime;

public class DiscordRPC {
public class DiscordRPCModule extends SimpleModule {
private IPCClient client;

public DiscordRPCModule() {
super("rpc");
}

@Override
public void onEnable() {
client = new IPCClient(947514926589693983L);

public static void init() {
IPCClient client = new IPCClient(947514926589693983L);
client.setListener(new IPCListener() {
@Override
public void onReady(IPCClient client) {
Expand All @@ -44,12 +51,22 @@ public void onReady(IPCClient client) {
client.sendRichPresence(builder.build());
}
});

try {
client.connect(DiscordBuild.ANY);
ArctanClient.LOGGER.info("Connected to Discord");
} catch (NoDiscordClientException | RuntimeException e) {
ArctanClient.LOGGER.info("No Discord Client found");
}

super.onEnable();
}

@Override
public void onDisable() {
client.close();
client = null;

super.onDisable();
}
}