Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.IOException;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Optional;
- import org.lwjgl.input.Keyboard;
- import com.google.common.base.Predicate;
- import net.minecraft.client.Minecraft;
- import net.minecraft.client.gui.GuiScreen;
- import net.minecraft.client.gui.ScaledResolution;
- public class HUDConfigScreen extends GuiScreen {
- private final HashMap<IRenderer, ScreenPosition> renderes = new HashMap<IRenderer, ScreenPosition>();
- private Optional<IRenderer> selectedRenderer = Optional.empty();
- private int prevX, prevY;
- public HUDConfigScreen(HUDManager api) {
- Collection<IRenderer> registerdRenderers = api.getRegisteredRenders();
- for(IRenderer ren : registerdRenderers) {
- if(!ren.isEnabled()) {
- continue;
- }
- ScreenPosition pos = ren.load();
- if(pos == null) {
- pos = ScreenPosition.fromRelativePosition(0.5, 0.5);
- }
- adjustBounds(ren, pos);
- this.renderes.put(ren, pos);
- }
- }
- @Override
- public void drawScreen(int mouseX, int mouseY, float partailTicks) {
- super.drawDefaultBackground();
- final float zBackup = this.zLevel;
- this.zLevel = 200;
- this.drawHollowRect(0, 0, this.width - 1, this.height - 1, 0xFFFF0000);
- for(IRenderer renderer : renderes.keySet()) {
- ScreenPosition pos = renderes.get(renderer);
- renderer.renderDummy(pos);
- this.drawHollowRect(pos.getAbsoluteX(), pos.getAbsoluteY(), renderer.getWidth(), renderer.getHeight(), 0xFF00FFFF);
- }
- this.zLevel = zBackup;
- }
- private void drawHollowRect(int x, int y, int w, int h, int color) {
- this.drawHorizontalLine(x, x + w, y, color);
- this.drawHorizontalLine(x, x + w, y + h, color);
- this.drawVerticalLine(x, y + h, y, color);
- this.drawVerticalLine(x + w, y + h, y, color);
- }
- @Override
- protected void keyTyped(char typedChar, int keyCode) throws IOException {
- if(keyCode == Keyboard.KEY_ESCAPE) {
- renderes.entrySet().forEach((entry) -> {
- entry.getKey().save(entry.getValue());
- });
- this.mc.displayGuiScreen(null);
- }
- }
- @Override
- protected void mouseClickMove(int x, int y, int button, long time) {
- if(selectedRenderer.isPresent()) {
- moveSelectedRenderBy(x - prevX, y - prevY);
- }
- this.prevX = x;
- this.prevY = y;
- }
- private void moveSelectedRenderBy(int offsetX, int offsetY) {
- IRenderer renderer = selectedRenderer.get();
- ScreenPosition pos = renderes.get(renderer);
- pos.setAbsolute(pos.getAbsoluteX() + offsetX, pos.getAbsoluteY() + offsetY);
- adjustBounds(renderer, pos);
- }
- @Override
- public void onGuiClosed() {
- for(IRenderer renderer : renderes.keySet()) {
- renderer.save(renderes.get(renderer));
- }
- }
- @Override
- public boolean doesGuiPauseGame() {
- return true;
- }
- private void adjustBounds(IRenderer renderer, ScreenPosition pos) {
- ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft());
- int screenWidth = res.getScaledWidth();
- int screenHeight = res.getScaledHeight();
- int absoluteX = Math.max(0, Math.min(pos.getAbsoluteX(), Math.max(screenWidth - renderer.getWidth(), 0)));
- int absoluteY = Math.max(0, Math.min(pos.getAbsoluteY(), Math.max(screenHeight - renderer.getHeight(), 0)));
- pos.setAbsolute(absoluteX, absoluteY);
- }
- @Override
- protected void mouseClicked(int x, int y, int mobuttonuseButton) throws IOException {
- this.prevX = x;
- this.prevY = y;
- loadMouseOver(x, y);
- }
- private void loadMouseOver(int x, int y) {
- this.selectedRenderer = renderes.keySet().stream().filter((java.util.function.Predicate<? super IRenderer>) new MouseOverFinder(x, y)).findFirst();
- }
- private class MouseOverFinder implements Predicate<IRenderer> {
- private int mouseX, mouseY;
- public MouseOverFinder(int x, int y) {
- this.mouseX = x;
- this.mouseY = y;
- }
- @Override
- public boolean apply(IRenderer renderer) {
- ScreenPosition pos = renderes.get(renderer);
- int absoluteX = pos.getAbsoluteX();
- int absoluteY = pos.getAbsoluteY();
- if(mouseX >= absoluteX && mouseX <= absoluteX + renderer.getWidth()) {
- if(mouseY >= absoluteY && mouseY <= absoluteY + renderer.getHeight()) {
- return true;
- }
- }
- return false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement