seppuku/src/main/java/me/rigamortis/seppuku/impl/module/misc/NoBiomeColorModule.java

136 lines
4.2 KiB
Java

package me.rigamortis.seppuku.impl.module.misc;
import me.rigamortis.seppuku.api.event.EventStageable;
import me.rigamortis.seppuku.api.event.player.EventPlayerUpdate;
import me.rigamortis.seppuku.api.event.world.EventFoliageColor;
import me.rigamortis.seppuku.api.event.world.EventGrassColor;
import me.rigamortis.seppuku.api.event.world.EventWaterColor;
import me.rigamortis.seppuku.api.module.Module;
import me.rigamortis.seppuku.api.value.Value;
import net.minecraft.client.Minecraft;
import team.stiff.pomelo.impl.annotated.handler.annotation.Listener;
import java.awt.*;
/**
* Author Seth
* 8/11/2019 @ 1:27 AM.
*/
public final class NoBiomeColorModule extends Module {
public final Value<Mode> mode = new Value<Mode>("Mode", new String[]{"Mode", "M"}, "Change between NoBiomeColor modes, Default to use vanilla colors, Custom to use specified RGB values.", Mode.DEFAULT);
private enum Mode {
DEFAULT, CUSTOM
}
public final Value<Color> color = new Value<Color>("CustomColor", new String[]{"customcolor", "color", "c"}, "Edit the custom biome color.", new Color(255, 255, 255));
private float prevRed;
private float prevGreen;
private float prevBlue;
private Mode prevMode;
public NoBiomeColorModule() {
super("NoBiomeColor", new String[]{"AntiBiomeColor", "NoBiomeC", "NoBiome"}, "Prevents the game from altering the color of foliage, water and grass in biomes.", "NONE", -1, ModuleType.RENDER);
}
@Override
public void onEnable() {
super.onEnable();
this.reload();
}
@Override
public void onDisable() {
super.onDisable();
this.reload();
}
@Override
public String getMetaData() {
return this.mode.getValue().name();
}
private void reload() {
final Minecraft mc = Minecraft.getMinecraft();
if (mc.world != null) {
mc.renderGlobal.markBlockRangeForRenderUpdate(
(int) mc.player.posX - 256,
(int) mc.player.posY - 256,
(int) mc.player.posZ - 256,
(int) mc.player.posX + 256,
(int) mc.player.posY + 256,
(int) mc.player.posZ + 256);
}
}
private int getHex() {
return (255 << 24) | (this.color.getValue().getRed() << 16) | (this.color.getValue().getGreen() << 8 | this.color.getValue().getBlue());
}
@Listener
public void onUpdate(EventPlayerUpdate event) {
if (event.getStage() == EventStageable.EventStage.PRE) {
if (this.prevRed != this.color.getValue().getRed()) {
this.prevRed = this.color.getValue().getRed();
this.reload();
}
if (this.prevGreen != this.color.getValue().getGreen()) {
this.prevGreen = this.color.getValue().getGreen();
this.reload();
}
if (this.prevBlue != this.color.getValue().getBlue()) {
this.prevBlue = this.color.getValue().getBlue();
this.reload();
}
if (this.prevMode != this.mode.getValue()) {
this.prevMode = this.mode.getValue();
this.reload();
}
}
}
@Listener
public void getGrassColor(EventGrassColor event) {
switch (this.mode.getValue()) {
case DEFAULT:
event.setColor(0x79c05a);
break;
case CUSTOM:
event.setColor(this.getHex());
break;
}
event.setCanceled(true);
}
@Listener
public void getFoliageColor(EventFoliageColor event) {
switch (this.mode.getValue()) {
case DEFAULT:
event.setColor(0x59ae30);
break;
case CUSTOM:
event.setColor(this.getHex());
break;
}
event.setCanceled(true);
}
@Listener
public void getWaterColor(EventWaterColor event) {
switch (this.mode.getValue()) {
case DEFAULT:
event.setColor(0x1E97F2);
break;
case CUSTOM:
event.setColor(this.getHex());
break;
}
event.setCanceled(true);
}
}