Merge branch 'port/1.20' into 1.20-alternative

This commit is contained in:
Christian Knaapen
2023-11-18 11:59:09 +01:00
141 changed files with 1170 additions and 1349 deletions

View File

@@ -2,7 +2,6 @@ buildscript {
repositories { repositories {
maven { url = 'https://maven.minecraftforge.net' } maven { url = 'https://maven.minecraftforge.net' }
mavenCentral() mavenCentral()
jcenter()
maven { url = 'https://repo.spongepowered.org/repository/maven-public' } maven { url = 'https://repo.spongepowered.org/repository/maven-public' }
maven { url = 'https://maven.parchmentmc.org' } maven { url = 'https://maven.parchmentmc.org' }
} }
@@ -30,7 +29,9 @@ ext.buildNumber = System.getenv('BUILD_NUMBER')
version = mod_version version = mod_version
group = 'nl.requios.effortlessbuilding' group = 'nl.requios.effortlessbuilding'
archivesBaseName = "effortlessbuilding-${artifact_minecraft_version}" base {
archivesName = "effortlessbuilding-${artifact_minecraft_version}"
}
java.toolchain.languageVersion = JavaLanguageVersion.of(17) java.toolchain.languageVersion = JavaLanguageVersion.of(17)
@@ -121,7 +122,7 @@ dependencies {
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") { jarJar("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") {
jarJar.ranged(it, '[0.6.9,0.7)') jarJar.ranged(it, '[0.6.10,0.7)')
} }
if (flywheelInWorkspace) { if (flywheelInWorkspace) {
@@ -155,7 +156,7 @@ jar {
"Specification-Title": "effortlessbuilding", "Specification-Title": "effortlessbuilding",
"Specification-Vendor": "requios", "Specification-Vendor": "requios",
"Specification-Version": "1", "Specification-Version": "1",
"Implementation-Title": project.jar.baseName, "Implementation-Title": project.name,
"Implementation-Version": project.jar.archiveVersion, "Implementation-Version": project.jar.archiveVersion,
"Implementation-Vendor" :"requios", "Implementation-Vendor" :"requios",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
@@ -184,7 +185,7 @@ tasks.jarJar.finalizedBy('reobfJarJar')
publishing { publishing {
publications { publications {
mavenJava(MavenPublication) { mavenJava(MavenPublication) {
artifactId = archivesBaseName artifactId = base.archivesName.get()
from components.java from components.java
fg.component(it) fg.component(it)

View File

@@ -4,17 +4,17 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false org.gradle.daemon=false
mod_version = 3.5 mod_version = 3.5
artifact_minecraft_version = 1.19.2 artifact_minecraft_version = 1.20.1
minecraft_version = 1.19.2 minecraft_version = 1.20.1
forge_version = 43.1.47 forge_version = 47.1.3
forgegradle_version = 5.1.53 forgegradle_version = 6.0.7
mixingradle_version = 0.7-SNAPSHOT mixingradle_version = 0.7-SNAPSHOT
mixin_version = 0.8.5 mixin_version = 0.8.5
librarian_version = 1.+ librarian_version = 1.+
cursegradle_version = 1.4.0 cursegradle_version = 1.4.0
parchment_version = 2022.11.27 parchment_version = 2023.09.03
flywheel_minecraft_version = 1.19.2 flywheel_minecraft_version = 1.20.1
flywheel_version = 0.6.10-20 flywheel_version = 0.6.10-7

Binary file not shown.

View File

@@ -1,5 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

28
gradlew vendored
View File

@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# Copyright <EFBFBD> 2015-2021 the original authors. # Copyright © 2015-2021 the original authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@@ -32,10 +32,10 @@
# Busybox and similar reduced shells will NOT work, because this script # Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features: # requires all of these POSIX shell features:
# * functions; # * functions;
# * expansions <EFBFBD>$var<EFBFBD>, <EFBFBD>${var}<EFBFBD>, <EFBFBD>${var:-default}<EFBFBD>, <EFBFBD>${var+SET}<EFBFBD>, # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# <EFBFBD>${var#prefix}<EFBFBD>, <EFBFBD>${var%suffix}<EFBFBD>, and <EFBFBD>$( cmd )<EFBFBD>; # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially <EFBFBD>case<EFBFBD>; # * compound commands having a testable exit status, especially «case»;
# * various built-in commands including <EFBFBD>command<EFBFBD>, <EFBFBD>set<EFBFBD>, and <EFBFBD>ulimit<EFBFBD>. # * various built-in commands including «command», «set», and «ulimit».
# #
# Important for patching: # Important for patching:
# #
@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,10 +80,10 @@ do
esac esac
done done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # This is normally unused
# shellcheck disable=SC2034
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
@@ -143,12 +143,16 @@ fi
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #( case $MAX_FD in #(
max*) max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
case $MAX_FD in #( case $MAX_FD in #(
'' | soft) :;; #( '' | soft) :;; #(
*) *)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
@@ -205,6 +209,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \ org.gradle.wrapper.GradleWrapperMain \
"$@" "$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args. # Use "xargs" to parse quoted args.
# #
# With -n1 it outputs one arg per line, with the quotes and backslashes removed. # With -n1 it outputs one arg per line, with the quotes and backslashes removed.

15
gradlew.bat vendored
View File

@@ -14,7 +14,7 @@
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@if "%DEBUG%" == "" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem Gradle startup script for Windows @rem Gradle startup script for Windows
@@ -25,7 +25,8 @@
if "%OS%"=="Windows_NT" setlocal if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if %ERRORLEVEL% equ 0 goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd if %ERRORLEVEL% equ 0 goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 set EXIT_CODE=%ERRORLEVEL%
exit /b 1 if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal

View File

@@ -3,4 +3,8 @@ pluginManagement {
gradlePluginPortal() gradlePluginPortal()
maven { url = 'https://maven.minecraftforge.net/' } maven { url = 'https://maven.minecraftforge.net/' }
} }
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
} }

View File

@@ -1,8 +1,7 @@
package nl.requios.effortlessbuilding; package nl.requios.effortlessbuilding;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@@ -50,19 +49,12 @@ public enum AllGuiTextures implements ScreenElement {
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@Override @Override
public void render(PoseStack ms, int x, int y) { public void render(GuiGraphics ms, int x, int y) {
bind(); ms.blit(location, x, y, 0, startX, startY, width, height, 256, 256);
GuiComponent.blit(ms, x, y, 0, startX, startY, width, height, 256, 256);
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, int x, int y, GuiComponent component) { public void render(GuiGraphics ms, int x, int y, Color c) {
bind();
component.blit(ms, x, y, startX, startY, width, height);
}
@OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, int x, int y, Color c) {
bind(); bind();
UIRenderHelper.drawColoredTexture(ms, c, x, y, startX, startY, width, height); UIRenderHelper.drawColoredTexture(ms, c, x, y, startX, startY, width, height);
} }

View File

@@ -1,10 +1,8 @@
package nl.requios.effortlessbuilding; package nl.requios.effortlessbuilding;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix4f; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@@ -16,6 +14,7 @@ import nl.requios.effortlessbuilding.create.Create;
import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import nl.requios.effortlessbuilding.create.foundation.utility.Color; import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import org.joml.Matrix4f;
public class AllIcons implements ScreenElement { public class AllIcons implements ScreenElement {
@@ -100,25 +99,13 @@ public class AllIcons implements ScreenElement {
private static AllIcons newRow() { private static AllIcons newRow() {
return new AllIcons(x = 0, ++y); return new AllIcons(x = 0, ++y);
} }
@OnlyIn(Dist.CLIENT)
public void bind() {
RenderSystem.setShaderTexture(0, ICON_ATLAS);
}
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@Override @Override
public void render(PoseStack matrixStack, int x, int y) { public void render(GuiGraphics guiGraphics, int x, int y) {
bind(); guiGraphics.blit(ICON_ATLAS, x, y, 0, iconX, iconY, 16, 16, 256, 256);
GuiComponent.blit(matrixStack, x, y, 0, iconX, iconY, 16, 16, 256, 256);
} }
@OnlyIn(Dist.CLIENT)
public void render(PoseStack matrixStack, int x, int y, GuiComponent component) {
bind();
component.blit(matrixStack, x, y, iconX, iconY, 16, 16);
}
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, MultiBufferSource buffer, int color) { public void render(PoseStack ms, MultiBufferSource buffer, int color) {
VertexConsumer builder = buffer.getBuffer(RenderType.textSeeThrough(ICON_ATLAS)); VertexConsumer builder = buffer.getBuffer(RenderType.textSeeThrough(ICON_ATLAS));

View File

@@ -20,7 +20,6 @@ import nl.requios.effortlessbuilding.buildmode.ModeOptions;
import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui; import nl.requios.effortlessbuilding.gui.buildmode.PlayerSettingsGui;
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu; import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
import nl.requios.effortlessbuilding.gui.buildmodifier.ModifiersScreen; import nl.requios.effortlessbuilding.gui.buildmodifier.ModifiersScreen;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
@EventBusSubscriber(Dist.CLIENT) @EventBusSubscriber(Dist.CLIENT)

View File

@@ -3,12 +3,16 @@ package nl.requios.effortlessbuilding;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.flag.FeatureFlags;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.loot.IGlobalLootModifier; import net.minecraftforge.common.loot.IGlobalLootModifier;
import net.minecraftforge.event.BuildCreativeModeTabContentsEvent;
import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.ModLoadingContext;
@@ -36,6 +40,8 @@ import nl.requios.effortlessbuilding.systems.UndoRedo;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.util.List;
@Mod(EffortlessBuilding.MODID) @Mod(EffortlessBuilding.MODID)
public class EffortlessBuilding { public class EffortlessBuilding {
@@ -78,6 +84,7 @@ public class EffortlessBuilding {
IEventBus forgeEventBus = MinecraftForge.EVENT_BUS; IEventBus forgeEventBus = MinecraftForge.EVENT_BUS;
modEventBus.addListener(EffortlessBuilding::setup); modEventBus.addListener(EffortlessBuilding::setup);
modEventBus.addListener(EffortlessBuilding::addTabContents);
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> EffortlessBuildingClient.onConstructorClient(modEventBus, forgeEventBus)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> EffortlessBuildingClient.onConstructorClient(modEventBus, forgeEventBus));
@@ -88,9 +95,9 @@ public class EffortlessBuilding {
LOOT_MODIFIERS.register(FMLJavaModLoadingContext.get().getModEventBus()); LOOT_MODIFIERS.register(FMLJavaModLoadingContext.get().getModEventBus());
//Register config //Register config
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, CommonConfig.spec); modLoadingContext.registerConfig(ModConfig.Type.COMMON, CommonConfig.spec);
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ClientConfig.spec); modLoadingContext.registerConfig(ModConfig.Type.CLIENT, ClientConfig.spec);
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, ServerConfig.spec); modLoadingContext.registerConfig(ModConfig.Type.SERVER, ServerConfig.spec);
} }
public static void setup(final FMLCommonSetupEvent event) { public static void setup(final FMLCommonSetupEvent event) {
@@ -99,8 +106,15 @@ public class EffortlessBuilding {
CompatHelper.setup(); CompatHelper.setup();
} }
public static void addTabContents(final BuildCreativeModeTabContentsEvent event) {
if (event.getTabKey() == CreativeModeTabs.TOOLS_AND_UTILITIES) {
List<ItemStack> stacks = ITEMS.getEntries().stream().map(reg -> new ItemStack(reg.get())).toList();
event.acceptAll(stacks);
}
}
public static <T extends AbstractContainerMenu> MenuType<T> registerContainer(IContainerFactory<T> fact){ public static <T extends AbstractContainerMenu> MenuType<T> registerContainer(IContainerFactory<T> fact){
MenuType<T> type = new MenuType<T>(fact); MenuType<T> type = new MenuType<T>(fact, FeatureFlags.REGISTRY.allFlags());
return type; return type;
} }

View File

@@ -1,16 +1,16 @@
package nl.requios.effortlessbuilding.buildmode; package nl.requios.effortlessbuilding.buildmode;
import com.mojang.math.Vector4f; import nl.requios.effortlessbuilding.create.foundation.utility.Color;
public enum BuildModeCategoryEnum { public enum BuildModeCategoryEnum {
BASIC(new Vector4f(0f, .5f, 1f, .8f)), BASIC(new Color(0f, .5f, 1f, .8f)),
DIAGONAL(new Vector4f(0.56f, 0.28f, 0.87f, .8f)), DIAGONAL(new Color(0.56f, 0.28f, 0.87f, .8f)),
CIRCULAR(new Vector4f(0.29f, 0.76f, 0.3f, 1f)), CIRCULAR(new Color(0.29f, 0.76f, 0.3f, 1f)),
ROOF(new Vector4f(0.83f, 0.87f, 0.23f, .8f)); ROOF(new Color(0.83f, 0.87f, 0.23f, .8f));
public final Vector4f color; public final Color color;
BuildModeCategoryEnum(Vector4f color) { BuildModeCategoryEnum(Color color) {
this.color = color; this.color = color;
} }
} }

View File

@@ -109,7 +109,7 @@ public class BuildModes {
if (!skipRaytrace) { if (!skipRaytrace) {
//collision within a 1 block radius to selected is fine //collision within a 1 block radius to selected is fine
ClipContext rayTraceContext = new ClipContext(start, lineBound, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, player); ClipContext rayTraceContext = new ClipContext(start, lineBound, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, player);
HitResult rayTraceResult = player.level.clip(rayTraceContext); HitResult rayTraceResult = player.level().clip(rayTraceContext);
intersects = rayTraceResult != null && rayTraceResult.getType() == HitResult.Type.BLOCK && intersects = rayTraceResult != null && rayTraceResult.getType() == HitResult.Type.BLOCK &&
planeBound.subtract(rayTraceResult.getLocation()).lengthSqr() > 4; planeBound.subtract(rayTraceResult.getLocation()).lengthSqr() > 4;
} }

View File

@@ -103,7 +103,7 @@ public class ModeOptions {
case CIRCLE_START_CORNER -> circleStart = ActionEnum.CIRCLE_START_CORNER; case CIRCLE_START_CORNER -> circleStart = ActionEnum.CIRCLE_START_CORNER;
} }
if (player.level.isClientSide && if (player.level().isClientSide &&
action != ActionEnum.OPEN_MODIFIER_SETTINGS && action != ActionEnum.OPEN_MODIFIER_SETTINGS &&
action != ActionEnum.OPEN_PLAYER_SETTINGS && action != ActionEnum.OPEN_PLAYER_SETTINGS &&
action != ActionEnum.PREVIOUS_BUILD_MODE && action != ActionEnum.PREVIOUS_BUILD_MODE &&

View File

@@ -164,7 +164,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode {
} }
} }
} }
return new BlockPos(selected.lineBound); return BlockPos.containing(selected.lineBound);
} }
// protected abstract BlockEntry findSecondPos(List<BlockEntry> blocks); // protected abstract BlockEntry findSecondPos(List<BlockEntry> blocks);
@@ -197,7 +197,7 @@ public abstract class ThreeClicksBuildMode extends BaseBuildMode {
//Make it from a plane into a line, on y axis only //Make it from a plane into a line, on y axis only
private Vec3 toLongestLine(Vec3 boundVec, BlockPos secondPos) { private Vec3 toLongestLine(Vec3 boundVec, BlockPos secondPos) {
BlockPos bound = new BlockPos(boundVec); BlockPos bound = BlockPos.containing(boundVec);
return new Vec3(secondPos.getX(), bound.getY(), secondPos.getZ()); return new Vec3(secondPos.getX(), bound.getY(), secondPos.getZ());
} }

View File

@@ -6,7 +6,6 @@ import net.minecraft.world.entity.player.Player;
import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockEntry;
import nl.requios.effortlessbuilding.utilities.BlockSet; import nl.requios.effortlessbuilding.utilities.BlockSet;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import java.util.List; import java.util.List;

View File

@@ -20,7 +20,7 @@ public class DiagonalLine extends ThreeClicksBuildMode {
int iterations = (int) Math.ceil(first.distanceTo(second) * sampleMultiplier); int iterations = (int) Math.ceil(first.distanceTo(second) * sampleMultiplier);
for (double t = 0; t <= 1.0; t += 1.0 / iterations) { for (double t = 0; t <= 1.0; t += 1.0 / iterations) {
Vec3 lerp = first.add(second.subtract(first).scale(t)); Vec3 lerp = first.add(second.subtract(first).scale(t));
BlockPos candidate = new BlockPos(lerp); BlockPos candidate = BlockPos.containing(lerp);
//Only add if not equal to the last in the list //Only add if not equal to the last in the list
if (list.isEmpty() || !list.get(list.size() - 1).equals(candidate)) if (list.isEmpty() || !list.get(list.size() - 1).equals(candidate))
list.add(candidate); list.add(candidate);

View File

@@ -7,7 +7,6 @@ import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.BuildModes;
import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ModeOptions;
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -34,7 +33,7 @@ public class Floor extends TwoClicksBuildMode {
//Then only 1 can be valid, return that one //Then only 1 can be valid, return that one
Criteria selected = criteriaList.get(0); Criteria selected = criteriaList.get(0);
return new BlockPos(selected.planeBound); return BlockPos.containing(selected.planeBound);
} }
public static List<BlockPos> getFloorBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2) { public static List<BlockPos> getFloorBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2) {

View File

@@ -1,12 +1,11 @@
package nl.requios.effortlessbuilding.buildmode.buildmodes; package nl.requios.effortlessbuilding.buildmode.buildmodes;
import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.BuildModes;
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -59,7 +58,7 @@ public class Line extends TwoClicksBuildMode {
} }
return new BlockPos(selected.lineBound); return BlockPos.containing(selected.lineBound);
} }
public static List<BlockPos> getLineBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2) { public static List<BlockPos> getLineBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2) {
@@ -90,7 +89,7 @@ public class Line extends TwoClicksBuildMode {
public static void addZLineBlocks(List<BlockPos> list, int z1, int z2, int x, int y) { public static void addZLineBlocks(List<BlockPos> list, int z1, int z2, int x, int y) {
for (int z = z1; z1 < z2 ? z <= z2 : z >= z2; z += z1 < z2 ? 1 : -1) { for (int z = z1; z1 < z2 ? z <= z2 : z >= z2; z += z1 < z2 ? 1 : -1) {
list.add(new BlockPos(x, y, z)); list.add(BlockPos.containing(x, y, z));
} }
} }
@@ -120,7 +119,7 @@ public class Line extends TwoClicksBuildMode {
//Make it from a plane into a line //Make it from a plane into a line
//Select the axis that is longest //Select the axis that is longest
private Vec3 toLongestLine(Vec3 boundVec, BlockPos firstPos) { private Vec3 toLongestLine(Vec3 boundVec, BlockPos firstPos) {
BlockPos bound = new BlockPos(boundVec); BlockPos bound = BlockPos.containing(boundVec);
BlockPos firstToSecond = bound.subtract(firstPos); BlockPos firstToSecond = bound.subtract(firstPos);
firstToSecond = new BlockPos(Math.abs(firstToSecond.getX()), Math.abs(firstToSecond.getY()), Math.abs(firstToSecond.getZ())); firstToSecond = new BlockPos(Math.abs(firstToSecond.getX()), Math.abs(firstToSecond.getY()), Math.abs(firstToSecond.getZ()));

View File

@@ -5,7 +5,6 @@ import net.minecraft.core.BlockPos;
import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ModeOptions;
import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode; import nl.requios.effortlessbuilding.buildmode.ThreeClicksBuildMode;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View File

@@ -7,7 +7,6 @@ import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.BuildModes;
import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ModeOptions;
import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode; import nl.requios.effortlessbuilding.buildmode.TwoClicksBuildMode;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -49,7 +48,7 @@ public class Wall extends TwoClicksBuildMode {
} }
} }
return new BlockPos(selected.planeBound); return BlockPos.containing(selected.planeBound);
} }
public static List<BlockPos> getWallBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2) { public static List<BlockPos> getWallBlocks(Player player, int x1, int y1, int z1, int x2, int y2, int z2) {

View File

@@ -1,24 +1,12 @@
package nl.requios.effortlessbuilding.buildmodifier; package nl.requios.effortlessbuilding.buildmodifier;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.nbt.Tag;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.core.Direction;
import net.minecraft.world.InteractionHand;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.phys.Vec3;
import net.minecraft.core.Vec3i; import net.minecraft.core.Vec3i;
import net.minecraftforge.items.IItemHandler;
import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem;
import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockEntry;
import nl.requios.effortlessbuilding.utilities.BlockSet; import nl.requios.effortlessbuilding.utilities.BlockSet;
import java.util.ArrayList;
import java.util.List;
public class Array extends BaseModifier { public class Array extends BaseModifier {
public Vec3i offset = BlockPos.ZERO; public Vec3i offset = BlockPos.ZERO;

View File

@@ -1,7 +1,6 @@
package nl.requios.effortlessbuilding.buildmodifier; package nl.requios.effortlessbuilding.buildmodifier;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import nl.requios.effortlessbuilding.utilities.BlockSet; import nl.requios.effortlessbuilding.utilities.BlockSet;

View File

@@ -2,8 +2,6 @@ package nl.requios.effortlessbuilding.buildmodifier;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.nbt.Tag;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
@@ -50,7 +48,7 @@ public class Mirror extends BaseModifier {
private void performMirrorX(BlockSet blocks, BlockEntry blockEntry) { private void performMirrorX(BlockSet blocks, BlockEntry blockEntry) {
//find mirror position //find mirror position
double x = position.x + (position.x - blockEntry.blockPos.getX() - 0.5); double x = position.x + (position.x - blockEntry.blockPos.getX() - 0.5);
BlockPos newBlockPos = new BlockPos(x, blockEntry.blockPos.getY(), blockEntry.blockPos.getZ()); BlockPos newBlockPos = BlockPos.containing(x, blockEntry.blockPos.getY(), blockEntry.blockPos.getZ());
if (blocks.containsKey(newBlockPos)) return; if (blocks.containsKey(newBlockPos)) return;
@@ -66,7 +64,7 @@ public class Mirror extends BaseModifier {
private void performMirrorY(BlockSet blocks, BlockEntry blockEntry) { private void performMirrorY(BlockSet blocks, BlockEntry blockEntry) {
//find mirror position //find mirror position
double y = position.y + (position.y - blockEntry.blockPos.getY() - 0.5); double y = position.y + (position.y - blockEntry.blockPos.getY() - 0.5);
BlockPos newBlockPos = new BlockPos(blockEntry.blockPos.getX(), y, blockEntry.blockPos.getZ()); BlockPos newBlockPos = BlockPos.containing(blockEntry.blockPos.getX(), y, blockEntry.blockPos.getZ());
if (blocks.containsKey(newBlockPos)) return; if (blocks.containsKey(newBlockPos)) return;
@@ -81,7 +79,7 @@ public class Mirror extends BaseModifier {
private void performMirrorZ(BlockSet blocks, BlockEntry blockEntry) { private void performMirrorZ(BlockSet blocks, BlockEntry blockEntry) {
//find mirror position //find mirror position
double z = position.z + (position.z - blockEntry.blockPos.getZ() - 0.5); double z = position.z + (position.z - blockEntry.blockPos.getZ() - 0.5);
BlockPos newBlockPos = new BlockPos(blockEntry.blockPos.getX(), blockEntry.blockPos.getY(), z); BlockPos newBlockPos = BlockPos.containing(blockEntry.blockPos.getX(), blockEntry.blockPos.getY(), z);
if (blocks.containsKey(newBlockPos)) return; if (blocks.containsKey(newBlockPos)) return;

View File

@@ -4,23 +4,15 @@ import net.minecraft.client.Minecraft;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.core.Direction;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.Rotation;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.items.IItemHandler;
import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem;
import nl.requios.effortlessbuilding.utilities.BlockEntry; import nl.requios.effortlessbuilding.utilities.BlockEntry;
import nl.requios.effortlessbuilding.utilities.BlockSet; import nl.requios.effortlessbuilding.utilities.BlockSet;
import java.util.ArrayList;
import java.util.List;
public class RadialMirror extends BaseModifier { public class RadialMirror extends BaseModifier {
public Vec3 position = new Vec3(0.5, 64.5, 0.5); public Vec3 position = new Vec3(0.5, 64.5, 0.5);
@@ -77,7 +69,7 @@ public class RadialMirror extends BaseModifier {
} }
Vec3 relNewVec = relStartVec.yRot((float) curAngle); Vec3 relNewVec = relStartVec.yRot((float) curAngle);
BlockPos newBlockPos = new BlockPos(position.add(relNewVec)); BlockPos newBlockPos = BlockPos.containing(position.add(relNewVec));
if (blocks.containsKey(newBlockPos)) continue; if (blocks.containsKey(newBlockPos)) continue;
@@ -120,11 +112,11 @@ public class RadialMirror extends BaseModifier {
BlockState newBlockState = blockState; BlockState newBlockState = blockState;
if (startAngleToCenter < -0.751 * Math.PI || startAngleToCenter > 0.749 * Math.PI) { if (startAngleToCenter < -0.751 * Math.PI || startAngleToCenter > 0.749 * Math.PI) {
newBlockState = blockState.rotate(player.level, startPos, Rotation.CLOCKWISE_180); newBlockState = blockState.rotate(player.level(), startPos, Rotation.CLOCKWISE_180);
} else if (startAngleToCenter < -0.251 * Math.PI) { } else if (startAngleToCenter < -0.251 * Math.PI) {
newBlockState = blockState.rotate(player.level, startPos, Rotation.COUNTERCLOCKWISE_90); newBlockState = blockState.rotate(player.level(), startPos, Rotation.COUNTERCLOCKWISE_90);
} else if (startAngleToCenter > 0.249 * Math.PI) { } else if (startAngleToCenter > 0.249 * Math.PI) {
newBlockState = blockState.rotate(player.level, startPos, Rotation.CLOCKWISE_90); newBlockState = blockState.rotate(player.level(), startPos, Rotation.CLOCKWISE_90);
} }
return newBlockState; return newBlockState;
@@ -135,17 +127,17 @@ public class RadialMirror extends BaseModifier {
double angleToCenter = Mth.atan2(relVec.x, relVec.z); //between -PI and PI double angleToCenter = Mth.atan2(relVec.x, relVec.z); //between -PI and PI
if (angleToCenter < -0.751 * Math.PI || angleToCenter > 0.749 * Math.PI) { if (angleToCenter < -0.751 * Math.PI || angleToCenter > 0.749 * Math.PI) {
newBlockState = blockState.rotate(player.level, startPos, Rotation.CLOCKWISE_180); newBlockState = blockState.rotate(player.level(), startPos, Rotation.CLOCKWISE_180);
if (alternate) { if (alternate) {
newBlockState = newBlockState.mirror(Mirror.FRONT_BACK); newBlockState = newBlockState.mirror(Mirror.FRONT_BACK);
} }
} else if (angleToCenter < -0.251 * Math.PI) { } else if (angleToCenter < -0.251 * Math.PI) {
newBlockState = blockState.rotate(player.level, startPos, Rotation.CLOCKWISE_90); newBlockState = blockState.rotate(player.level(), startPos, Rotation.CLOCKWISE_90);
if (alternate) { if (alternate) {
newBlockState = newBlockState.mirror(Mirror.LEFT_RIGHT); newBlockState = newBlockState.mirror(Mirror.LEFT_RIGHT);
} }
} else if (angleToCenter > 0.249 * Math.PI) { } else if (angleToCenter > 0.249 * Math.PI) {
newBlockState = blockState.rotate(player.level, startPos, Rotation.COUNTERCLOCKWISE_90); newBlockState = blockState.rotate(player.level(), startPos, Rotation.COUNTERCLOCKWISE_90);
if (alternate) { if (alternate) {
newBlockState = newBlockState.mirror(Mirror.LEFT_RIGHT); newBlockState = newBlockState.mirror(Mirror.LEFT_RIGHT);
} }

View File

@@ -7,7 +7,6 @@ import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import nl.requios.effortlessbuilding.create.foundation.item.ItemHelper; import nl.requios.effortlessbuilding.create.foundation.item.ItemHelper;
import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem; import nl.requios.effortlessbuilding.item.AbstractRandomizerBagItem;

View File

@@ -1,13 +1,8 @@
package nl.requios.effortlessbuilding.create; package nl.requios.effortlessbuilding.create;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import org.lwjgl.glfw.GLFW; import org.lwjgl.glfw.GLFW;
public class AllKeys { public class AllKeys {

View File

@@ -1,12 +1,7 @@
package nl.requios.effortlessbuilding.create; package nl.requios.effortlessbuilding.create;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
@Mod.EventBusSubscriber(Dist.CLIENT) @Mod.EventBusSubscriber(Dist.CLIENT)
public class CreateClientTest { public class CreateClientTest {

View File

@@ -4,11 +4,10 @@ import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RenderLevelLastEvent; import net.minecraftforge.client.event.RenderLevelStageEvent;
import net.minecraftforge.client.event.ViewportEvent; import net.minecraftforge.client.event.ViewportEvent;
import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.event.TickEvent.ClientTickEvent;
@@ -58,7 +57,9 @@ public class ClientEvents {
} }
@SubscribeEvent @SubscribeEvent
public static void onRenderWorld(RenderLevelLastEvent event) { public static void onRenderWorld(RenderLevelStageEvent event) {
if(event.getStage() != RenderLevelStageEvent.Stage.AFTER_CUTOUT_BLOCKS) return;
Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera() Vec3 cameraPos = Minecraft.getInstance().gameRenderer.getMainCamera()
.getPosition(); .getPosition();
float pt = AnimationTickHolder.getPartialTicks(); float pt = AnimationTickHolder.getPartialTicks();

View File

@@ -10,7 +10,7 @@ public class ModFilePackResources extends PathPackResources {
protected final String sourcePath; protected final String sourcePath;
public ModFilePackResources(String name, IModFile modFile, String sourcePath) { public ModFilePackResources(String name, IModFile modFile, String sourcePath) {
super(name, modFile.findResource(sourcePath)); super(name, true, modFile.findResource(sourcePath));
this.modFile = modFile; this.modFile = modFile;
this.sourcePath = sourcePath; this.sourcePath = sourcePath;
} }

View File

@@ -2,17 +2,18 @@ package nl.requios.effortlessbuilding.create.foundation.gui;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Widget; import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.components.Renderable;
import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.gui.buildmodifier.ModifiersScreenList; import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -65,19 +66,26 @@ public abstract class AbstractSimiScreen extends Screen {
} }
} }
@Override
public boolean mouseClicked(double pMouseX, double pMouseY, int pButton) {
if (getFocused() != null && !getFocused().isMouseOver(pMouseX, pMouseY))
setFocused(null);
return super.mouseClicked(pMouseX, pMouseY, pButton);
}
@Override @Override
public boolean isPauseScreen() { public boolean isPauseScreen() {
return false; return false;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected <W extends GuiEventListener & Widget & NarratableEntry> void addRenderableWidgets(W... widgets) { protected <W extends GuiEventListener & Renderable & NarratableEntry> void addRenderableWidgets(W... widgets) {
for (W widget : widgets) { for (W widget : widgets) {
addRenderableWidget(widget); addRenderableWidget(widget);
} }
} }
protected <W extends GuiEventListener & Widget & NarratableEntry> void addRenderableWidgets(Collection<W> widgets) { protected <W extends GuiEventListener & Renderable & NarratableEntry> void addRenderableWidgets(Collection<W> widgets) {
for (W widget : widgets) { for (W widget : widgets) {
addRenderableWidget(widget); addRenderableWidget(widget);
} }
@@ -96,17 +104,18 @@ public abstract class AbstractSimiScreen extends Screen {
} }
@Override @Override
public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
partialTicks = minecraft.getFrameTime(); partialTicks = minecraft.getFrameTime();
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
prepareFrame(); prepareFrame();
renderWindowBackground(ms, mouseX, mouseY, partialTicks); renderWindowBackground(graphics, mouseX, mouseY, partialTicks);
renderWindow(ms, mouseX, mouseY, partialTicks); renderWindow(graphics, mouseX, mouseY, partialTicks);
super.render(ms, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks);
renderWindowForeground(ms, mouseX, mouseY, partialTicks); renderWindowForeground(graphics, mouseX, mouseY, partialTicks);
endFrame(); endFrame();
@@ -116,7 +125,7 @@ public abstract class AbstractSimiScreen extends Screen {
@Override @Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) { public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
boolean keyPressed = super.keyPressed(keyCode, scanCode, modifiers); boolean keyPressed = super.keyPressed(keyCode, scanCode, modifiers);
if (keyPressed || getFocused() != null) if (keyPressed || getFocused() instanceof EditBox)
return keyPressed; return keyPressed;
InputConstants.Key mouseKey = InputConstants.getKey(keyCode, scanCode); InputConstants.Key mouseKey = InputConstants.getKey(keyCode, scanCode);
@@ -130,37 +139,31 @@ public abstract class AbstractSimiScreen extends Screen {
protected void prepareFrame() {} protected void prepareFrame() {}
protected void renderWindowBackground(PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void renderWindowBackground(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
renderBackground(ms); renderBackground(graphics);
} }
protected abstract void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks); protected abstract void renderWindow(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks);
protected void renderWindowForeground(PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void renderWindowForeground(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
for (Widget widget : renderables) { for (Renderable widget : renderables) {
if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused() if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isMouseOver(mouseX, mouseY)
&& simiWidget.visible) { && simiWidget.visible) {
List<Component> tooltip = simiWidget.getToolTip(); List<Component> tooltip = simiWidget.getToolTip();
if (tooltip.isEmpty()) if (tooltip.isEmpty())
continue; continue;
int ttx = simiWidget.lockedTooltipX == -1 ? mouseX : simiWidget.lockedTooltipX + simiWidget.x; int ttx = simiWidget.lockedTooltipX == -1 ? mouseX : simiWidget.lockedTooltipX + simiWidget.getX();
int tty = simiWidget.lockedTooltipY == -1 ? mouseY : simiWidget.lockedTooltipY + simiWidget.y; int tty = simiWidget.lockedTooltipY == -1 ? mouseY : simiWidget.lockedTooltipY + simiWidget.getY();
renderComponentTooltip(ms, tooltip, ttx, tty); graphics.renderComponentTooltip(font, tooltip, ttx, tty);
}
//Added
if (widget instanceof ModifiersScreenList list) {
list.renderWindowForeground(ms, mouseX, mouseY, partialTicks);
} }
} }
} }
protected void endFrame() {} protected void endFrame() {}
@Deprecated @Deprecated
protected void debugWindowArea(PoseStack matrixStack) { protected void debugWindowArea(GuiGraphics graphics) {
fill(matrixStack, guiLeft + windowWidth, guiTop + windowHeight, guiLeft, guiTop, 0xD3D3D3D3); graphics.fill(guiLeft + windowWidth, guiTop + windowHeight, guiLeft, guiTop, 0xD3D3D3D3);
} }
@Override @Override

View File

@@ -1,14 +1,13 @@
package nl.requios.effortlessbuilding.create.foundation.gui; package nl.requios.effortlessbuilding.create.foundation.gui;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.Create;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.create.Create;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
public enum AllGuiTextures implements ScreenElement { public enum AllGuiTextures implements ScreenElement {
@@ -29,7 +28,7 @@ public enum AllGuiTextures implements ScreenElement {
SPEECH_TOOLTIP_BACKGROUND("widgets", 0, 24, 8, 8), SPEECH_TOOLTIP_BACKGROUND("widgets", 0, 24, 8, 8),
SPEECH_TOOLTIP_COLOR("widgets", 8, 24, 8, 8), SPEECH_TOOLTIP_COLOR("widgets", 8, 24, 8, 8),
TRAIN_HUD_SPEED_BG("widgets", 0, 190, 182, 5), TRAIN_HUD_SPEED_BG("widgets", 0, 190, 182, 5),
TRAIN_HUD_SPEED("widgets", 0, 185, 182, 5), TRAIN_HUD_SPEED("widgets", 0, 185, 182, 5),
TRAIN_HUD_THROTTLE("widgets", 0, 195, 182, 5), TRAIN_HUD_THROTTLE("widgets", 0, 195, 182, 5),
@@ -74,22 +73,14 @@ public enum AllGuiTextures implements ScreenElement {
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@Override public void render(GuiGraphics graphics, int x, int y) {
public void render(PoseStack ms, int x, int y) { graphics.blit(location, x, y, startX, startY, width, height);
bind();
GuiComponent.blit(ms, x, y, 0, startX, startY, width, height, 256, 256);
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, int x, int y, GuiComponent component) { public void render(GuiGraphics graphics, int x, int y, Color c) {
bind(); bind();
component.blit(ms, x, y, startX, startY, width, height); UIRenderHelper.drawColoredTexture(graphics, c, x, y, startX, startY, width, height);
}
@OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, int x, int y, Color c) {
bind();
UIRenderHelper.drawColoredTexture(ms, c, x, y, startX, startY, width, height);
} }
} }

View File

@@ -3,12 +3,7 @@ package nl.requios.effortlessbuilding.create.foundation.gui;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix4f; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.Create;
import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@@ -16,6 +11,11 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.create.Create;
import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import org.joml.Matrix4f;
public class AllIcons implements ScreenElement { public class AllIcons implements ScreenElement {
@@ -81,7 +81,7 @@ public class AllIcons implements ScreenElement {
public static final AllIcons public static final AllIcons
I_TOOL_DEPLOY = newRow(), I_TOOL_DEPLOY = newRow(),
I_SKIP_MISSING = next(), I_SKIP_MISSING = next(),
I_SKIP_TILES = next(), I_SKIP_BLOCK_ENTITIES = next(),
I_DICE = next(), I_DICE = next(),
I_TUNNEL_SPLIT = next(), I_TUNNEL_SPLIT = next(),
I_TUNNEL_FORCED_SPLIT = next(), I_TUNNEL_FORCED_SPLIT = next(),
@@ -173,20 +173,13 @@ public class AllIcons implements ScreenElement {
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@Override @Override
public void render(PoseStack matrixStack, int x, int y) { public void render(GuiGraphics graphics, int x, int y) {
bind(); graphics.blit(ICON_ATLAS, x, y, 0, iconX, iconY, 16, 16, 256, 256);
GuiComponent.blit(matrixStack, x, y, 0, iconX, iconY, 16, 16, 256, 256);
}
@OnlyIn(Dist.CLIENT)
public void render(PoseStack matrixStack, int x, int y, GuiComponent component) {
bind();
component.blit(matrixStack, x, y, iconX, iconY, 16, 16);
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public void render(PoseStack ms, MultiBufferSource buffer, int color) { public void render(PoseStack ms, MultiBufferSource buffer, int color) {
VertexConsumer builder = buffer.getBuffer(RenderType.textSeeThrough(ICON_ATLAS)); VertexConsumer builder = buffer.getBuffer(RenderType.text(ICON_ATLAS));
Matrix4f matrix = ms.last().pose(); Matrix4f matrix = ms.last().pose();
Color rgb = new Color(color); Color rgb = new Color(color);
int light = LightTexture.FULL_BRIGHT; int light = LightTexture.FULL_BRIGHT;

View File

@@ -2,13 +2,14 @@ package nl.requios.effortlessbuilding.create.foundation.gui;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import nl.requios.effortlessbuilding.create.foundation.gui.element.BoxElement;
import nl.requios.effortlessbuilding.create.foundation.gui.element.TextStencilElement;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.BoxWidget;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.FormattedText;
import net.minecraft.network.chat.Style; import net.minecraft.network.chat.Style;
import nl.requios.effortlessbuilding.create.foundation.gui.element.BoxElement;
import nl.requios.effortlessbuilding.create.foundation.gui.element.TextStencilElement;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.BoxWidget;
import org.lwjgl.opengl.GL30; import org.lwjgl.opengl.GL30;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@@ -173,11 +174,12 @@ public class ConfirmationScreen extends AbstractSimiScreen {
} }
@Override @Override
protected void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void renderWindow(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
textBackground.render(ms); textBackground.render(graphics);
int offset = font.lineHeight + 1; int offset = font.lineHeight + 1;
int lineY = y - offset; int lineY = y - offset;
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
ms.translate(0, 0, 200); ms.translate(0, 0, 200);
@@ -185,21 +187,21 @@ public class ConfirmationScreen extends AbstractSimiScreen {
lineY += offset; lineY += offset;
if (line == null) if (line == null)
continue; continue;
font.draw(ms, line.getString(), x, lineY, 0xeaeaea); graphics.drawString(font, line.getString(), x, lineY, 0xeaeaea, false);
} }
ms.popPose(); ms.popPose();
} }
@Override @Override
protected void renderWindowBackground(PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void renderWindowBackground(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
endFrame(); endFrame();
source.render(ms, 0, 0, 10); // zero mouse coords to prevent further tooltips source.render(graphics, 0, 0, 10); // zero mouse coords to prevent further tooltips
prepareFrame(); prepareFrame();
this.fillGradient(ms, 0, 0, this.width, this.height, 0x70101010, 0x80101010); graphics.fillGradient(0, 0, this.width, this.height, 0x70101010, 0x80101010);
} }

View File

@@ -1,8 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui; package nl.requios.effortlessbuilding.create.foundation.gui;
import org.joml.Matrix4f;
import org.joml.Vector3f;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.math.Matrix4f; import com.mojang.math.Axis;
import com.mojang.math.Vector3f;
public class CustomLightingSettings implements ILightingSettings { public class CustomLightingSettings implements ILightingSettings {
@@ -19,20 +21,20 @@ public class CustomLightingSettings implements ILightingSettings {
} }
protected void init(float yRot1, float xRot1, float yRot2, float xRot2, boolean doubleLight) { protected void init(float yRot1, float xRot1, float yRot2, float xRot2, boolean doubleLight) {
light1 = Vector3f.ZP.copy(); light1 = new Vector3f(0, 0, 1);
light1.transform(Vector3f.YP.rotationDegrees(yRot1)); light1.rotate(Axis.YP.rotationDegrees(yRot1));
light1.transform(Vector3f.XN.rotationDegrees(xRot1)); light1.rotate(Axis.XN.rotationDegrees(xRot1));
if (doubleLight) { if (doubleLight) {
light2 = Vector3f.ZP.copy(); light2 = new Vector3f(0, 0, 1);
light2.transform(Vector3f.YP.rotationDegrees(yRot2)); light2.rotate(Axis.YP.rotationDegrees(yRot2));
light2.transform(Vector3f.XN.rotationDegrees(xRot2)); light2.rotate(Axis.XN.rotationDegrees(xRot2));
} else { } else {
light2 = Vector3f.ZERO; light2 = new Vector3f();
} }
lightMatrix = new Matrix4f(); lightMatrix = new Matrix4f();
lightMatrix.setIdentity(); lightMatrix.identity();
} }
@Override @Override

View File

@@ -1,10 +1,18 @@
package nl.requios.effortlessbuilding.create.foundation.gui; package nl.requios.effortlessbuilding.create.foundation.gui;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
import org.joml.Matrix4f;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.math.Matrix4f;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.FormattedText;
@@ -12,13 +20,9 @@ import net.minecraft.network.chat.Style;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.event.RenderTooltipEvent; import net.minecraftforge.client.event.RenderTooltipEvent;
import net.minecraftforge.client.gui.ScreenUtils; import net.minecraftforge.client.extensions.IForgeGuiGraphics;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
public class RemovedGuiUtils { public class RemovedGuiUtils {
@Nonnull @Nonnull
private static ItemStack cachedTooltipStack = ItemStack.EMPTY; private static ItemStack cachedTooltipStack = ItemStack.EMPTY;
@@ -31,41 +35,43 @@ public class RemovedGuiUtils {
cachedTooltipStack = ItemStack.EMPTY; cachedTooltipStack = ItemStack.EMPTY;
} }
public static void drawHoveringText(PoseStack mStack, List<? extends FormattedText> textLines, int mouseX, public static void drawHoveringText(GuiGraphics graphics, List<? extends FormattedText> textLines, int mouseX,
int mouseY, int screenWidth, int screenHeight, int maxTextWidth, Font font) { int mouseY, int screenWidth, int screenHeight, int maxTextWidth, Font font) {
drawHoveringText(mStack, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, drawHoveringText(graphics, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth,
ScreenUtils.DEFAULT_BACKGROUND_COLOR, ScreenUtils.DEFAULT_BORDER_COLOR_START, ScreenUtils.DEFAULT_BORDER_COLOR_END, IForgeGuiGraphics.DEFAULT_BACKGROUND_COLOR, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_START, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_END,
font); font);
} }
public static void drawHoveringText(PoseStack mStack, List<? extends FormattedText> textLines, int mouseX, public static void drawHoveringText(GuiGraphics graphics, List<? extends FormattedText> textLines, int mouseX,
int mouseY, int screenWidth, int screenHeight, int maxTextWidth, int backgroundColor, int borderColorStart, int mouseY, int screenWidth, int screenHeight, int maxTextWidth, int backgroundColor, int borderColorStart,
int borderColorEnd, Font font) { int borderColorEnd, Font font) {
drawHoveringText(cachedTooltipStack, mStack, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, drawHoveringText(cachedTooltipStack, graphics, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth,
backgroundColor, borderColorStart, borderColorEnd, font); backgroundColor, borderColorStart, borderColorEnd, font);
} }
public static void drawHoveringText(@Nonnull final ItemStack stack, PoseStack mStack, public static void drawHoveringText(@Nonnull final ItemStack stack, GuiGraphics graphics,
List<? extends FormattedText> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, List<? extends FormattedText> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight,
int maxTextWidth, Font font) { int maxTextWidth, Font font) {
drawHoveringText(stack, mStack, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth, drawHoveringText(stack, graphics, textLines, mouseX, mouseY, screenWidth, screenHeight, maxTextWidth,
ScreenUtils.DEFAULT_BACKGROUND_COLOR, ScreenUtils.DEFAULT_BORDER_COLOR_START, ScreenUtils.DEFAULT_BORDER_COLOR_END, IForgeGuiGraphics.DEFAULT_BACKGROUND_COLOR, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_START, IForgeGuiGraphics.DEFAULT_BORDER_COLOR_END,
font); font);
} }
public static void drawHoveringText(@Nonnull final ItemStack stack, PoseStack pStack, public static void drawHoveringText(@Nonnull final ItemStack stack, GuiGraphics graphics,
List<? extends FormattedText> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight, List<? extends FormattedText> textLines, int mouseX, int mouseY, int screenWidth, int screenHeight,
int maxTextWidth, int backgroundColor, int borderColorStart, int borderColorEnd, Font font) { int maxTextWidth, int backgroundColor, int borderColorStart, int borderColorEnd, Font font) {
if (textLines.isEmpty()) if (textLines.isEmpty())
return; return;
List<ClientTooltipComponent> list = ForgeHooksClient.gatherTooltipComponents(stack, textLines, List<ClientTooltipComponent> list = ForgeHooksClient.gatherTooltipComponents(stack, textLines,
stack.getTooltipImage(), mouseX, screenWidth, screenHeight, font, font); stack.getTooltipImage(), mouseX, screenWidth, screenHeight, font);
RenderTooltipEvent.Pre event = RenderTooltipEvent.Pre event =
new RenderTooltipEvent.Pre(stack, pStack, mouseX, mouseY, screenWidth, screenHeight, font, list); new RenderTooltipEvent.Pre(stack, graphics, mouseX, mouseY, screenWidth, screenHeight, font, list, null);
if (MinecraftForge.EVENT_BUS.post(event)) if (MinecraftForge.EVENT_BUS.post(event))
return; return;
PoseStack pStack = graphics.pose();
mouseX = event.getX(); mouseX = event.getX();
mouseY = event.getY(); mouseY = event.getY();
screenWidth = event.getScreenWidth(); screenWidth = event.getScreenWidth();
@@ -144,7 +150,7 @@ public class RemovedGuiUtils {
tooltipY = screenHeight - tooltipHeight - 4; tooltipY = screenHeight - tooltipHeight - 4;
final int zLevel = 400; final int zLevel = 400;
RenderTooltipEvent.Color colorEvent = new RenderTooltipEvent.Color(stack, pStack, tooltipX, tooltipY, RenderTooltipEvent.Color colorEvent = new RenderTooltipEvent.Color(stack, graphics, tooltipX, tooltipY,
font, backgroundColor, borderColorStart, borderColorEnd, list); font, backgroundColor, borderColorStart, borderColorEnd, list);
MinecraftForge.EVENT_BUS.post(colorEvent); MinecraftForge.EVENT_BUS.post(colorEvent);
backgroundColor = colorEvent.getBackgroundStart(); backgroundColor = colorEvent.getBackgroundStart();
@@ -154,24 +160,24 @@ public class RemovedGuiUtils {
pStack.pushPose(); pStack.pushPose();
Matrix4f mat = pStack.last() Matrix4f mat = pStack.last()
.pose(); .pose();
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX - 3, tooltipY - 4, tooltipX + tooltipTextWidth + 3, graphics.fillGradient(tooltipX - 3, tooltipY - 4, tooltipX + tooltipTextWidth + 3,
tooltipY - 3, backgroundColor, backgroundColor); tooltipY - 3, zLevel, backgroundColor, backgroundColor);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX - 3, tooltipY + tooltipHeight + 3, graphics.fillGradient(tooltipX - 3, tooltipY + tooltipHeight + 3,
tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 4, backgroundColor, backgroundColor); tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 4, zLevel, backgroundColor, backgroundColor);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, graphics.fillGradient(tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3,
tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); tooltipY + tooltipHeight + 3, zLevel, backgroundColor, backgroundColor);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX - 4, tooltipY - 3, tooltipX - 3, tooltipY + tooltipHeight + 3, graphics.fillGradient(tooltipX - 4, tooltipY - 3, tooltipX - 3, tooltipY + tooltipHeight + 3,
backgroundColor, backgroundColor); zLevel, backgroundColor, backgroundColor);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX + tooltipTextWidth + 3, tooltipY - 3, graphics.fillGradient(tooltipX + tooltipTextWidth + 3, tooltipY - 3,
tooltipX + tooltipTextWidth + 4, tooltipY + tooltipHeight + 3, backgroundColor, backgroundColor); tooltipX + tooltipTextWidth + 4, tooltipY + tooltipHeight + 3, zLevel, backgroundColor, backgroundColor);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX - 3, tooltipY - 3 + 1, tooltipX - 3 + 1, graphics.fillGradient(tooltipX - 3, tooltipY - 3 + 1, tooltipX - 3 + 1,
tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd); tooltipY + tooltipHeight + 3 - 1, zLevel, borderColorStart, borderColorEnd);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX + tooltipTextWidth + 2, tooltipY - 3 + 1, graphics.fillGradient(tooltipX + tooltipTextWidth + 2, tooltipY - 3 + 1,
tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3 - 1, borderColorStart, borderColorEnd); tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3 - 1, zLevel, borderColorStart, borderColorEnd);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3, graphics.fillGradient(tooltipX - 3, tooltipY - 3, tooltipX + tooltipTextWidth + 3,
tooltipY - 3 + 1, borderColorStart, borderColorStart); tooltipY - 3 + 1, zLevel, borderColorStart, borderColorStart);
ScreenUtils.drawGradientRect(mat, zLevel, tooltipX - 3, tooltipY + tooltipHeight + 2, graphics.fillGradient(tooltipX - 3, tooltipY + tooltipHeight + 2,
tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, borderColorEnd, borderColorEnd); tooltipX + tooltipTextWidth + 3, tooltipY + tooltipHeight + 3, zLevel, borderColorEnd, borderColorEnd);
MultiBufferSource.BufferSource renderType = MultiBufferSource.immediate(Tesselator.getInstance() MultiBufferSource.BufferSource renderType = MultiBufferSource.immediate(Tesselator.getInstance()
.getBuilder()); .getBuilder());

View File

@@ -5,19 +5,21 @@ import com.mojang.blaze3d.platform.GlConst;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.platform.Window;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*; import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.math.Matrix4f; import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.math.Vector3f; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer;
import nl.requios.effortlessbuilding.create.foundation.utility.Color; import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.Couple; import nl.requios.effortlessbuilding.create.foundation.utility.Couple;
import net.minecraft.client.Minecraft; import org.joml.Matrix4f;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraftforge.client.gui.ScreenUtils;
import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL20;
import org.lwjgl.opengl.GL30; import org.lwjgl.opengl.GL30;
import javax.annotation.Nonnull;
public class UIRenderHelper { public class UIRenderHelper {
/** /**
@@ -53,14 +55,14 @@ public class UIRenderHelper {
GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, dst.frameBufferId); GlStateManager._glBindFramebuffer(GlConst.GL_FRAMEBUFFER, dst.frameBufferId);
} }
public static void streak(PoseStack ms, float angle, int x, int y, int breadth, int length) { public static void streak(GuiGraphics graphics, float angle, int x, int y, int breadth, int length) {
streak(ms, angle, x, y, breadth, length, Theme.i(Theme.Key.STREAK)); streak(graphics, angle, x, y, breadth, length, Theme.i(Theme.Key.STREAK));
} }
// angle in degrees; 0° -> fading to the right // angle in degrees; 0° -> fading to the right
// x and y specify the middle point of the starting edge // x and y specify the middle point of the starting edge
// breadth is the total width of the streak // breadth is the total width of the streak
public static void streak(PoseStack ms, float angle, int x, int y, int breadth, int length, int color) { public static void streak(GuiGraphics graphics, float angle, int x, int y, int breadth, int length, int color) {
int a1 = 0xa0 << 24; int a1 = 0xa0 << 24;
int a2 = 0x80 << 24; int a2 = 0x80 << 24;
int a3 = 0x10 << 24; int a3 = 0x10 << 24;
@@ -72,59 +74,60 @@ public class UIRenderHelper {
int c3 = a3 | color; int c3 = a3 | color;
int c4 = a4 | color; int c4 = a4 | color;
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
ms.translate(x, y, 0); ms.translate(x, y, 0);
ms.mulPose(Vector3f.ZP.rotationDegrees(angle - 90)); ms.mulPose(Axis.ZP.rotationDegrees(angle - 90));
streak(ms, breadth / 2, length, c1, c2, c3, c4); streak(graphics, breadth / 2, length, c1, c2, c3, c4);
ms.popPose(); ms.popPose();
} }
public static void streak(PoseStack ms, float angle, int x, int y, int breadth, int length, Color c) { public static void streak(GuiGraphics graphics, float angle, int x, int y, int breadth, int length, Color c) {
Color color = c.copy().setImmutable(); Color color = c.copy().setImmutable();
int c1 = color.scaleAlpha(0.625f).getRGB(); int c1 = color.scaleAlpha(0.625f).getRGB();
int c2 = color.scaleAlpha(0.5f).getRGB(); int c2 = color.scaleAlpha(0.5f).getRGB();
int c3 = color.scaleAlpha(0.0625f).getRGB(); int c3 = color.scaleAlpha(0.0625f).getRGB();
int c4 = color.scaleAlpha(0f).getRGB(); int c4 = color.scaleAlpha(0f).getRGB();
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
ms.translate(x, y, 0); ms.translate(x, y, 0);
ms.mulPose(Vector3f.ZP.rotationDegrees(angle - 90)); ms.mulPose(Axis.ZP.rotationDegrees(angle - 90));
streak(ms, breadth / 2, length, c1, c2, c3, c4); streak(graphics, breadth / 2, length, c1, c2, c3, c4);
ms.popPose(); ms.popPose();
} }
private static void streak(PoseStack ms, int width, int height, int c1, int c2, int c3, int c4) { private static void streak(GuiGraphics graphics, int width, int height, int c1, int c2, int c3, int c4) {
double split1 = .5; double split1 = .5;
double split2 = .75; double split2 = .75;
Matrix4f model = ms.last().pose(); graphics.fillGradient(-width, 0, width, (int) (split1 * height), 0, c1, c2);
ScreenUtils.drawGradientRect(model, 0, -width, 0, width, (int) (split1 * height), c1, c2); graphics.fillGradient(-width, (int) (split1 * height), width, (int) (split2 * height), 0, c2, c3);
ScreenUtils.drawGradientRect(model, 0, -width, (int) (split1 * height), width, (int) (split2 * height), c2, c3); graphics.fillGradient(-width, (int) (split2 * height), width, height, 0, c3, c4);
ScreenUtils.drawGradientRect(model, 0, -width, (int) (split2 * height), width, height, c3, c4);
} }
/** /**
* @see #angledGradient(MatrixStack, float, int, int, int, int, int, Color, Color) * @see #angledGradient(GuiGraphics, float, int, int, int, int, int, Color, Color)
*/ */
public static void angledGradient(@Nonnull PoseStack ms, float angle, int x, int y, int breadth, int length, Couple<Color> c) { public static void angledGradient(GuiGraphics graphics, float angle, int x, int y, int breadth, int length, Couple<Color> c) {
angledGradient(ms, angle, x, y, 0, breadth, length, c); angledGradient(graphics, angle, x, y, 0, breadth, length, c);
} }
/** /**
* @see #angledGradient(MatrixStack, float, int, int, int, int, int, Color, Color) * @see #angledGradient(GuiGraphics, float, int, int, int, int, int, Color, Color)
*/ */
public static void angledGradient(@Nonnull PoseStack ms, float angle, int x, int y, int z, int breadth, int length, Couple<Color> c) { public static void angledGradient(GuiGraphics graphics, float angle, int x, int y, int z, int breadth, int length, Couple<Color> c) {
angledGradient(ms, angle, x, y, z, breadth, length, c.getFirst(), c.getSecond()); angledGradient(graphics, angle, x, y, z, breadth, length, c.getFirst(), c.getSecond());
} }
/** /**
* @see #angledGradient(MatrixStack, float, int, int, int, int, int, Color, Color) * @see #angledGradient(GuiGraphics, float, int, int, int, int, int, Color, Color)
*/ */
public static void angledGradient(@Nonnull PoseStack ms, float angle, int x, int y, int breadth, int length, Color color1, Color color2) { public static void angledGradient(GuiGraphics graphics, float angle, int x, int y, int breadth, int length, Color color1, Color color2) {
angledGradient(ms, angle, x, y, 0, breadth, length, color1, color2); angledGradient(graphics, angle, x, y, 0, breadth, length, color1, color2);
} }
/** /**
@@ -135,31 +138,32 @@ public class UIRenderHelper {
* @param color2 the color at the ending edge * @param color2 the color at the ending edge
* @param breadth the total width of the gradient * @param breadth the total width of the gradient
*/ */
public static void angledGradient(@Nonnull PoseStack ms, float angle, int x, int y, int z, int breadth, int length, Color color1, Color color2) { public static void angledGradient(GuiGraphics graphics, float angle, int x, int y, int z, int breadth, int length, Color color1, Color color2) {
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
ms.translate(x, y, z); ms.translate(x, y, z);
ms.mulPose(Vector3f.ZP.rotationDegrees(angle - 90)); ms.mulPose(Axis.ZP.rotationDegrees(angle - 90));
Matrix4f model = ms.last().pose();
int w = breadth / 2; int w = breadth / 2;
ScreenUtils.drawGradientRect(model, 0, -w, 0, w, length, color1.getRGB(), color2.getRGB()); graphics.fillGradient(-w, 0, w, length, 0, color1.getRGB(), color2.getRGB());
ms.popPose(); ms.popPose();
} }
public static void breadcrumbArrow(PoseStack matrixStack, int x, int y, int z, int width, int height, int indent, Couple<Color> colors) {breadcrumbArrow(matrixStack, x, y, z, width, height, indent, colors.getFirst(), colors.getSecond());} public static void breadcrumbArrow(GuiGraphics graphics, int x, int y, int z, int width, int height, int indent, Couple<Color> colors) {breadcrumbArrow(graphics, x, y, z, width, height, indent, colors.getFirst(), colors.getSecond());}
// draws a wide chevron-style breadcrumb arrow pointing left // draws a wide chevron-style breadcrumb arrow pointing left
public static void breadcrumbArrow(PoseStack matrixStack, int x, int y, int z, int width, int height, int indent, Color startColor, Color endColor) { public static void breadcrumbArrow(GuiGraphics graphics, int x, int y, int z, int width, int height, int indent, Color startColor, Color endColor) {
PoseStack matrixStack = graphics.pose();
matrixStack.pushPose(); matrixStack.pushPose();
matrixStack.translate(x - indent, y, z); matrixStack.translate(x - indent, y, z);
breadcrumbArrow(matrixStack, width, height, indent, startColor, endColor); breadcrumbArrow(graphics, width, height, indent, startColor, endColor);
matrixStack.popPose(); matrixStack.popPose();
} }
private static void breadcrumbArrow(PoseStack ms, int width, int height, int indent, Color c1, Color c2) { private static void breadcrumbArrow(GuiGraphics graphics, int width, int height, int indent, Color c1, Color c2) {
/* /*
* 0,0 x1,y1 ********************* x4,y4 ***** x7,y7 * 0,0 x1,y1 ********************* x4,y4 ***** x7,y7
@@ -189,7 +193,7 @@ public class UIRenderHelper {
Color fc3 = Color.mixColors(c1, c2, (indent + width) / (width + 2f * indent)); Color fc3 = Color.mixColors(c1, c2, (indent + width) / (width + 2f * indent));
Color fc4 = Color.mixColors(c1, c2, 1); Color fc4 = Color.mixColors(c1, c2, 1);
RenderSystem.disableTexture(); // RenderSystem.disableTexture();
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.disableCull(); RenderSystem.disableCull();
RenderSystem.defaultBlendFunc(); RenderSystem.defaultBlendFunc();
@@ -197,7 +201,7 @@ public class UIRenderHelper {
Tesselator tessellator = Tesselator.getInstance(); Tesselator tessellator = Tesselator.getInstance();
BufferBuilder bufferbuilder = tessellator.getBuilder(); BufferBuilder bufferbuilder = tessellator.getBuilder();
Matrix4f model = ms.last().pose(); Matrix4f model = graphics.pose().last().pose();
bufferbuilder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR); bufferbuilder.begin(VertexFormat.Mode.TRIANGLES, DefaultVertexFormat.POSITION_COLOR);
bufferbuilder.vertex(model, x0, y0, 0).color(fc1.getRed(), fc1.getGreen(), fc1.getBlue(), fc1.getAlpha()).endVertex(); bufferbuilder.vertex(model, x0, y0, 0).color(fc1.getRed(), fc1.getGreen(), fc1.getBlue(), fc1.getAlpha()).endVertex();
@@ -227,27 +231,34 @@ public class UIRenderHelper {
tessellator.end(); tessellator.end();
RenderSystem.enableCull(); RenderSystem.enableCull();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.enableTexture(); // RenderSystem.enableTexture();
} }
//just like AbstractGui#drawTexture, but with a color at every vertex //just like AbstractGui#drawTexture, but with a color at every vertex
public static void drawColoredTexture(PoseStack ms, Color c, int x, int y, int tex_left, int tex_top, int width, int height) { public static void drawColoredTexture(GuiGraphics graphics, Color c, int x, int y, int tex_left, int tex_top, int width, int height) {
drawColoredTexture(ms, c, x, y, 0, (float) tex_left, (float) tex_top, width, height, 256, 256); drawColoredTexture(graphics, c, x, y, 0, (float) tex_left, (float) tex_top, width, height, 256, 256);
} }
public static void drawColoredTexture(PoseStack ms, Color c, int x, int y, int z, float tex_left, float tex_top, int width, int height, int sheet_width, int sheet_height) { public static void drawColoredTexture(GuiGraphics graphics, Color c, int x, int y, int z, float tex_left, float tex_top, int width, int height, int sheet_width, int sheet_height) {
drawColoredTexture(ms, c, x, x + width, y, y + height, z, width, height, tex_left, tex_top, sheet_width, sheet_height); drawColoredTexture(graphics, c, x, x + width, y, y + height, z, width, height, tex_left, tex_top, sheet_width, sheet_height);
} }
public static void drawStretched(PoseStack ms, int left, int top, int w, int h, int z, AllGuiTextures tex) { public static void drawStretched(GuiGraphics graphics, int left, int top, int w, int h, int z, AllGuiTextures tex) {
tex.bind(); tex.bind();
drawTexturedQuad(ms.last() drawTexturedQuad(graphics.pose().last()
.pose(), Color.WHITE, left, left + w, top, top + h, z, tex.startX / 256f, (tex.startX + tex.width) / 256f, .pose(), Color.WHITE, left, left + w, top, top + h, z, tex.startX / 256f, (tex.startX + tex.width) / 256f,
tex.startY / 256f, (tex.startY + tex.height) / 256f); tex.startY / 256f, (tex.startY + tex.height) / 256f);
} }
private static void drawColoredTexture(PoseStack ms, Color c, int left, int right, int top, int bot, int z, int tex_width, int tex_height, float tex_left, float tex_top, int sheet_width, int sheet_height) { public static void drawCropped(GuiGraphics graphics, int left, int top, int w, int h, int z, AllGuiTextures tex) {
drawTexturedQuad(ms.last().pose(), c, left, right, top, bot, z, (tex_left + 0.0F) / (float) sheet_width, (tex_left + (float) tex_width) / (float) sheet_width, (tex_top + 0.0F) / (float) sheet_height, (tex_top + (float) tex_height) / (float) sheet_height); tex.bind();
drawTexturedQuad(graphics.pose().last()
.pose(), Color.WHITE, left, left + w, top, top + h, z, tex.startX / 256f, (tex.startX + w) / 256f,
tex.startY / 256f, (tex.startY + h) / 256f);
}
private static void drawColoredTexture(GuiGraphics graphics, Color c, int left, int right, int top, int bot, int z, int tex_width, int tex_height, float tex_left, float tex_top, int sheet_width, int sheet_height) {
drawTexturedQuad(graphics.pose().last().pose(), c, left, right, top, bot, z, (tex_left + 0.0F) / (float) sheet_width, (tex_left + (float) tex_width) / (float) sheet_width, (tex_top + 0.0F) / (float) sheet_height, (tex_top + (float) tex_height) / (float) sheet_height);
} }
private static void drawTexturedQuad(Matrix4f m, Color c, int left, int right, int top, int bot, int z, float u1, float u2, float v1, float v2) { private static void drawTexturedQuad(Matrix4f m, Color c, int left, int right, int top, int bot, int z, float u1, float u2, float v1, float v2) {
@@ -266,7 +277,7 @@ public class UIRenderHelper {
} }
public static void flipForGuiRender(PoseStack poseStack) { public static void flipForGuiRender(PoseStack poseStack) {
poseStack.mulPoseMatrix(Matrix4f.createScaleMatrix(1, -1, 1)); poseStack.mulPoseMatrix(new Matrix4f().scaling(1, -1, 1));
} }
public static class CustomRenderTarget extends RenderTarget { public static class CustomRenderTarget extends RenderTarget {
@@ -291,7 +302,7 @@ public class UIRenderHelper {
float tx = (float) viewWidth / (float) width; float tx = (float) viewWidth / (float) width;
float ty = (float) viewHeight / (float) height; float ty = (float) viewHeight / (float) height;
RenderSystem.enableTexture(); // RenderSystem.enableTexture();
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
RenderSystem.setShader(() -> Minecraft.getInstance().gameRenderer.blitShader); RenderSystem.setShader(() -> Minecraft.getInstance().gameRenderer.blitShader);
RenderSystem.getShader().setSampler("DiffuseSampler", colorTextureId); RenderSystem.getShader().setSampler("DiffuseSampler", colorTextureId);

View File

@@ -1,12 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui.container; package nl.requios.effortlessbuilding.create.foundation.gui.container;
import com.mojang.blaze3d.platform.InputConstants; import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures;
import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget;
import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Widget; import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.components.Renderable;
import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry; import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
@@ -17,6 +15,9 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures;
import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.AbstractSimiWidget;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Collection; import java.util.Collection;
@@ -66,13 +67,13 @@ public abstract class AbstractSimiContainerScreen<T extends AbstractContainerMen
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
protected <W extends GuiEventListener & Widget & NarratableEntry> void addRenderableWidgets(W... widgets) { protected <W extends GuiEventListener & Renderable & NarratableEntry> void addRenderableWidgets(W... widgets) {
for (W widget : widgets) { for (W widget : widgets) {
addRenderableWidget(widget); addRenderableWidget(widget);
} }
} }
protected <W extends GuiEventListener & Widget & NarratableEntry> void addRenderableWidgets(Collection<W> widgets) { protected <W extends GuiEventListener & Renderable & NarratableEntry> void addRenderableWidgets(Collection<W> widgets) {
for (W widget : widgets) { for (W widget : widgets) {
addRenderableWidget(widget); addRenderableWidget(widget);
} }
@@ -91,34 +92,34 @@ public abstract class AbstractSimiContainerScreen<T extends AbstractContainerMen
} }
@Override @Override
public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
partialTicks = minecraft.getFrameTime(); partialTicks = minecraft.getFrameTime();
renderBackground(matrixStack); renderBackground(graphics);
super.render(matrixStack, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks);
renderForeground(matrixStack, mouseX, mouseY, partialTicks); renderForeground(graphics, mouseX, mouseY, partialTicks);
} }
@Override @Override
protected void renderLabels(PoseStack poseStack, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) {
// no-op to prevent screen- and inventory-title from being rendered at incorrect // no-op to prevent screen- and inventory-title from being rendered at incorrect
// location // location
// could also set this.titleX/Y and this.playerInventoryTitleX/Y to the proper // could also set this.titleX/Y and this.playerInventoryTitleX/Y to the proper
// values instead // values instead
} }
protected void renderForeground(PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void renderForeground(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
renderTooltip(ms, mouseX, mouseY); renderTooltip(graphics, mouseX, mouseY);
for (Widget widget : renderables) { for (Renderable widget : renderables) {
if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isHoveredOrFocused()) { if (widget instanceof AbstractSimiWidget simiWidget && simiWidget.isMouseOver(mouseX, mouseY)) {
List<Component> tooltip = simiWidget.getToolTip(); List<Component> tooltip = simiWidget.getToolTip();
if (tooltip.isEmpty()) if (tooltip.isEmpty())
continue; continue;
int ttx = simiWidget.lockedTooltipX == -1 ? mouseX : simiWidget.lockedTooltipX + simiWidget.x; int ttx = simiWidget.lockedTooltipX == -1 ? mouseX : simiWidget.lockedTooltipX + simiWidget.getX();
int tty = simiWidget.lockedTooltipY == -1 ? mouseY : simiWidget.lockedTooltipY + simiWidget.y; int tty = simiWidget.lockedTooltipY == -1 ? mouseY : simiWidget.lockedTooltipY + simiWidget.getY();
renderComponentTooltip(ms, tooltip, ttx, tty); graphics.renderComponentTooltip(font, tooltip, ttx, tty);
} }
} }
} }
@@ -127,19 +128,26 @@ public abstract class AbstractSimiContainerScreen<T extends AbstractContainerMen
return leftPos - windowXOffset + (imageWidth - textureWidth) / 2; return leftPos - windowXOffset + (imageWidth - textureWidth) / 2;
} }
// public void renderPlayerInventory(PoseStack ms, int x, int y) { // public void renderPlayerInventory(GuiGraphics graphics, int x, int y) {
// AllGuiTextures.PLAYER_INVENTORY.render(ms, x, y, this); // AllGuiTextures.PLAYER_INVENTORY.render(graphics, x, y);
// font.draw(ms, playerInventoryTitle, x + 8, y + 6, 0x404040); // graphics.drawString(font, playerInventoryTitle, x + 8, y + 6, 0x404040, false);
// } // }
@Override @Override
public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) { public boolean keyPressed(int pKeyCode, int pScanCode, int pModifiers) {
InputConstants.Key mouseKey = InputConstants.getKey(pKeyCode, pScanCode); InputConstants.Key mouseKey = InputConstants.getKey(pKeyCode, pScanCode);
if (getFocused() != null && this.minecraft.options.keyInventory.isActiveAndMatches(mouseKey)) if (getFocused() instanceof EditBox && this.minecraft.options.keyInventory.isActiveAndMatches(mouseKey))
return false; return false;
return super.keyPressed(pKeyCode, pScanCode, pModifiers); return super.keyPressed(pKeyCode, pScanCode, pModifiers);
} }
@Override
public boolean mouseClicked(double pMouseX, double pMouseY, int pButton) {
if (getFocused() != null && !getFocused().isMouseOver(pMouseX, pMouseY))
setFocused(null);
return super.mouseClicked(pMouseX, pMouseY, pButton);
}
@Override @Override
public GuiEventListener getFocused() { public GuiEventListener getFocused() {
GuiEventListener focused = super.getFocused(); GuiEventListener focused = super.getFocused();
@@ -160,14 +168,14 @@ public abstract class AbstractSimiContainerScreen<T extends AbstractContainerMen
} }
@Deprecated @Deprecated
protected void debugWindowArea(PoseStack matrixStack) { protected void debugWindowArea(GuiGraphics graphics) {
fill(matrixStack, leftPos + imageWidth, topPos + imageHeight, leftPos, topPos, 0xD3D3D3D3); graphics.fill(leftPos + imageWidth, topPos + imageHeight, leftPos, topPos, 0xD3D3D3D3);
} }
@Deprecated @Deprecated
protected void debugExtraAreas(PoseStack matrixStack) { protected void debugExtraAreas(GuiGraphics graphics) {
for (Rect2i area : getExtraAreas()) { for (Rect2i area : getExtraAreas()) {
fill(matrixStack, area.getX() + area.getWidth(), area.getY() + area.getHeight(), area.getX(), area.getY(), graphics.fill(area.getX() + area.getWidth(), area.getY() + area.getHeight(), area.getX(), area.getY(),
0xD3D3D3D3); 0xD3D3D3D3);
} }
} }

View File

@@ -1,35 +0,0 @@
package nl.requios.effortlessbuilding.create.foundation.gui.container;
import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.network.NetworkEvent.Context;
import java.util.function.Supplier;
public class ClearContainerPacket extends SimplePacketBase {
public ClearContainerPacket() {}
public ClearContainerPacket(FriendlyByteBuf buffer) {}
@Override
public void write(FriendlyByteBuf buffer) {}
@Override
public void handle(Supplier<Context> context) {
context.get()
.enqueueWork(() -> {
ServerPlayer player = context.get()
.getSender();
if (player == null)
return;
if (!(player.containerMenu instanceof IClearableContainer))
return;
((IClearableContainer) player.containerMenu).clearContents();
});
context.get()
.setPacketHandled(true);
}
}

View File

@@ -0,0 +1,30 @@
package nl.requios.effortlessbuilding.create.foundation.gui.container;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraftforge.network.NetworkEvent.Context;
import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase;
public class ClearMenuPacket extends SimplePacketBase {
public ClearMenuPacket() {}
public ClearMenuPacket(FriendlyByteBuf buffer) {}
@Override
public void write(FriendlyByteBuf buffer) {}
@Override
public boolean handle(Context context) {
context.enqueueWork(() -> {
ServerPlayer player = context.getSender();
if (player == null)
return;
if (!(player.containerMenu instanceof IClearableMenu))
return;
((IClearableMenu) player.containerMenu).clearContents();
});
return true;
}
}

View File

@@ -10,15 +10,15 @@ import net.minecraft.world.item.ItemStack;
import net.minecraftforge.items.ItemHandlerHelper; import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
public abstract class GhostItemContainer<T> extends ContainerBase<T> implements IClearableContainer { public abstract class GhostItemMenu<T> extends MenuBase<T> implements IClearableMenu {
public ItemStackHandler ghostInventory; public ItemStackHandler ghostInventory;
protected GhostItemContainer(MenuType<?> type, int id, Inventory inv, FriendlyByteBuf extraData) { protected GhostItemMenu(MenuType<?> type, int id, Inventory inv, FriendlyByteBuf extraData) {
super(type, id, inv, extraData); super(type, id, inv, extraData);
} }
protected GhostItemContainer(MenuType<?> type, int id, Inventory inv, T contentHolder) { protected GhostItemMenu(MenuType<?> type, int id, Inventory inv, T contentHolder) {
super(type, id, inv, contentHolder); super(type, id, inv, contentHolder);
} }

View File

@@ -1,12 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui.container; package nl.requios.effortlessbuilding.create.foundation.gui.container;
import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent.Context; import net.minecraftforge.network.NetworkEvent.Context;
import nl.requios.effortlessbuilding.create.foundation.networking.SimplePacketBase;
import java.util.function.Supplier;
public class GhostItemSubmitPacket extends SimplePacketBase { public class GhostItemSubmitPacket extends SimplePacketBase {
@@ -30,23 +28,18 @@ public class GhostItemSubmitPacket extends SimplePacketBase {
} }
@Override @Override
public void handle(Supplier<Context> context) { public boolean handle(Context context) {
context.get() context.enqueueWork(() -> {
.enqueueWork(() -> { ServerPlayer player = context.getSender();
ServerPlayer player = context.get() if (player == null)
.getSender(); return;
if (player == null)
return;
if (player.containerMenu instanceof GhostItemContainer) { if (player.containerMenu instanceof GhostItemMenu<?> menu) {
GhostItemContainer<?> c = (GhostItemContainer<?>) player.containerMenu; menu.ghostInventory.setStackInSlot(slot, item);
c.ghostInventory.setStackInSlot(slot, item); menu.getSlot(36 + slot).setChanged();
c.getSlot(36 + slot).setChanged(); }
} });
return true;
});
context.get()
.setPacketHandled(true);
} }
} }

View File

@@ -1,14 +0,0 @@
package nl.requios.effortlessbuilding.create.foundation.gui.container;
//import nl.requios.effortlessbuilding.create.foundation.networking.AllPackets;
public interface IClearableContainer {
default void sendClearPacket() {
// AllPackets.channel.sendToServer(new ClearContainerPacket());
}
@Deprecated //warning: does not work
public void clearContents();
}

View File

@@ -0,0 +1,11 @@
package nl.requios.effortlessbuilding.create.foundation.gui.container;
public interface IClearableMenu {
default void sendClearPacket() {
// PacketHandler.INSTANCE.sendToServer(new ClearMenuPacket());
}
public void clearContents();
}

View File

@@ -1,6 +1,5 @@
package nl.requios.effortlessbuilding.create.foundation.gui.container; package nl.requios.effortlessbuilding.create.foundation.gui.container;
import nl.requios.effortlessbuilding.create.foundation.utility.IInteractionChecker;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@@ -9,19 +8,20 @@ import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.inventory.Slot; import net.minecraft.world.inventory.Slot;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.create.foundation.utility.IInteractionChecker;
public abstract class ContainerBase<T> extends AbstractContainerMenu { public abstract class MenuBase<T> extends AbstractContainerMenu {
public Player player; public Player player;
public Inventory playerInventory; public Inventory playerInventory;
public T contentHolder; public T contentHolder;
protected ContainerBase(MenuType<?> type, int id, Inventory inv, FriendlyByteBuf extraData) { protected MenuBase(MenuType<?> type, int id, Inventory inv, FriendlyByteBuf extraData) {
super(type, id); super(type, id);
init(inv, createOnClient(extraData)); init(inv, createOnClient(extraData));
} }
protected ContainerBase(MenuType<?> type, int id, Inventory inv, T contentHolder) { protected MenuBase(MenuType<?> type, int id, Inventory inv, T contentHolder) {
super(type, id); super(type, id);
init(inv, contentHolder); init(inv, contentHolder);
} }

View File

@@ -1,11 +1,16 @@
package nl.requios.effortlessbuilding.create.foundation.gui.element; package nl.requios.effortlessbuilding.create.foundation.gui.element;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.*; import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.math.Matrix4f; import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer;
import nl.requios.effortlessbuilding.create.foundation.utility.Color; import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.Couple; import nl.requios.effortlessbuilding.create.foundation.utility.Couple;
import net.minecraft.client.renderer.GameRenderer; import org.joml.Matrix4f;
public class BoxElement extends RenderElement { public class BoxElement extends RenderElement {
@@ -60,8 +65,8 @@ public class BoxElement extends RenderElement {
} }
@Override @Override
public void render(PoseStack ms) { public void render(GuiGraphics graphics) {
renderBox(ms); renderBox(graphics.pose());
} }
//total box width = 1 * 2 (outer border) + 1 * 2 (inner color border) + 2 * borderOffset + width //total box width = 1 * 2 (outer border) + 1 * 2 (inner color border) + 2 * borderOffset + width
@@ -83,7 +88,7 @@ public class BoxElement extends RenderElement {
* |_____________| * |_____________|
* *
* */ * */
RenderSystem.disableTexture(); // RenderSystem.disableTexture();
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc(); RenderSystem.defaultBlendFunc();
RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.setShader(GameRenderer::getPositionColorShader);
@@ -148,6 +153,6 @@ public class BoxElement extends RenderElement {
tessellator.end(); tessellator.end();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.enableTexture(); // RenderSystem.enableTexture();
} }
} }

View File

@@ -1,8 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui.element; package nl.requios.effortlessbuilding.create.foundation.gui.element;
import javax.annotation.Nonnull;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import javax.annotation.Nonnull; import net.minecraft.client.gui.GuiGraphics;
public class CombinedStencilElement extends StencilElement { public class CombinedStencilElement extends StencilElement {
@@ -43,26 +45,27 @@ public class CombinedStencilElement extends StencilElement {
} }
@Override @Override
protected void renderStencil(PoseStack ms) { protected void renderStencil(GuiGraphics graphics) {
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
element1.transform(ms); element1.transform(ms);
element1.withBounds(width, height); element1.withBounds(width, height);
element1.renderStencil(ms); element1.renderStencil(graphics);
ms.popPose(); ms.popPose();
ms.pushPose(); ms.pushPose();
element2.transform(ms); element2.transform(ms);
element2.withBounds(width, height); element2.withBounds(width, height);
element2.renderStencil(ms); element2.renderStencil(graphics);
ms.popPose(); ms.popPose();
} }
@Override @Override
protected void renderElement(PoseStack ms) { protected void renderElement(GuiGraphics graphics) {
if (mode.rendersFirst()) if (mode.rendersFirst())
element1.<StencilElement>withBounds(width, height).renderElement(ms); element1.<StencilElement>withBounds(width, height).renderElement(graphics);
if (mode.rendersSecond()) if (mode.rendersSecond())
element2.<StencilElement>withBounds(width, height).renderElement(ms); element2.<StencilElement>withBounds(width, height).renderElement(graphics);
} }
public enum ElementMode { public enum ElementMode {

View File

@@ -1,13 +1,13 @@
package nl.requios.effortlessbuilding.create.foundation.gui.element; package nl.requios.effortlessbuilding.create.foundation.gui.element;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper; import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper;
import nl.requios.effortlessbuilding.create.foundation.utility.Color; import nl.requios.effortlessbuilding.create.foundation.utility.Color;
public class DelegatedStencilElement extends StencilElement { public class DelegatedStencilElement extends StencilElement {
protected static final ElementRenderer EMPTY_RENDERER = (ms, width, height, alpha) -> {}; protected static final ElementRenderer EMPTY_RENDERER = (graphics, width, height, alpha) -> {};
protected static final ElementRenderer DEFAULT_ELEMENT = (ms, width, height, alpha) -> UIRenderHelper.angledGradient(ms, 0, -3, 5, height+4, width+6, new Color(0xff_10dd10).scaleAlpha(alpha), new Color(0xff_1010dd).scaleAlpha(alpha)); protected static final ElementRenderer DEFAULT_ELEMENT = (graphics, width, height, alpha) -> UIRenderHelper.angledGradient(graphics, 0, -3, 5, height+4, width+6, new Color(0xff_10dd10).scaleAlpha(alpha), new Color(0xff_1010dd).scaleAlpha(alpha));
protected ElementRenderer stencil; protected ElementRenderer stencil;
protected ElementRenderer element; protected ElementRenderer element;
@@ -35,18 +35,18 @@ public class DelegatedStencilElement extends StencilElement {
} }
@Override @Override
protected void renderStencil(PoseStack ms) { protected void renderStencil(GuiGraphics graphics) {
stencil.render(ms, width, height, 1); stencil.render(graphics, width, height, 1);
} }
@Override @Override
protected void renderElement(PoseStack ms) { protected void renderElement(GuiGraphics graphics) {
element.render(ms, width, height, alpha); element.render(graphics, width, height, alpha);
} }
@FunctionalInterface @FunctionalInterface
public interface ElementRenderer { public interface ElementRenderer {
void render(PoseStack ms, int width, int height, float alpha); void render(GuiGraphics graphics, int width, int height, float alpha);
} }
} }

View File

@@ -7,25 +7,21 @@ import com.mojang.blaze3d.platform.GlStateManager.SourceFactor;
import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.platform.Lighting;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
//import nl.requios.effortlessbuilding.create.foundation.fluid.FluidRenderer;
import nl.requios.effortlessbuilding.create.foundation.gui.ILightingSettings;
import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.VecHelper;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.BlockRenderDispatcher;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.inventory.InventoryMenu;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.BaseFireBlock; import net.minecraft.world.level.block.BaseFireBlock;
@@ -35,7 +31,10 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.client.RenderTypeHelper; import net.minecraftforge.client.RenderTypeHelper;
import net.minecraftforge.fluids.FluidStack; import nl.requios.effortlessbuilding.create.foundation.gui.ILightingSettings;
import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.VecHelper;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -125,9 +124,9 @@ public class GuiGameElement {
matrixStack.translate(xLocal, yLocal, zLocal); matrixStack.translate(xLocal, yLocal, zLocal);
UIRenderHelper.flipForGuiRender(matrixStack); UIRenderHelper.flipForGuiRender(matrixStack);
matrixStack.translate(rotationOffset.x, rotationOffset.y, rotationOffset.z); matrixStack.translate(rotationOffset.x, rotationOffset.y, rotationOffset.z);
matrixStack.mulPose(Vector3f.ZP.rotationDegrees((float) zRot)); matrixStack.mulPose(Axis.ZP.rotationDegrees((float) zRot));
matrixStack.mulPose(Vector3f.XP.rotationDegrees((float) xRot)); matrixStack.mulPose(Axis.XP.rotationDegrees((float) xRot));
matrixStack.mulPose(Vector3f.YP.rotationDegrees((float) yRot)); matrixStack.mulPose(Axis.YP.rotationDegrees((float) yRot));
matrixStack.translate(-rotationOffset.x, -rotationOffset.y, -rotationOffset.z); matrixStack.translate(-rotationOffset.x, -rotationOffset.y, -rotationOffset.z);
} }
@@ -162,7 +161,8 @@ public class GuiGameElement {
} }
@Override @Override
public void render(PoseStack matrixStack) { public void render(GuiGraphics graphics) {
PoseStack matrixStack = graphics.pose();
prepareMatrix(matrixStack); prepareMatrix(matrixStack);
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
@@ -256,7 +256,8 @@ public class GuiGameElement {
} }
@Override @Override
public void render(PoseStack matrixStack) { public void render(GuiGraphics graphics) {
PoseStack matrixStack = graphics.pose();
prepareMatrix(matrixStack); prepareMatrix(matrixStack);
transformMatrix(matrixStack); transformMatrix(matrixStack);
renderItemIntoGUI(matrixStack, stack, customLighting == null); renderItemIntoGUI(matrixStack, stack, customLighting == null);
@@ -270,10 +271,11 @@ public class GuiGameElement {
renderer.textureManager.getTexture(InventoryMenu.BLOCK_ATLAS).setFilter(false, false); renderer.textureManager.getTexture(InventoryMenu.BLOCK_ATLAS).setFilter(false, false);
RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.enableCull();
RenderSystem.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA); RenderSystem.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
matrixStack.pushPose(); matrixStack.pushPose();
matrixStack.translate(0, 0, 100.0F + renderer.blitOffset); matrixStack.translate(0, 0, 100.0F);
matrixStack.translate(8.0F, -8.0F, 0.0F); matrixStack.translate(8.0F, -8.0F, 0.0F);
matrixStack.scale(16.0F, 16.0F, 16.0F); matrixStack.scale(16.0F, 16.0F, 16.0F);
MultiBufferSource.BufferSource buffer = Minecraft.getInstance().renderBuffers().bufferSource(); MultiBufferSource.BufferSource buffer = Minecraft.getInstance().renderBuffers().bufferSource();
@@ -282,8 +284,10 @@ public class GuiGameElement {
Lighting.setupForFlatItems(); Lighting.setupForFlatItems();
} }
renderer.render(stack, ItemTransforms.TransformType.GUI, false, matrixStack, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, bakedModel); renderer.render(stack, ItemDisplayContext.GUI, false, matrixStack, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, bakedModel);
RenderSystem.disableDepthTest();
buffer.endBatch(); buffer.endBatch();
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
if (useDefaultLighting && flatLighting) { if (useDefaultLighting && flatLighting) {
Lighting.setupFor3DItems(); Lighting.setupFor3DItems();

View File

@@ -1,12 +1,12 @@
package nl.requios.effortlessbuilding.create.foundation.gui.element; package nl.requios.effortlessbuilding.create.foundation.gui.element;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
public abstract class RenderElement implements ScreenElement { public abstract class RenderElement implements ScreenElement {
public static final RenderElement EMPTY = new RenderElement() { public static final RenderElement EMPTY = new RenderElement() {
@Override @Override
public void render(PoseStack ms) { public void render(GuiGraphics graphics) {
} }
}; };
@@ -66,11 +66,11 @@ public abstract class RenderElement implements ScreenElement {
return z; return z;
} }
public abstract void render(PoseStack ms); public abstract void render(GuiGraphics graphics);
@Override @Override
public void render(PoseStack ms, int x, int y) { public void render(GuiGraphics graphics, int x, int y) {
this.at(x, y).render(ms); this.at(x, y).render(graphics);
} }
public static class SimpleRenderElement extends RenderElement { public static class SimpleRenderElement extends RenderElement {
@@ -82,8 +82,8 @@ public abstract class RenderElement implements ScreenElement {
} }
@Override @Override
public void render(PoseStack ms) { public void render(GuiGraphics graphics) {
renderable.render(ms, (int) x, (int) y); renderable.render(graphics, (int) x, (int) y);
} }
} }
} }

View File

@@ -1,12 +1,12 @@
package nl.requios.effortlessbuilding.create.foundation.gui.element; package nl.requios.effortlessbuilding.create.foundation.gui.element;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
public interface ScreenElement { public interface ScreenElement {
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
void render(PoseStack ms, int x, int y); void render(GuiGraphics graphics, int x, int y);
} }

View File

@@ -1,27 +1,31 @@
package nl.requios.effortlessbuilding.create.foundation.gui.element; package nl.requios.effortlessbuilding.create.foundation.gui.element;
import org.lwjgl.opengl.GL11;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.GuiGraphics;
public abstract class StencilElement extends RenderElement { public abstract class StencilElement extends RenderElement {
@Override @Override
public void render(PoseStack ms) { public void render(GuiGraphics graphics) {
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
transform(ms); transform(ms);
prepareStencil(ms); prepareStencil(ms);
renderStencil(ms); renderStencil(graphics);
prepareElement(ms); prepareElement(ms);
renderElement(ms); renderElement(graphics);
cleanUp(ms); cleanUp(ms);
ms.popPose(); ms.popPose();
} }
protected abstract void renderStencil(PoseStack ms); protected abstract void renderStencil(GuiGraphics graphics);
protected abstract void renderElement(PoseStack ms); protected abstract void renderElement(GuiGraphics graphics);
protected void transform(PoseStack ms) { protected void transform(PoseStack ms) {
ms.translate(x, y, z); ms.translate(x, y, z);

View File

@@ -1,9 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui.element; package nl.requios.effortlessbuilding.create.foundation.gui.element;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
public class TextStencilElement extends DelegatedStencilElement { public class TextStencilElement extends DelegatedStencilElement {
@@ -45,8 +46,7 @@ public class TextStencilElement extends DelegatedStencilElement {
} }
@Override @Override
protected void renderStencil(PoseStack ms) { protected void renderStencil(GuiGraphics graphics) {
float x = 0, y = 0; float x = 0, y = 0;
if (centerHorizontally) if (centerHorizontally)
x = width / 2f - font.width(component) / 2f; x = width / 2f - font.width(component) / 2f;
@@ -54,11 +54,11 @@ public class TextStencilElement extends DelegatedStencilElement {
if (centerVertically) if (centerVertically)
y = height / 2f - (font.lineHeight - 1) / 2f; y = height / 2f - (font.lineHeight - 1) / 2f;
font.draw(ms, component, x, y, 0xff_000000); graphics.drawString(font, component, Math.round(x), Math.round(y), 0xff_000000, false);
} }
@Override @Override
protected void renderElement(PoseStack ms) { protected void renderElement(GuiGraphics graphics) {
float x = 0, y = 0; float x = 0, y = 0;
if (centerHorizontally) if (centerHorizontally)
x = width / 2f - font.width(component) / 2f; x = width / 2f - font.width(component) / 2f;
@@ -66,9 +66,10 @@ public class TextStencilElement extends DelegatedStencilElement {
if (centerVertically) if (centerVertically)
y = height / 2f - (font.lineHeight - 1) / 2f; y = height / 2f - (font.lineHeight - 1) / 2f;
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
ms.translate(x, y, 0); ms.translate(x, y, 0);
element.render(ms, font.width(component), font.lineHeight + 2, alpha); element.render(graphics, font.width(component), font.lineHeight + 2, alpha);
ms.popPose(); ms.popPose();
} }

View File

@@ -1,11 +1,13 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.gui.narration.NarrationElementOutput;
import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner;
import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import nl.requios.effortlessbuilding.create.foundation.gui.TickableGuiEventListener;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.LinkedList; import java.util.LinkedList;
@@ -15,12 +17,13 @@ import java.util.function.BiConsumer;
public abstract class AbstractSimiWidget extends AbstractWidget implements TickableGuiEventListener { public abstract class AbstractSimiWidget extends AbstractWidget implements TickableGuiEventListener {
public static final int HEADER_RGB = 0x5391E1; public static final int HEADER_RGB = 0x5391E1;
public static final int HINT_RGB = 0x96B7E0;
protected float z; protected float z;
protected boolean wasHovered = false; protected boolean wasHovered = false;
protected List<Component> toolTip = new LinkedList<>(); protected List<Component> toolTip = new LinkedList<>();
protected BiConsumer<Integer, Integer> onClick = (_$, _$$) -> {}; protected BiConsumer<Integer, Integer> onClick = (_$, _$$) -> {};
public int lockedTooltipX = -1; public int lockedTooltipX = -1;
public int lockedTooltipY = -1; public int lockedTooltipY = -1;
@@ -36,6 +39,11 @@ public abstract class AbstractSimiWidget extends AbstractWidget implements Ticka
super(x, y, width, height, message); super(x, y, width, height, message);
} }
@Override
protected ClientTooltipPositioner createTooltipPositioner() {
return DefaultTooltipPositioner.INSTANCE;
}
public <T extends AbstractSimiWidget> T withCallback(BiConsumer<Integer, Integer> cb) { public <T extends AbstractSimiWidget> T withCallback(BiConsumer<Integer, Integer> cb) {
this.onClick = cb; this.onClick = cb;
//noinspection unchecked //noinspection unchecked
@@ -60,26 +68,22 @@ public abstract class AbstractSimiWidget extends AbstractWidget implements Ticka
public void tick() {} public void tick() {}
@Override @Override
public void render(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void renderWidget(@Nonnull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
if (visible) { beforeRender(graphics, mouseX, mouseY, partialTicks);
isHovered = mouseX >= x && mouseY >= y && mouseX < x + width && mouseY < y + height; doRender(graphics, mouseX, mouseY, partialTicks);
beforeRender(ms, mouseX, mouseY, partialTicks); afterRender(graphics, mouseX, mouseY, partialTicks);
renderButton(ms, mouseX, mouseY, partialTicks); wasHovered = isHoveredOrFocused();
afterRender(ms, mouseX, mouseY, partialTicks);
wasHovered = isHoveredOrFocused();
}
} }
protected void beforeRender(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void beforeRender(@Nonnull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
ms.pushPose(); graphics.pose().pushPose();
} }
@Override protected void doRender(@Nonnull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
public void renderButton(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) {
} }
protected void afterRender(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void afterRender(@Nonnull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
ms.popPose(); graphics.pose().popPose();
} }
public void runCallback(double mouseX, double mouseY) { public void runCallback(double mouseX, double mouseY) {
@@ -92,7 +96,7 @@ public abstract class AbstractSimiWidget extends AbstractWidget implements Ticka
} }
@Override @Override
public void updateNarration(NarrationElementOutput pNarrationElementOutput) { public void updateWidgetNarration(NarrationElementOutput pNarrationElementOutput) {
defaultButtonNarrationText(pNarrationElementOutput); defaultButtonNarrationText(pNarrationElementOutput);
} }
} }

View File

@@ -1,8 +1,7 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.foundation.gui.Theme; import nl.requios.effortlessbuilding.create.foundation.gui.Theme;
import nl.requios.effortlessbuilding.create.foundation.gui.Theme.Key;
import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper; import nl.requios.effortlessbuilding.create.foundation.gui.UIRenderHelper;
import nl.requios.effortlessbuilding.create.foundation.gui.element.BoxElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.BoxElement;
import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.DelegatedStencilElement;
@@ -10,7 +9,6 @@ import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.Couple; import nl.requios.effortlessbuilding.create.foundation.utility.Couple;
import nl.requios.effortlessbuilding.create.foundation.utility.animation.LerpedFloat; import nl.requios.effortlessbuilding.create.foundation.utility.animation.LerpedFloat;
import javax.annotation.Nonnull;
import java.util.function.Function; import java.util.function.Function;
public class BoxWidget extends ElementWidget { public class BoxWidget extends ElementWidget {
@@ -98,8 +96,8 @@ public class BoxWidget extends ElementWidget {
} }
@Override @Override
protected void beforeRender(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void beforeRender(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
super.beforeRender(ms, mouseX, mouseY, partialTicks); super.beforeRender(graphics, mouseX, mouseY, partialTicks);
if (isHovered != wasHovered) { if (isHovered != wasHovered) {
startGradientAnimation( startGradientAnimation(
@@ -121,7 +119,7 @@ public class BoxWidget extends ElementWidget {
} }
@Override @Override
public void renderButton(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void doRender(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
float fadeValue = fade.getValue(partialTicks); float fadeValue = fade.getValue(partialTicks);
if (fadeValue < .1f) if (fadeValue < .1f)
return; return;
@@ -129,11 +127,11 @@ public class BoxWidget extends ElementWidget {
box.withAlpha(fadeValue); box.withAlpha(fadeValue);
box.withBackground(customBackground != null ? customBackground : Theme.c(Theme.Key.PONDER_BACKGROUND_TRANSPARENT)) box.withBackground(customBackground != null ? customBackground : Theme.c(Theme.Key.PONDER_BACKGROUND_TRANSPARENT))
.gradientBorder(gradientColor1, gradientColor2) .gradientBorder(gradientColor1, gradientColor2)
.at(x, y, z) .at(getX(), getY(), z)
.withBounds(width, height) .withBounds(width, height)
.render(ms); .render(graphics);
super.renderButton(ms, mouseX, mouseY, partialTicks); super.doRender(graphics, mouseX, mouseY, partialTicks);
wasHovered = isHovered; wasHovered = isHovered;
} }
@@ -146,9 +144,9 @@ public class BoxWidget extends ElementWidget {
float padX = 2 + paddingX; float padX = 2 + paddingX;
float padY = 2 + paddingY; float padY = 2 + paddingY;
return x - padX <= mX && y - padY <= mY && mX < x + padX + width && mY < y + padY + height; return getX() - padX <= mX && getY() - padY <= mY && mX < getX() + padX + width && mY < getY() + padY + height;
} }
@Override @Override
protected boolean clicked(double pMouseX, double pMouseY) { protected boolean clicked(double pMouseX, double pMouseY) {
if (!active || !visible) if (!active || !visible)
@@ -209,19 +207,19 @@ public class BoxWidget extends ElementWidget {
return customBorderBot != null ? customBorderBot : Theme.c(getIdleTheme(), false); return customBorderBot != null ? customBorderBot : Theme.c(getIdleTheme(), false);
} }
public Key getDisabledTheme() { public Theme.Key getDisabledTheme() {
return Theme.Key.BUTTON_DISABLE; return Theme.Key.BUTTON_DISABLE;
} }
public Key getIdleTheme() { public Theme.Key getIdleTheme() {
return Theme.Key.BUTTON_IDLE; return Theme.Key.BUTTON_IDLE;
} }
public Key getHoverTheme() { public Theme.Key getHoverTheme() {
return Theme.Key.BUTTON_HOVER; return Theme.Key.BUTTON_HOVER;
} }
public Key getClickTheme() { public Theme.Key getClickTheme() {
return Theme.Key.BUTTON_CLICK; return Theme.Key.BUTTON_CLICK;
} }

View File

@@ -1,11 +1,11 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.foundation.gui.element.RenderElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.RenderElement;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import nl.requios.effortlessbuilding.create.foundation.utility.animation.LerpedFloat; import nl.requios.effortlessbuilding.create.foundation.utility.animation.LerpedFloat;
import javax.annotation.Nonnull;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
@@ -117,21 +117,22 @@ public class ElementWidget extends AbstractSimiWidget {
} }
@Override @Override
protected void beforeRender(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) { protected void beforeRender(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
super.beforeRender(ms, mouseX, mouseY, partialTicks); super.beforeRender(graphics, mouseX, mouseY, partialTicks);
isHovered = isMouseOver(mouseX, mouseY); isHovered = isMouseOver(mouseX, mouseY);
float fadeValue = fade.getValue(partialTicks); float fadeValue = fade.getValue(partialTicks);
element.withAlpha(fadeValue); element.withAlpha(fadeValue);
if (fadeValue < 1) { if (fadeValue < 1) {
ms.translate((1 - fadeValue) * fadeModX, (1 - fadeValue) * fadeModY, 0); graphics.pose().translate((1 - fadeValue) * fadeModX, (1 - fadeValue) * fadeModY, 0);
} }
} }
@Override @Override
public void renderButton(@Nonnull PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void doRender(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
PoseStack ms = graphics.pose();
ms.pushPose(); ms.pushPose();
ms.translate(x + paddingX, y + paddingY, z); ms.translate(getX() + paddingX, getY() + paddingY, z);
float innerWidth = width - 2 * paddingX; float innerWidth = width - 2 * paddingX;
float innerHeight = height - 2 * paddingY; float innerHeight = height - 2 * paddingY;
float eX = element.getX(), eY = element.getY(); float eX = element.getX(), eY = element.getY();
@@ -143,7 +144,7 @@ public class ElementWidget extends AbstractSimiWidget {
innerWidth /= xScale; innerWidth /= xScale;
innerHeight /= yScale; innerHeight /= yScale;
} }
element.withBounds((int) innerWidth, (int) innerHeight).render(ms); element.withBounds((int) innerWidth, (int) innerHeight).render(graphics);
ms.popPose(); ms.popPose();
if (rescaleElement) { if (rescaleElement) {
element.at(eX, eY); element.at(eX, eY);

View File

@@ -1,12 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures; import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures;
import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement; import nl.requios.effortlessbuilding.create.foundation.gui.element.ScreenElement;
import net.minecraft.network.chat.Component;
import javax.annotation.Nonnull;
public class IconButton extends AbstractSimiWidget { public class IconButton extends AbstractSimiWidget {
@@ -15,29 +13,28 @@ public class IconButton extends AbstractSimiWidget {
public IconButton(int x, int y, ScreenElement icon) { public IconButton(int x, int y, ScreenElement icon) {
this(x, y, 18, 18, icon); this(x, y, 18, 18, icon);
} }
public IconButton(int x, int y, int w, int h, ScreenElement icon) { public IconButton(int x, int y, int w, int h, ScreenElement icon) {
super(x, y, w, h); super(x, y, w, h);
this.icon = icon; this.icon = icon;
} }
@Override @Override
public void renderButton(@Nonnull PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { public void doRender(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
if (visible) { if (visible) {
isHovered = mouseX >= x && mouseY >= y && mouseX < x + width && mouseY < y + height; isHovered = mouseX >= getX() && mouseY >= getY() && mouseX < getX() + width && mouseY < getY() + height;
AllGuiTextures button = !active ? AllGuiTextures.BUTTON_DOWN AllGuiTextures button = !active ? AllGuiTextures.BUTTON_DOWN
: isHoveredOrFocused() ? AllGuiTextures.BUTTON_HOVER : AllGuiTextures.BUTTON; : isMouseOver(mouseX, mouseY) ? AllGuiTextures.BUTTON_HOVER : AllGuiTextures.BUTTON;
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
drawBg(matrixStack, button); drawBg(graphics, button);
icon.render(matrixStack, x + 1, y + 1); icon.render(graphics, getX() + 1, getY() + 1);
} }
} }
protected void drawBg(PoseStack matrixStack, AllGuiTextures button) { protected void drawBg(GuiGraphics graphics, AllGuiTextures button) {
AllGuiTextures.BUTTON.bind(); graphics.blit(button.location, getX(), getY(), button.startX, button.startY, button.width, button.height);
blit(matrixStack, x, y, button.startX, button.startY, button.width, button.height);
} }
public void setToolTip(Component text) { public void setToolTip(Component text) {

View File

@@ -1,11 +1,9 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import nl.requios.effortlessbuilding.create.foundation.gui.AllGuiTextures;
import javax.annotation.Nonnull;
public class Indicator extends AbstractSimiWidget { public class Indicator extends AbstractSimiWidget {
@@ -13,12 +11,12 @@ public class Indicator extends AbstractSimiWidget {
public Indicator(int x, int y, Component tooltip) { public Indicator(int x, int y, Component tooltip) {
super(x, y, AllGuiTextures.INDICATOR.width, AllGuiTextures.INDICATOR.height); super(x, y, AllGuiTextures.INDICATOR.width, AllGuiTextures.INDICATOR.height);
this.toolTip = ImmutableList.of(tooltip); this.toolTip = toolTip.isEmpty() ? ImmutableList.of() : ImmutableList.of(tooltip);
this.state = State.OFF; this.state = State.OFF;
} }
@Override @Override
public void render(@Nonnull PoseStack matrixStack, int mouseX, int mouseY, float partialTicks ) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks ) {
if (!visible) if (!visible)
return; return;
AllGuiTextures toDraw; AllGuiTextures toDraw;
@@ -30,7 +28,7 @@ public class Indicator extends AbstractSimiWidget {
case GREEN: toDraw = AllGuiTextures.INDICATOR_GREEN; break; case GREEN: toDraw = AllGuiTextures.INDICATOR_GREEN; break;
default: toDraw = AllGuiTextures.INDICATOR; break; default: toDraw = AllGuiTextures.INDICATOR; break;
} }
toDraw.render(matrixStack, x, y, this); toDraw.render(graphics, getX(), getY());
} }
public enum State { public enum State {

View File

@@ -1,12 +1,12 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@@ -44,12 +44,12 @@ public class Label extends AbstractSimiWidget {
public void setTextAndTrim(Component newText, boolean trimFront, int maxWidthPx) { public void setTextAndTrim(Component newText, boolean trimFront, int maxWidthPx) {
Font fontRenderer = Minecraft.getInstance().font; Font fontRenderer = Minecraft.getInstance().font;
if (fontRenderer.width(newText) <= maxWidthPx) { if (fontRenderer.width(newText) <= maxWidthPx) {
text = newText; text = newText;
return; return;
} }
String trim = "..."; String trim = "...";
int trimWidth = fontRenderer.width(trim); int trimWidth = fontRenderer.width(trim);
@@ -70,7 +70,7 @@ public class Label extends AbstractSimiWidget {
} }
@Override @Override
public void renderButton(@Nonnull PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { protected void doRender(@Nonnull GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
if (text == null || text.getString().isEmpty()) if (text == null || text.getString().isEmpty())
return; return;
@@ -78,11 +78,8 @@ public class Label extends AbstractSimiWidget {
MutableComponent copy = text.plainCopy(); MutableComponent copy = text.plainCopy();
if (suffix != null && !suffix.isEmpty()) if (suffix != null && !suffix.isEmpty())
copy.append(suffix); copy.append(suffix);
if (hasShadow) graphics.drawString(font, copy, getX(), getY(), color, hasShadow);
font.drawShadow(matrixStack, copy, x, y, color);
else
font.draw(matrixStack, copy, x, y, color);
} }
} }

View File

@@ -1,14 +1,11 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import nl.requios.effortlessbuilding.create.AllKeys;
//import nl.requios.effortlessbuilding.create.AllSoundEvents;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
//import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import nl.requios.effortlessbuilding.create.AllKeys;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Function; import java.util.function.Function;
@@ -20,8 +17,10 @@ public class ScrollInput extends AbstractSimiWidget {
protected Component title = Lang.translateDirect("gui.scrollInput.defaultTitle"); protected Component title = Lang.translateDirect("gui.scrollInput.defaultTitle");
protected final Component scrollToModify = Lang.translateDirect("gui.scrollInput.scrollToModify"); protected final Component scrollToModify = Lang.translateDirect("gui.scrollInput.scrollToModify");
protected final Component shiftScrollsFaster = Lang.translateDirect("gui.scrollInput.shiftScrollsFaster"); protected final Component shiftScrollsFaster = Lang.translateDirect("gui.scrollInput.shiftScrollsFaster");
protected Component hint = null;
protected Label displayLabel; protected Label displayLabel;
protected boolean inverted; protected boolean inverted;
protected boolean soundPlayed;
protected Function<Integer, Component> formatter; protected Function<Integer, Component> formatter;
protected int min, max; protected int min, max;
@@ -36,6 +35,7 @@ public class ScrollInput extends AbstractSimiWidget {
shiftStep = 5; shiftStep = 5;
step = standardStep(); step = standardStep();
formatter = i -> Components.literal(String.valueOf(i)); formatter = i -> Components.literal(String.valueOf(i));
soundPlayed = false;
} }
public Function<StepContext, Integer> standardStep() { public Function<StepContext, Integer> standardStep() {
@@ -74,6 +74,12 @@ public class ScrollInput extends AbstractSimiWidget {
return this; return this;
} }
public ScrollInput addHint(MutableComponent hint) {
this.hint = hint;
updateTooltip();
return this;
}
public ScrollInput withStepFunction(Function<StepContext, Integer> step) { public ScrollInput withStepFunction(Function<StepContext, Integer> step) {
this.step = step; this.step = step;
return this; return this;
@@ -85,6 +91,12 @@ public class ScrollInput extends AbstractSimiWidget {
writeToLabel(); writeToLabel();
return this; return this;
} }
@Override
public void tick() {
super.tick();
soundPlayed = false;
}
public int getState() { public int getState() {
return state; return state;
@@ -106,8 +118,6 @@ public class ScrollInput extends AbstractSimiWidget {
@Override @Override
public boolean mouseScrolled(double mouseX, double mouseY, double delta) { public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
if (!this.visible || !this.isHovered) return false; //Added
if (inverted) if (inverted)
delta *= -1; delta *= -1;
@@ -128,12 +138,16 @@ public class ScrollInput extends AbstractSimiWidget {
clampState(); clampState();
if (priorState != state) { if (priorState != state) {
// Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(AllSoundEvents.SCROLL_VALUE.getMainEvent(), 1.5f + 0.1f * (state-min)/(max-min))); // if (!soundPlayed)
// Minecraft.getInstance()
// .getSoundManager()
// .play(SimpleSoundInstance.forUI(AllSoundEvents.SCROLL_VALUE.getMainEvent(),
// 1.5f + 0.1f * (state - min) / (max - min)));
// soundPlayed = true;
onChanged(); onChanged();
} }
// return priorState != state; return priorState != state;
return true; //Changed
} }
protected void clampState() { protected void clampState() {
@@ -161,6 +175,9 @@ public class ScrollInput extends AbstractSimiWidget {
return; return;
toolTip.add(title.plainCopy() toolTip.add(title.plainCopy()
.withStyle(s -> s.withColor(HEADER_RGB))); .withStyle(s -> s.withColor(HEADER_RGB)));
if (hint != null)
toolTip.add(hint.plainCopy()
.withStyle(s -> s.withColor(HINT_RGB)));
toolTip.add(scrollToModify.plainCopy() toolTip.add(scrollToModify.plainCopy()
.withStyle(ChatFormatting.ITALIC, ChatFormatting.DARK_GRAY)); .withStyle(ChatFormatting.ITALIC, ChatFormatting.DARK_GRAY));
toolTip.add(shiftScrollsFaster.plainCopy() toolTip.add(shiftScrollsFaster.plainCopy()

View File

@@ -1,10 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -42,7 +42,8 @@ public class SelectionScrollInput extends ScrollInput {
if (this.min + 1 == min) if (this.min + 1 == min)
min--; min--;
if (min > this.min) if (min > this.min)
toolTip.add(Components.literal("> ...").withStyle(ChatFormatting.GRAY)); toolTip.add(Components.literal("> ...")
.withStyle(ChatFormatting.GRAY));
if (this.max - 1 == max) if (this.max - 1 == max)
max++; max++;
for (int i = min; i < max; i++) { for (int i = min; i < max; i++) {
@@ -58,8 +59,12 @@ public class SelectionScrollInput extends ScrollInput {
.withStyle(ChatFormatting.GRAY)); .withStyle(ChatFormatting.GRAY));
} }
if (max < this.max) if (max < this.max)
toolTip.add(Components.literal("> ...").withStyle(ChatFormatting.GRAY)); toolTip.add(Components.literal("> ...")
.withStyle(ChatFormatting.GRAY));
if (hint != null)
toolTip.add(hint.plainCopy()
.withStyle(s -> s.withColor(HINT_RGB)));
toolTip.add(scrollToSelect.plainCopy() toolTip.add(scrollToSelect.plainCopy()
.withStyle(ChatFormatting.DARK_GRAY, ChatFormatting.ITALIC)); .withStyle(ChatFormatting.DARK_GRAY, ChatFormatting.ITALIC));
} }

View File

@@ -1,10 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.gui.widget; package nl.requios.effortlessbuilding.create.foundation.gui.widget;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.network.chat.Component;
import java.util.List; import java.util.List;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
public class TooltipArea extends AbstractSimiWidget { public class TooltipArea extends AbstractSimiWidget {
public TooltipArea(int x, int y, int width, int height) { public TooltipArea(int x, int y, int width, int height) {
@@ -12,9 +12,9 @@ public class TooltipArea extends AbstractSimiWidget {
} }
@Override @Override
public void renderButton(PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
if (visible) if (visible)
isHovered = mouseX >= x && mouseY >= y && mouseX < x + width && mouseY < y + height; isHovered = mouseX >= getX() && mouseY >= getY() && mouseX < getX() + width && mouseY < getY() + height;
} }
public TooltipArea withTooltip(List<Component> tooltip) { public TooltipArea withTooltip(List<Component> tooltip) {

View File

@@ -122,7 +122,7 @@ public class ItemHelper {
return true; return true;
if (stacks1.length == stacks2.length) { if (stacks1.length == stacks2.length) {
for (int i = 0; i < stacks1.length; i++) for (int i = 0; i < stacks1.length; i++)
if (!ItemStack.isSame(stacks1[i], stacks2[i])) if (!ItemStack.isSameItem(stacks1[i], stacks2[i]))
return false; return false;
return true; return true;
} }

View File

@@ -1,10 +1,7 @@
package nl.requios.effortlessbuilding.create.foundation.item; package nl.requios.effortlessbuilding.create.foundation.item;
import net.minecraft.core.NonNullList;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.tags.ITagManager; import net.minecraftforge.registries.tags.ITagManager;
@@ -17,12 +14,6 @@ public class TagDependentIngredientItem extends Item {
this.tag = tag; this.tag = tag;
} }
@Override
public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> list) {
if (!shouldHide())
super.fillItemCategory(tab, list);
}
public boolean shouldHide() { public boolean shouldHide() {
ITagManager<Item> tagManager = ForgeRegistries.ITEMS.tags(); ITagManager<Item> tagManager = ForgeRegistries.ITEMS.tags();
return !tagManager.isKnownTagName(tag) || tagManager.getTag(tag).isEmpty(); return !tagManager.isKnownTagName(tag) || tagManager.getTag(tag).isEmpty();

View File

@@ -1,32 +1,33 @@
package nl.requios.effortlessbuilding.create.foundation.item; package nl.requios.effortlessbuilding.create.foundation.item;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.mojang.bridge.game.Language;
import nl.requios.effortlessbuilding.create.foundation.item.ItemDescription.Palette;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Couple;
import nl.requios.effortlessbuilding.create.foundation.utility.FontHelper;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.resources.language.I18n; import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.ItemLike;
import nl.requios.effortlessbuilding.create.foundation.item.ItemDescription.Palette;
import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Couple;
import nl.requios.effortlessbuilding.create.foundation.utility.FontHelper;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import java.text.BreakIterator; import java.text.BreakIterator;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier; import java.util.function.Supplier;
public class TooltipHelper { public class TooltipHelper {
public static final int maxWidthPerLine = 200; public static final int maxWidthPerLine = 200;
public static final Map<String, ItemDescription> cachedTooltips = new HashMap<>(); public static final Map<String, ItemDescription> cachedTooltips = new HashMap<>();
public static Language cachedLanguage;
private static boolean gogglesMode; private static boolean gogglesMode;
private static final Map<Item, Supplier<String>> tooltipReferrals = new HashMap<>(); private static final Map<Item, Supplier<String>> tooltipReferrals = new HashMap<>();
@@ -212,36 +213,6 @@ public class TooltipHelper {
// return lines; // return lines;
// } // }
private static void checkLocale() {
Language currentLanguage = Minecraft.getInstance()
.getLanguageManager()
.getSelected();
if (cachedLanguage != currentLanguage) {
cachedTooltips.clear();
cachedLanguage = currentLanguage;
}
}
public static boolean hasTooltip(ItemStack stack, Player player) {
checkLocale();
String key = getTooltipTranslationKey(stack);
if (cachedTooltips.containsKey(key))
return cachedTooltips.get(key) != ItemDescription.MISSING;
return findTooltip(stack);
}
public static ItemDescription getTooltip(ItemStack stack) {
checkLocale();
String key = getTooltipTranslationKey(stack);
if (cachedTooltips.containsKey(key)) {
ItemDescription itemDescription = cachedTooltips.get(key);
if (itemDescription != ItemDescription.MISSING)
return itemDescription;
}
return null;
}
private static boolean findTooltip(ItemStack stack) { private static boolean findTooltip(ItemStack stack) {
String key = getTooltipTranslationKey(stack); String key = getTooltipTranslationKey(stack);
if (I18n.exists(key)) { if (I18n.exists(key)) {

View File

@@ -1,12 +0,0 @@
package nl.requios.effortlessbuilding.create.foundation.item.render;
import nl.requios.effortlessbuilding.create.Create;
import net.minecraft.client.resources.model.BakedModel;
public abstract class CreateCustomRenderedItemModel extends CustomRenderedItemModel {
public CreateCustomRenderedItemModel(BakedModel template, String basePath) {
super(template, Create.ID, basePath);
}
}

View File

@@ -1,29 +1,14 @@
package nl.requios.effortlessbuilding.create.foundation.item.render; package nl.requios.effortlessbuilding.create.foundation.item.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.client.resources.model.ModelBakery;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.client.event.ModelEvent;
import net.minecraftforge.client.model.BakedModelWrapper; import net.minecraftforge.client.model.BakedModelWrapper;
import java.util.HashMap; public class CustomRenderedItemModel extends BakedModelWrapper<BakedModel> {
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public abstract class CustomRenderedItemModel extends BakedModelWrapper<BakedModel> { public CustomRenderedItemModel(BakedModel originalModel) {
super(originalModel);
protected String namespace;
protected String basePath;
protected Map<String, BakedModel> partials = new HashMap<>();
public CustomRenderedItemModel(BakedModel template, String namespace, String basePath) {
super(template);
this.namespace = namespace;
this.basePath = basePath;
} }
@Override @Override
@@ -32,43 +17,16 @@ public abstract class CustomRenderedItemModel extends BakedModelWrapper<BakedMod
} }
@Override @Override
public BakedModel applyTransform(ItemTransforms.TransformType cameraTransformType, PoseStack mat, boolean leftHand) { public BakedModel applyTransform(ItemDisplayContext cameraItemDisplayContext, PoseStack mat,
// Super call returns originalModel, but we want to return this, else ISTER boolean leftHand) {
// Super call returns originalModel, but we want to return this, else BEWLR
// won't be used. // won't be used.
super.applyTransform(cameraTransformType, mat, leftHand); super.applyTransform(cameraItemDisplayContext, mat, leftHand);
return this; return this;
} }
public final BakedModel getOriginalModel() { public BakedModel getOriginalModel() {
return originalModel; return originalModel;
} }
public BakedModel getPartial(String name) {
return partials.get(name);
}
public final List<ResourceLocation> getModelLocations() {
return partials.keySet().stream().map(this::getPartialModelLocation).collect(Collectors.toList());
}
protected void addPartials(String... partials) {
for (String name : partials)
this.partials.put(name, null);
}
public void loadPartials(ModelEvent.BakingCompleted event) {
ModelBakery modelLoader = event.getModelBakery();
for (String name : partials.keySet())
partials.put(name, loadPartial(modelLoader, name));
}
@SuppressWarnings("deprecation")
protected BakedModel loadPartial(ModelBakery modelLoader, String name) {
return modelLoader.bake(getPartialModelLocation(name), BlockModelRotation.X0_Y0);
}
protected ResourceLocation getPartialModelLocation(String name) {
return new ResourceLocation(namespace, "item/" + basePath + "/" + name);
}
} }

View File

@@ -2,19 +2,19 @@ package nl.requios.effortlessbuilding.create.foundation.item.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import nl.requios.effortlessbuilding.create.foundation.render.RenderTypes;
import nl.requios.effortlessbuilding.create.foundation.utility.Iterate;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.block.model.ItemTransforms;
import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.client.extensions.common.IClientItemExtensions; import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import net.minecraftforge.client.model.data.ModelData; import net.minecraftforge.client.model.data.ModelData;
import nl.requios.effortlessbuilding.create.foundation.render.RenderTypes;
import nl.requios.effortlessbuilding.create.foundation.utility.Iterate;
public class PartialItemModelRenderer { public class PartialItemModelRenderer {
@@ -23,12 +23,12 @@ public class PartialItemModelRenderer {
private final RandomSource random = RandomSource.create(); private final RandomSource random = RandomSource.create();
private ItemStack stack; private ItemStack stack;
private ItemTransforms.TransformType transformType; private ItemDisplayContext transformType;
private PoseStack ms; private PoseStack ms;
private MultiBufferSource buffer; private MultiBufferSource buffer;
private int overlay; private int overlay;
public static PartialItemModelRenderer of(ItemStack stack, ItemTransforms.TransformType transformType, public static PartialItemModelRenderer of(ItemStack stack, ItemDisplayContext transformType,
PoseStack ms, MultiBufferSource buffer, int overlay) { PoseStack ms, MultiBufferSource buffer, int overlay) {
PartialItemModelRenderer instance = INSTANCE; PartialItemModelRenderer instance = INSTANCE;
instance.stack = stack; instance.stack = stack;

View File

@@ -5,10 +5,8 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraftforge.network.NetworkEvent.Context; import net.minecraftforge.network.NetworkEvent.Context;
import net.minecraftforge.network.PacketDistributor;
import java.util.HashSet; import java.util.HashSet;
import java.util.function.Supplier;
public interface ISyncPersistentData { public interface ISyncPersistentData {
@@ -37,19 +35,17 @@ public interface ISyncPersistentData {
} }
@Override @Override
public void handle(Supplier<Context> context) { public boolean handle(Context context) {
context.get() context.enqueueWork(() -> {
.enqueueWork(() -> { Entity entityByID = Minecraft.getInstance().level.getEntity(entityId);
Entity entityByID = Minecraft.getInstance().level.getEntity(entityId); CompoundTag data = entityByID.getPersistentData();
CompoundTag data = entityByID.getPersistentData(); new HashSet<>(data.getAllKeys()).forEach(data::remove);
new HashSet<>(data.getAllKeys()).forEach(data::remove); data.merge(readData);
data.merge(readData); if (!(entityByID instanceof ISyncPersistentData))
if (!(entityByID instanceof ISyncPersistentData)) return;
return; ((ISyncPersistentData) entityByID).onPersistentDataUpdated();
((ISyncPersistentData) entityByID).onPersistentDataUpdated(); });
}); return true;
context.get()
.setPacketHandled(true);
} }
} }

View File

@@ -3,12 +3,10 @@ package nl.requios.effortlessbuilding.create.foundation.networking;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraftforge.network.NetworkEvent.Context; import net.minecraftforge.network.NetworkEvent.Context;
import java.util.function.Supplier;
public abstract class SimplePacketBase { public abstract class SimplePacketBase {
public abstract void write(FriendlyByteBuf buffer); public abstract void write(FriendlyByteBuf buffer);
public abstract void handle(Supplier<Context> context); public abstract boolean handle(Context context);
} }

View File

@@ -2,8 +2,6 @@ package nl.requios.effortlessbuilding.create.foundation.render;
import com.jozufozu.flywheel.core.model.ModelUtil; import com.jozufozu.flywheel.core.model.ModelUtil;
import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData;
import com.jozufozu.flywheel.util.Pair;
import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.block.BlockRenderDispatcher;

View File

@@ -3,7 +3,6 @@ package nl.requios.effortlessbuilding.create.foundation.render;
import com.jozufozu.flywheel.core.PartialModel; import com.jozufozu.flywheel.core.PartialModel;
import com.jozufozu.flywheel.util.transform.TransformStack; import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.create.CreateClient; import nl.requios.effortlessbuilding.create.CreateClient;
import nl.requios.effortlessbuilding.create.foundation.render.SuperByteBufferCache.Compartment; import nl.requios.effortlessbuilding.create.foundation.render.SuperByteBufferCache.Compartment;
import nl.requios.effortlessbuilding.create.foundation.utility.AngleHelper; import nl.requios.effortlessbuilding.create.foundation.utility.AngleHelper;

View File

@@ -6,16 +6,8 @@ import nl.requios.effortlessbuilding.create.AllSpecialTextures;
import nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.Create;
import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderStateShard;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.ShaderInstance;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.inventory.InventoryMenu;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RegisterShadersEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
import java.io.IOException;
// TODO 1.17: use custom shaders instead of vanilla ones // TODO 1.17: use custom shaders instead of vanilla ones
public class RenderTypes extends RenderStateShard { public class RenderTypes extends RenderStateShard {
@@ -79,7 +71,7 @@ public class RenderTypes extends RenderStateShard {
private static final RenderType ADDITIVE = RenderType.create(createLayerName("additive"), DefaultVertexFormat.BLOCK, private static final RenderType ADDITIVE = RenderType.create(createLayerName("additive"), DefaultVertexFormat.BLOCK,
VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder()
.setShaderState(BLOCK_SHADER) .setShaderState(RENDERTYPE_SOLID_SHADER)
.setTextureState(new TextureStateShard(InventoryMenu.BLOCK_ATLAS, false, false)) .setTextureState(new TextureStateShard(InventoryMenu.BLOCK_ATLAS, false, false))
.setTransparencyState(ADDITIVE_TRANSPARENCY) .setTransparencyState(ADDITIVE_TRANSPARENCY)
.setCullState(NO_CULL) .setCullState(NO_CULL)

View File

@@ -2,6 +2,7 @@ package nl.requios.effortlessbuilding.create.foundation.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;

View File

@@ -1,27 +1,18 @@
package nl.requios.effortlessbuilding.create.foundation.render; package nl.requios.effortlessbuilding.create.foundation.render;
import java.nio.ByteBuffer;
import java.util.function.IntPredicate;
import com.jozufozu.flywheel.api.vertex.ShadedVertexList; import com.jozufozu.flywheel.api.vertex.ShadedVertexList;
import com.jozufozu.flywheel.api.vertex.VertexList; import com.jozufozu.flywheel.api.vertex.VertexList;
import com.jozufozu.flywheel.backend.ShadersModHandler; import com.jozufozu.flywheel.backend.ShadersModHandler;
import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData; import com.jozufozu.flywheel.core.model.ShadeSeparatedBufferedData;
import com.jozufozu.flywheel.core.vertex.BlockVertexList; import com.jozufozu.flywheel.core.vertex.BlockVertexList;
import com.jozufozu.flywheel.util.Color;
import com.jozufozu.flywheel.util.DiffuseLightCalculator; import com.jozufozu.flywheel.util.DiffuseLightCalculator;
import com.jozufozu.flywheel.util.transform.TStack; import com.jozufozu.flywheel.util.transform.TStack;
import com.jozufozu.flywheel.util.transform.Transform; import com.jozufozu.flywheel.util.transform.Transform;
import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix3f;
import com.mojang.math.Matrix4f;
import com.mojang.math.Quaternion;
import com.mojang.math.Vector3f;
import com.mojang.math.Vector4f;
import nl.requios.effortlessbuilding.create.foundation.block.render.SpriteShiftEntry;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import it.unimi.dsi.fastutil.longs.Long2IntMap; import it.unimi.dsi.fastutil.longs.Long2IntMap;
import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap; import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@@ -32,6 +23,15 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import nl.requios.effortlessbuilding.create.foundation.block.render.SpriteShiftEntry;
import org.joml.Matrix3f;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import org.joml.Vector4f;
import java.nio.ByteBuffer;
import java.util.function.IntPredicate;
public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<SuperByteBuffer> { public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<SuperByteBuffer> {
@@ -96,25 +96,22 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
if (isEmpty()) if (isEmpty())
return; return;
Matrix4f modelMat = input.last() Matrix4f modelMat = new Matrix4f(input.last()
.pose() .pose());
.copy();
Matrix4f localTransforms = transforms.last() Matrix4f localTransforms = transforms.last()
.pose(); .pose();
modelMat.multiply(localTransforms); modelMat.mul(localTransforms);
Matrix3f normalMat; Matrix3f normalMat;
if (fullNormalTransform) { if (fullNormalTransform) {
normalMat = input.last() normalMat = new Matrix3f(input.last()
.normal() .normal());
.copy();
Matrix3f localNormalTransforms = transforms.last() Matrix3f localNormalTransforms = transforms.last()
.normal(); .normal();
normalMat.mul(localNormalTransforms); normalMat.mul(localNormalTransforms);
} else { } else {
normalMat = transforms.last() normalMat = new Matrix3f(transforms.last()
.normal() .normal());
.copy();
} }
if (useWorldLight) { if (useWorldLight) {
@@ -127,7 +124,7 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
DiffuseLightCalculator diffuseCalculator = ForcedDiffuseState.getForcedCalculator(); DiffuseLightCalculator diffuseCalculator = ForcedDiffuseState.getForcedCalculator();
final boolean disableDiffuseMult = final boolean disableDiffuseMult =
this.disableDiffuseMult || (ShadersModHandler.isShaderPackInUse() && diffuseCalculator == null); this.disableDiffuseMult || (ShadersModHandler.isShaderPackInUse() && diffuseCalculator == null);
if (diffuseCalculator == null) { if (diffuseCalculator == null) {
diffuseCalculator = this.diffuseCalculator; diffuseCalculator = this.diffuseCalculator;
if (diffuseCalculator == null) { if (diffuseCalculator == null) {
@@ -142,7 +139,7 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
float z = template.getZ(i); float z = template.getZ(i);
pos.set(x, y, z, 1F); pos.set(x, y, z, 1F);
pos.transform(modelMat); pos.mul(modelMat);
builder.vertex(pos.x(), pos.y(), pos.z()); builder.vertex(pos.x(), pos.y(), pos.z());
float normalX = template.getNX(i); float normalX = template.getNX(i);
@@ -150,7 +147,7 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
float normalZ = template.getNZ(i); float normalZ = template.getNZ(i);
normal.set(normalX, normalY, normalZ); normal.set(normalX, normalY, normalZ);
normal.transform(normalMat); normal.mul(normalMat);
float nx = normal.x(); float nx = normal.x();
float ny = normal.y(); float ny = normal.y();
float nz = normal.z(); float nz = normal.z();
@@ -192,9 +189,9 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
int light; int light;
if (useWorldLight) { if (useWorldLight) {
lightPos.set(((x - .5f) * 15 / 16f) + .5f, (y - .5f) * 15 / 16f + .5f, (z - .5f) * 15 / 16f + .5f, 1f); lightPos.set(((x - .5f) * 15 / 16f) + .5f, (y - .5f) * 15 / 16f + .5f, (z - .5f) * 15 / 16f + .5f, 1f);
lightPos.transform(localTransforms); lightPos.mul(localTransforms);
if (lightTransform != null) { if (lightTransform != null) {
lightPos.transform(lightTransform); lightPos.mul(lightTransform);
} }
light = getLight(Minecraft.getInstance().level, lightPos); light = getLight(Minecraft.getInstance().level, lightPos);
@@ -264,7 +261,7 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
} }
@Override @Override
public SuperByteBuffer multiply(Quaternion quaternion) { public SuperByteBuffer multiply(Quaternionf quaternion) {
transforms.mulPose(quaternion); transforms.mulPose(quaternion);
return this; return this;
} }
@@ -290,40 +287,40 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
@Override @Override
public SuperByteBuffer mulPose(Matrix4f pose) { public SuperByteBuffer mulPose(Matrix4f pose) {
transforms.last() transforms.last()
.pose() .pose()
.multiply(pose); .mul(pose);
return this; return this;
} }
@Override @Override
public SuperByteBuffer mulNormal(Matrix3f normal) { public SuperByteBuffer mulNormal(Matrix3f normal) {
transforms.last() transforms.last()
.normal() .normal()
.mul(normal); .mul(normal);
return this; return this;
} }
public SuperByteBuffer transform(PoseStack stack) { public SuperByteBuffer transform(PoseStack stack) {
transforms.last() transforms.last()
.pose() .pose()
.multiply(stack.last() .mul(stack.last()
.pose()); .pose());
transforms.last() transforms.last()
.normal() .normal()
.mul(stack.last() .mul(stack.last()
.normal()); .normal());
return this; return this;
} }
public SuperByteBuffer rotateCentered(Direction axis, float radians) { public SuperByteBuffer rotateCentered(Direction axis, float radians) {
translate(.5f, .5f, .5f).rotate(axis, radians) translate(.5f, .5f, .5f).rotate(axis, radians)
.translate(-.5f, -.5f, -.5f); .translate(-.5f, -.5f, -.5f);
return this; return this;
} }
public SuperByteBuffer rotateCentered(Quaternion q) { public SuperByteBuffer rotateCentered(Quaternionf q) {
translate(.5f, .5f, .5f).multiply(q) translate(.5f, .5f, .5f).multiply(q)
.translate(-.5f, -.5f, -.5f); .translate(-.5f, -.5f, -.5f);
return this; return this;
} }
@@ -378,13 +375,13 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
public SuperByteBuffer shiftUVScrolling(SpriteShiftEntry entry, float scrollU, float scrollV) { public SuperByteBuffer shiftUVScrolling(SpriteShiftEntry entry, float scrollU, float scrollV) {
this.spriteShiftFunc = (builder, u, v) -> { this.spriteShiftFunc = (builder, u, v) -> {
float targetU = u - entry.getOriginal() float targetU = u - entry.getOriginal()
.getU0() + entry.getTarget() .getU0() + entry.getTarget()
.getU0() .getU0()
+ scrollU; + scrollU;
float targetV = v - entry.getOriginal() float targetV = v - entry.getOriginal()
.getV0() + entry.getTarget() .getV0() + entry.getTarget()
.getV0() .getV0()
+ scrollV; + scrollV;
builder.uv(targetU, targetV); builder.uv(targetU, targetV);
}; };
return this; return this;
@@ -393,9 +390,9 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
public SuperByteBuffer shiftUVtoSheet(SpriteShiftEntry entry, float uTarget, float vTarget, int sheetSize) { public SuperByteBuffer shiftUVtoSheet(SpriteShiftEntry entry, float uTarget, float vTarget, int sheetSize) {
this.spriteShiftFunc = (builder, u, v) -> { this.spriteShiftFunc = (builder, u, v) -> {
float targetU = entry.getTarget() float targetU = entry.getTarget()
.getU((SpriteShiftEntry.getUnInterpolatedU(entry.getOriginal(), u) / sheetSize) + uTarget * 16); .getU((SpriteShiftEntry.getUnInterpolatedU(entry.getOriginal(), u) / sheetSize) + uTarget * 16);
float targetV = entry.getTarget() float targetV = entry.getTarget()
.getV((SpriteShiftEntry.getUnInterpolatedV(entry.getOriginal(), v) / sheetSize) + vTarget * 16); .getV((SpriteShiftEntry.getUnInterpolatedV(entry.getOriginal(), v) / sheetSize) + vTarget * 16);
builder.uv(targetU, targetV); builder.uv(targetU, targetV);
}; };
return this; return this;
@@ -478,7 +475,7 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
} }
private static int getLight(Level world, Vector4f lightPos) { private static int getLight(Level world, Vector4f lightPos) {
BlockPos pos = new BlockPos(lightPos.x(), lightPos.y(), lightPos.z()); BlockPos pos = BlockPos.containing(lightPos.x(), lightPos.y(), lightPos.z());
return WORLD_LIGHT_CACHE.computeIfAbsent(pos.asLong(), $ -> LevelRenderer.getLightColor(world, pos)); return WORLD_LIGHT_CACHE.computeIfAbsent(pos.asLong(), $ -> LevelRenderer.getLightColor(world, pos));
} }
@@ -492,4 +489,4 @@ public class SuperByteBuffer implements Transform<SuperByteBuffer>, TStack<Super
int getPackedLight(float x, float y, float z); int getPackedLight(float x, float y, float z);
} }
} }

View File

@@ -1,26 +1,28 @@
package nl.requios.effortlessbuilding.create.foundation.render; package nl.requios.effortlessbuilding.create.foundation.render;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
public class SuperByteBufferCache { public class SuperByteBufferCache {
protected final Map<Compartment<?>, Cache<Object, SuperByteBuffer>> caches = new HashMap<>(); protected final Map<Compartment<?>, Cache<Object, SuperByteBuffer>> caches = new HashMap<>();
public synchronized void registerCompartment(Compartment<?> compartment) { public synchronized void registerCompartment(Compartment<?> compartment) {
caches.put(compartment, CacheBuilder.newBuilder() caches.put(compartment, CacheBuilder.newBuilder()
.<Object, SuperByteBuffer>removalListener(n -> n.getValue().delete())
.build()); .build());
} }
public synchronized void registerCompartment(Compartment<?> compartment, long ticksUntilExpired) { public synchronized void registerCompartment(Compartment<?> compartment, long ticksUntilExpired) {
caches.put(compartment, CacheBuilder.newBuilder() caches.put(compartment, CacheBuilder.newBuilder()
.expireAfterAccess(ticksUntilExpired * 50, TimeUnit.MILLISECONDS) .expireAfterAccess(ticksUntilExpired * 50, TimeUnit.MILLISECONDS)
.<Object, SuperByteBuffer>removalListener(n -> n.getValue().delete())
.build()); .build());
} }

View File

@@ -1,7 +1,10 @@
package nl.requios.effortlessbuilding.create.foundation.render; package nl.requios.effortlessbuilding.create.foundation.render;
import java.util.SortedMap;
import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.client.renderer.ChunkBufferBuilderPack; import net.minecraft.client.renderer.ChunkBufferBuilderPack;
@@ -10,8 +13,6 @@ import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.Sheets; import net.minecraft.client.renderer.Sheets;
import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelBakery;
import java.util.SortedMap;
public class SuperRenderTypeBuffer implements MultiBufferSource { public class SuperRenderTypeBuffer implements MultiBufferSource {
private static final SuperRenderTypeBuffer INSTANCE = new SuperRenderTypeBuffer(); private static final SuperRenderTypeBuffer INSTANCE = new SuperRenderTypeBuffer();

View File

@@ -6,11 +6,6 @@ import com.jozufozu.flywheel.config.BackendType;
import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld; import com.jozufozu.flywheel.core.virtual.VirtualRenderWorld;
import com.jozufozu.flywheel.util.transform.TransformStack; import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Matrix4f;
import com.mojang.math.Vector4f;
import nl.requios.effortlessbuilding.create.Create;
import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHolder;
import nl.requios.effortlessbuilding.create.foundation.utility.RegisteredObjects;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
@@ -19,6 +14,11 @@ import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import nl.requios.effortlessbuilding.create.Create;
import nl.requios.effortlessbuilding.create.foundation.utility.AnimationTickHolder;
import nl.requios.effortlessbuilding.create.foundation.utility.RegisteredObjects;
import org.joml.Matrix4f;
import org.joml.Vector4f;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Iterator; import java.util.Iterator;
@@ -36,7 +36,7 @@ public class TileEntityRenderHelper {
} }
public static void renderTileEntities(Level world, @Nullable VirtualRenderWorld renderWorld, public static void renderTileEntities(Level world, @Nullable VirtualRenderWorld renderWorld,
Iterable<BlockEntity> customRenderTEs, PoseStack ms, @Nullable Matrix4f lightTransform, MultiBufferSource buffer) { Iterable<BlockEntity> customRenderTEs, PoseStack ms, @Nullable Matrix4f lightTransform, MultiBufferSource buffer) {
renderTileEntities(world, renderWorld, customRenderTEs, ms, lightTransform, buffer, renderTileEntities(world, renderWorld, customRenderTEs, ms, lightTransform, buffer,
AnimationTickHolder.getPartialTicks()); AnimationTickHolder.getPartialTicks());
} }
@@ -91,8 +91,8 @@ public class TileEntityRenderHelper {
private static BlockPos getLightPos(@Nullable Matrix4f lightTransform, BlockPos contraptionPos) { private static BlockPos getLightPos(@Nullable Matrix4f lightTransform, BlockPos contraptionPos) {
if (lightTransform != null) { if (lightTransform != null) {
Vector4f lightVec = new Vector4f(contraptionPos.getX() + .5f, contraptionPos.getY() + .5f, contraptionPos.getZ() + .5f, 1); Vector4f lightVec = new Vector4f(contraptionPos.getX() + .5f, contraptionPos.getY() + .5f, contraptionPos.getZ() + .5f, 1);
lightVec.transform(lightTransform); lightVec.mul(lightTransform);
return new BlockPos(lightVec.x(), lightVec.y(), lightVec.z()); return BlockPos.containing(lightVec.x(), lightVec.y(), lightVec.z());
} else { } else {
return contraptionPos; return contraptionPos;
} }

View File

@@ -2,9 +2,9 @@ package nl.requios.effortlessbuilding.create.foundation.utility;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry;
import net.minecraft.core.SectionPos; import net.minecraft.core.SectionPos;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundEvents;
@@ -20,7 +20,12 @@ import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.GameRules; import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.BaseRailBlock;
import net.minecraft.world.level.block.BedBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.IceBlock;
import net.minecraft.world.level.block.SlimeBlock;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
@@ -29,10 +34,8 @@ import net.minecraft.world.level.block.state.properties.SlabType;
import net.minecraft.world.level.chunk.LevelChunk; import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.LevelChunkSection;
import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Material;
import net.minecraftforge.common.IPlantable; import net.minecraftforge.common.IPlantable;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.BlockSnapshot;
import net.minecraftforge.event.level.BlockEvent; import net.minecraftforge.event.level.BlockEvent;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -181,9 +184,8 @@ public class BlockHelper {
.ultraWarm()) .ultraWarm())
return false; return false;
Material material = world.getBlockState(pos.below()) BlockState belowState = world.getBlockState(pos.below());
.getMaterial(); if (belowState.blocksMotion() || belowState.liquid())
if (material.blocksMotion() || material.isLiquid())
world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState()); world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState());
return true; return true;
} }
@@ -211,8 +213,8 @@ public class BlockHelper {
int idx = chunk.getSectionIndex(target.getY()); int idx = chunk.getSectionIndex(target.getY());
LevelChunkSection chunksection = chunk.getSection(idx); LevelChunkSection chunksection = chunk.getSection(idx);
if (chunksection == null) { if (chunksection == null) {
chunksection = new LevelChunkSection(chunk.getSectionYFromSectionIndex(idx), world.registryAccess() chunksection = new LevelChunkSection(world.registryAccess()
.registryOrThrow(Registry.BIOME_REGISTRY)); .registryOrThrow(Registries.BIOME));
chunk.getSections()[idx] = chunksection; chunk.getSections()[idx] = chunksection;
} }
BlockState old = chunksection.setBlockState(SectionPos.sectionRelative(target.getX()), BlockState old = chunksection.setBlockState(SectionPos.sectionRelative(target.getX()),

View File

@@ -1,9 +1,9 @@
package nl.requios.effortlessbuilding.create.foundation.utility; package nl.requios.effortlessbuilding.create.foundation.utility;
import com.google.common.hash.Hashing; import com.google.common.hash.Hashing;
import com.mojang.math.Vector3f;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.joml.Vector3f;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;

View File

@@ -2,7 +2,6 @@ package nl.requios.effortlessbuilding.create.foundation.utility;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.registries.IForgeRegistry; import net.minecraftforge.registries.IForgeRegistry;
import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.create.Create; import nl.requios.effortlessbuilding.create.Create;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;

View File

@@ -2,11 +2,11 @@ package nl.requios.effortlessbuilding.create.foundation.utility;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.math.Matrix4f;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font; import net.minecraft.client.gui.Font;
import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import org.joml.Matrix4f;
import java.text.BreakIterator; import java.text.BreakIterator;
import java.util.LinkedList; import java.util.LinkedList;
@@ -71,14 +71,14 @@ public final class FontHelper {
} }
private static int draw(Font font, String p_228078_1_, float p_228078_2_, float p_228078_3_, private static int draw(Font font, String p_228078_1_, float p_228078_2_, float p_228078_3_,
int p_228078_4_, Matrix4f p_228078_5_, boolean p_228078_6_) { int p_228078_4_, Matrix4f p_228078_5_, boolean p_228078_6_) {
if (p_228078_1_ == null) { if (p_228078_1_ == null) {
return 0; return 0;
} else { } else {
MultiBufferSource.BufferSource irendertypebuffer$impl = MultiBufferSource.immediate(Tesselator.getInstance() MultiBufferSource.BufferSource irendertypebuffer$impl = MultiBufferSource.immediate(Tesselator.getInstance()
.getBuilder()); .getBuilder());
int i = font.drawInBatch(p_228078_1_, p_228078_2_, p_228078_3_, p_228078_4_, p_228078_6_, p_228078_5_, int i = font.drawInBatch(p_228078_1_, p_228078_2_, p_228078_3_, p_228078_4_, p_228078_6_, p_228078_5_,
irendertypebuffer$impl, false, 0, LightTexture.FULL_BRIGHT); irendertypebuffer$impl, Font.DisplayMode.NORMAL, 0, LightTexture.FULL_BRIGHT);
irendertypebuffer$impl.endBatch(); irendertypebuffer$impl.endBatch();
return i; return i;
} }

View File

@@ -17,7 +17,6 @@ public class LangNumberFormat {
public void update() { public void update() {
format = NumberFormat.getInstance(Minecraft.getInstance() format = NumberFormat.getInstance(Minecraft.getInstance()
.getLanguageManager() .getLanguageManager()
.getSelected()
.getJavaLocale()); .getJavaLocale());
format.setMaximumFractionDigits(2); format.setMaximumFractionDigits(2);
format.setMinimumFractionDigits(0); format.setMinimumFractionDigits(0);

View File

@@ -1,7 +1,5 @@
package nl.requios.effortlessbuilding.create.foundation.utility; package nl.requios.effortlessbuilding.create.foundation.utility;
import com.mojang.math.Quaternion;
import com.mojang.math.Vector3f;
import net.minecraft.client.Camera; import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@@ -19,6 +17,8 @@ import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Mirror;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -237,13 +237,12 @@ public class VecHelper {
*/ */
Camera ari = Minecraft.getInstance().gameRenderer.getMainCamera(); Camera ari = Minecraft.getInstance().gameRenderer.getMainCamera();
Vec3 camera_pos = ari.getPosition(); Vec3 camera_pos = ari.getPosition();
Quaternion camera_rotation_conj = ari.rotation() Quaternionf camera_rotation_conj = new Quaternionf(ari.rotation());
.copy(); camera_rotation_conj.conjugate();
camera_rotation_conj.conj();
Vector3f result3f = new Vector3f((float) (camera_pos.x - target.x), (float) (camera_pos.y - target.y), Vector3f result3f = new Vector3f((float) (camera_pos.x - target.x), (float) (camera_pos.y - target.y),
(float) (camera_pos.z - target.z)); (float) (camera_pos.z - target.z));
result3f.transform(camera_rotation_conj); result3f.rotate(camera_rotation_conj);
// ----- compensate for view bobbing (if active) ----- // ----- compensate for view bobbing (if active) -----
// the following code adapted from GameRenderer::applyBobbing (to invert it) // the following code adapted from GameRenderer::applyBobbing (to invert it)
@@ -257,18 +256,18 @@ public class VecHelper {
float f = distwalked_modified - playerentity.walkDistO; float f = distwalked_modified - playerentity.walkDistO;
float f1 = -(distwalked_modified + f * partialTicks); float f1 = -(distwalked_modified + f * partialTicks);
float f2 = Mth.lerp(partialTicks, playerentity.oBob, playerentity.bob); float f2 = Mth.lerp(partialTicks, playerentity.oBob, playerentity.bob);
Quaternion q2 = Quaternionf q2 =
new Quaternion(Vector3f.XP, Math.abs(Mth.cos(f1 * (float) Math.PI - 0.2F) * f2) * 5.0F, true); com.mojang.math.Axis.XP.rotationDegrees(Math.abs(Mth.cos(f1 * (float) Math.PI - 0.2F) * f2) * 5.0F);
q2.conj(); q2.conjugate();
result3f.transform(q2); result3f.rotate(q2);
Quaternion q1 = new Quaternion(Vector3f.ZP, Mth.sin(f1 * (float) Math.PI) * f2 * 3.0F, true); Quaternionf q1 = com.mojang.math.Axis.ZP.rotationDegrees(Mth.sin(f1 * (float) Math.PI) * f2 * 3.0F);
q1.conj(); q1.conjugate();
result3f.transform(q1); result3f.rotate(q1);
Vector3f bob_translation = new Vector3f((Mth.sin(f1 * (float) Math.PI) * f2 * 0.5F), Vector3f bob_translation = new Vector3f((Mth.sin(f1 * (float) Math.PI) * f2 * 0.5F),
(-Math.abs(Mth.cos(f1 * (float) Math.PI) * f2)), 0.0f); (-Math.abs(Mth.cos(f1 * (float) Math.PI) * f2)), 0.0f);
bob_translation.setY(-bob_translation.y()); // this is weird but hey, if it works bob_translation.y = -bob_translation.y(); // this is weird but hey, if it works
result3f.add(bob_translation); result3f.add(bob_translation);
} }
} }

View File

@@ -1,13 +1,13 @@
package nl.requios.effortlessbuilding.create.foundation.utility; package nl.requios.effortlessbuilding.create.foundation.utility;
import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.LevelAccessor;
public class WorldHelper { public class WorldHelper {
public static ResourceLocation getDimensionID(LevelAccessor world) { public static ResourceLocation getDimensionID(LevelAccessor world) {
return world.registryAccess() return world.registryAccess()
.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY) .registryOrThrow(Registries.DIMENSION_TYPE)
.getKey(world.dimensionType()); .getKey(world.dimensionType());
} }
} }

View File

@@ -4,7 +4,6 @@ import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import nl.requios.effortlessbuilding.create.foundation.utility.Color; import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.outliner.Outline;
import java.util.function.Supplier; import java.util.function.Supplier;

View File

@@ -1,7 +1,6 @@
package nl.requios.effortlessbuilding.create.foundation.utility.ghost; package nl.requios.effortlessbuilding.create.foundation.utility.ghost;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer; import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;

View File

@@ -3,7 +3,6 @@ package nl.requios.effortlessbuilding.create.foundation.utility.outliner;
import com.jozufozu.flywheel.util.transform.TransformStack; import com.jozufozu.flywheel.util.transform.TransformStack;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Matrix3f;
import nl.requios.effortlessbuilding.create.AllSpecialTextures; import nl.requios.effortlessbuilding.create.AllSpecialTextures;
import nl.requios.effortlessbuilding.create.foundation.render.RenderTypes; import nl.requios.effortlessbuilding.create.foundation.render.RenderTypes;
import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer; import nl.requios.effortlessbuilding.create.foundation.render.SuperRenderTypeBuffer;
@@ -16,6 +15,7 @@ import net.minecraft.core.Direction;
import net.minecraft.core.Direction.Axis; import net.minecraft.core.Direction.Axis;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.joml.Matrix3f;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Optional; import java.util.Optional;

View File

@@ -1,5 +1,6 @@
package nl.requios.effortlessbuilding.create.foundation.utility.worldWrappers; package nl.requios.effortlessbuilding.create.foundation.utility.worldWrappers;
import net.minecraft.util.AbortableIterationConsumer;
import net.minecraft.world.level.entity.EntityAccess; import net.minecraft.world.level.entity.EntityAccess;
import net.minecraft.world.level.entity.EntityTypeTest; import net.minecraft.world.level.entity.EntityTypeTest;
import net.minecraft.world.level.entity.LevelEntityGetter; import net.minecraft.world.level.entity.LevelEntityGetter;
@@ -27,7 +28,7 @@ public class DummyLevelEntityGetter<T extends EntityAccess> implements LevelEnti
} }
@Override @Override
public <U extends T> void get(EntityTypeTest<T, U> p_156935_, Consumer<U> p_156936_) { public <U extends T> void get(EntityTypeTest<T, U> p_156935_, AbortableIterationConsumer<U> p_156936_) {
} }
@Override @Override
@@ -35,7 +36,7 @@ public class DummyLevelEntityGetter<T extends EntityAccess> implements LevelEnti
} }
@Override @Override
public <U extends T> void get(EntityTypeTest<T, U> p_156932_, AABB p_156933_, Consumer<U> p_156934_) { public <U extends T> void get(EntityTypeTest<T, U> p_156932_, AABB p_156933_, AbortableIterationConsumer<U> p_156934_) {
} }
} }

View File

@@ -32,10 +32,10 @@ public class WrappedServerWorld extends ServerLevel {
public WrappedServerWorld(ServerLevel world) { public WrappedServerWorld(ServerLevel world) {
super(world.getServer(), Util.backgroundExecutor(), world.getServer().storageSource, super(world.getServer(), Util.backgroundExecutor(), world.getServer().storageSource,
(ServerLevelData) world.getLevelData(), world.dimension(), (ServerLevelData) world.getLevelData(), world.dimension(),
new LevelStem(world.dimensionTypeRegistration(), world.getChunkSource().getGenerator()), new LevelStem(world.dimensionTypeRegistration(), world.getChunkSource().getGenerator()),
new DummyStatusListener(), world.isDebug(), world.getBiomeManager().biomeZoomSeed, new DummyStatusListener(), world.isDebug(), world.getBiomeManager().biomeZoomSeed,
Collections.emptyList(), false); Collections.emptyList(), false, world.getRandomSequences());
this.world = world; this.world = world;
} }

View File

@@ -5,6 +5,7 @@ import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.flag.FeatureFlagSet;
import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
@@ -36,8 +37,8 @@ public class WrappedWorld extends Level {
protected LevelEntityGetter<Entity> entityGetter = new DummyLevelEntityGetter<>(); protected LevelEntityGetter<Entity> entityGetter = new DummyLevelEntityGetter<>();
public WrappedWorld(Level world) { public WrappedWorld(Level world) {
super((WritableLevelData) world.getLevelData(), world.dimension(), world.dimensionTypeRegistration(), super((WritableLevelData) world.getLevelData(), world.dimension(), world.registryAccess(), world.dimensionTypeRegistration(),
world::getProfiler, world.isClientSide, world.isDebug(), 0, 0); world::getProfiler, world.isClientSide, world.isDebug(), 0, 0);
this.world = world; this.world = world;
} }
@@ -110,19 +111,23 @@ public class WrappedWorld extends Level {
@Override @Override
public void playSeededSound(Player p_220363_, double p_220364_, double p_220365_, double p_220366_, public void playSeededSound(Player p_220363_, double p_220364_, double p_220365_, double p_220366_,
SoundEvent p_220367_, SoundSource p_220368_, float p_220369_, float p_220370_, long p_220371_) {} SoundEvent p_220367_, SoundSource p_220368_, float p_220369_, float p_220370_, long p_220371_) {}
@Override @Override
public void playSeededSound(Player p_220372_, Entity p_220373_, SoundEvent p_220374_, SoundSource p_220375_, public void playSeededSound(Player pPlayer, double pX, double pY, double pZ, Holder<SoundEvent> pSound,
float p_220376_, float p_220377_, long p_220378_) {} SoundSource pSource, float pVolume, float pPitch, long pSeed) {}
@Override
public void playSeededSound(Player pPlayer, Entity pEntity, Holder<SoundEvent> pSound, SoundSource pCategory,
float pVolume, float pPitch, long pSeed) {}
@Override @Override
public void playSound(@Nullable Player player, double x, double y, double z, SoundEvent soundIn, public void playSound(@Nullable Player player, double x, double y, double z, SoundEvent soundIn,
SoundSource category, float volume, float pitch) {} SoundSource category, float volume, float pitch) {}
@Override @Override
public void playSound(@Nullable Player p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, public void playSound(@Nullable Player p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_,
SoundSource p_217384_4_, float p_217384_5_, float p_217384_6_) {} SoundSource p_217384_4_, float p_217384_5_, float p_217384_6_) {}
@Override @Override
public Entity getEntity(int id) { public Entity getEntity(int id) {
@@ -247,4 +252,10 @@ public class WrappedWorld extends Level {
public int getSectionYFromSectionIndex(int sectionIndex) { public int getSectionYFromSectionIndex(int sectionIndex) {
return sectionIndex + this.getMinSection(); return sectionIndex + this.getMinSection();
} }
@Override
public FeatureFlagSet enabledFeatures() {
return world.enabledFeatures();
}
} }

View File

@@ -141,7 +141,7 @@ public class DiamondRandomizerBagContainer extends AbstractContainerMenu {
@Override @Override
public void removed(Player player) { public void removed(Player player) {
super.removed(player); super.removed(player);
if (!player.level.isClientSide) { if (!player.level().isClientSide) {
broadcastChanges(); broadcastChanges();
} }
} }

View File

@@ -1,7 +1,6 @@
package nl.requios.effortlessbuilding.gui; package nl.requios.effortlessbuilding.gui;
import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -26,24 +25,22 @@ public class DiamondRandomizerBagScreen extends AbstractContainerScreen<DiamondR
} }
@Override @Override
public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
renderBackground(ms); renderBackground(guiGraphics);
super.render(ms, mouseX, mouseY, partialTicks); super.render(guiGraphics, mouseX, mouseY, partialTicks);
this.renderTooltip(ms, mouseX, mouseY); this.renderTooltip(guiGraphics, mouseX, mouseY);
} }
@Override @Override
protected void renderLabels(PoseStack ms, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
this.font.draw(ms, this.title, 8, 6, 0x404040); guiGraphics.drawString(this.font, this.title, 8, 6, 0x404040, false);
this.font.draw(ms, this.playerInventoryTitle, 8, imageHeight - 96 + 2, 0x404040); guiGraphics.drawString(this.font, this.playerInventoryTitle, 8, imageHeight - 96 + 2, 0x404040, false);
} }
@Override @Override
protected void renderBg(PoseStack ms, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) {
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1f);
RenderSystem.setShaderTexture(0, guiTextures);
int marginHorizontal = (width - imageWidth) / 2; int marginHorizontal = (width - imageWidth) / 2;
int marginVertical = (height - imageHeight) / 2; int marginVertical = (height - imageHeight) / 2;
blit(ms, marginHorizontal, marginVertical, 0, 0, imageWidth, imageHeight); guiGraphics.blit(guiTextures, marginHorizontal, marginVertical, 0, 0, imageWidth, imageHeight);
} }
} }

View File

@@ -139,7 +139,7 @@ public class GoldenRandomizerBagContainer extends AbstractContainerMenu {
@Override @Override
public void removed(Player player) { public void removed(Player player) {
super.removed(player); super.removed(player);
if (!player.level.isClientSide) { if (!player.level().isClientSide) {
broadcastChanges(); broadcastChanges();
} }
} }

View File

@@ -1,7 +1,6 @@
package nl.requios.effortlessbuilding.gui; package nl.requios.effortlessbuilding.gui;
import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.gui.GuiGraphics;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@@ -26,24 +25,22 @@ public class GoldenRandomizerBagScreen extends AbstractContainerScreen<GoldenRan
} }
@Override @Override
public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
renderBackground(ms); renderBackground(guiGraphics);
super.render(ms, mouseX, mouseY, partialTicks); super.render(guiGraphics, mouseX, mouseY, partialTicks);
this.renderTooltip(ms, mouseX, mouseY); this.renderTooltip(guiGraphics, mouseX, mouseY);
} }
@Override @Override
protected void renderLabels(PoseStack ms, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
this.font.draw(ms, this.title, 8, 6, 0x404040); guiGraphics.drawString(this.font, this.title, 8, 6, 0x404040, false);
this.font.draw(ms, this.playerInventoryTitle, 8, imageHeight - 96 + 2, 0x404040); guiGraphics.drawString(this.font, this.playerInventoryTitle, 8, imageHeight - 96 + 2, 0x404040, false);
} }
@Override @Override
protected void renderBg(PoseStack ms, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) {
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1f);
RenderSystem.setShaderTexture(0, guiTextures);
int marginHorizontal = (width - imageWidth) / 2; int marginHorizontal = (width - imageWidth) / 2;
int marginVertical = (height - imageHeight) / 2; int marginVertical = (height - imageHeight) / 2;
blit(ms, marginHorizontal, marginVertical, 0, 0, imageWidth, imageHeight); guiGraphics.blit(guiTextures, marginHorizontal, marginVertical, 0, 0, imageWidth, imageHeight);
} }
} }

View File

@@ -1,14 +1,14 @@
package nl.requios.effortlessbuilding.gui; package nl.requios.effortlessbuilding.gui;
import net.minecraft.world.entity.player.Player; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.inventory.ClickType; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.ClickType;
import net.minecraft.world.inventory.MenuType; import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.inventory.Slot; import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.InteractionHand;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemStackHandler; import net.minecraftforge.items.ItemStackHandler;
import net.minecraftforge.items.SlotItemHandler; import net.minecraftforge.items.SlotItemHandler;
@@ -139,7 +139,7 @@ public class RandomizerBagContainer extends AbstractContainerMenu {
@Override @Override
public void removed(Player player) { public void removed(Player player) {
super.removed(player); super.removed(player);
if (!player.level.isClientSide) { if (!player.level().isClientSide) {
broadcastChanges(); broadcastChanges();
} }
} }

View File

@@ -1,11 +1,10 @@
package nl.requios.effortlessbuilding.gui; package nl.requios.effortlessbuilding.gui;
import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
import nl.requios.effortlessbuilding.EffortlessBuilding; import nl.requios.effortlessbuilding.EffortlessBuilding;
@@ -26,24 +25,22 @@ public class RandomizerBagScreen extends AbstractContainerScreen<RandomizerBagCo
} }
@Override @Override
public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
renderBackground(ms); renderBackground(guiGraphics);
super.render(ms, mouseX, mouseY, partialTicks); super.render(guiGraphics, mouseX, mouseY, partialTicks);
this.renderTooltip(ms, mouseX, mouseY); this.renderTooltip(guiGraphics, mouseX, mouseY);
} }
@Override @Override
protected void renderLabels(PoseStack ms, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
this.font.draw(ms, this.title, 8, 6, 0x404040); guiGraphics.drawString(this.font, this.title, 8, 6, 0x404040, false);
this.font.draw(ms, this.playerInventoryTitle, 8, imageHeight - 96 + 2, 0x404040); guiGraphics.drawString(this.font, this.playerInventoryTitle, 8, imageHeight - 96 + 2, 0x404040, false);
} }
@Override @Override
protected void renderBg(PoseStack ms, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) {
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1f);
RenderSystem.setShaderTexture(0, guiTextures);
int marginHorizontal = (width - imageWidth) / 2; int marginHorizontal = (width - imageWidth) / 2;
int marginVertical = (height - imageHeight) / 2; int marginVertical = (height - imageHeight) / 2;
blit(ms, marginHorizontal, marginVertical, 0, 0, imageWidth, imageHeight); guiGraphics.blit(guiTextures, marginHorizontal, marginVertical, 0, 0, imageWidth, imageHeight);
} }
} }

View File

@@ -5,6 +5,8 @@ import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.Button;
@@ -65,19 +67,19 @@ public class PlayerSettingsGui extends Screen {
} }
@Override @Override
public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics guiGraphics, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(ms); this.renderBackground(guiGraphics);
int yy = top; int yy = top;
font.draw(ms, "Shader type", left, yy + 5, 0xFFFFFF); guiGraphics.drawString(font, "Shader type", left, yy + 5, 0xFFFFFF, false);
yy += 50; yy += 50;
font.draw(ms, "Shader speed", left, yy + 5, 0xFFFFFF); guiGraphics.drawString(font, "Shader speed", left, yy + 5, 0xFFFFFF, false);
super.render(ms, mouseX, mouseY, partialTicks); super.render(guiGraphics, mouseX, mouseY, partialTicks);
if (showShaderList) if (showShaderList)
this.shaderTypeList.render(ms, mouseX, mouseY, partialTicks); this.shaderTypeList.render(guiGraphics, mouseX, mouseY, partialTicks);
} }
@Override @Override
@@ -178,7 +180,7 @@ public class PlayerSettingsGui extends Screen {
return super.isMouseOver(p_isMouseOver_1_, p_isMouseOver_3_); return super.isMouseOver(p_isMouseOver_1_, p_isMouseOver_3_);
} }
protected boolean isFocused() { public boolean isFocused() {
return PlayerSettingsGui.this.getFocused() == this; return PlayerSettingsGui.this.getFocused() == this;
} }
@@ -189,8 +191,8 @@ public class PlayerSettingsGui extends Screen {
//From AbstractSelectionList, disabled parts //From AbstractSelectionList, disabled parts
@Override @Override
public void render(PoseStack ms, int p_render_1_, int p_render_2_, float p_render_3_) { public void render(GuiGraphics guiGraphics, int p_render_1_, int p_render_2_, float p_render_3_) {
this.renderBackground(ms); this.renderBackground(guiGraphics);
int i = this.getScrollbarPosition(); int i = this.getScrollbarPosition();
int j = i + 6; int j = i + 6;
Tesselator tessellator = Tesselator.getInstance(); Tesselator tessellator = Tesselator.getInstance();
@@ -209,16 +211,17 @@ public class PlayerSettingsGui extends Screen {
int k = this.getRowLeft(); int k = this.getRowLeft();
int l = this.y0 + 4 - (int) this.getScrollAmount(); int l = this.y0 + 4 - (int) this.getScrollAmount();
if (this.renderHeader) { if (this.renderHeader) {
this.renderHeader(ms, k, l, tessellator); this.renderHeader(guiGraphics, k, l);
} }
this.renderList(ms, p_render_1_, p_render_2_, p_render_3_); this.renderList(guiGraphics, p_render_1_, p_render_2_, p_render_3_);
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
// this.renderHoleBackground(0, this.y0, 255, 255); // this.renderHoleBackground(0, this.y0, 255, 255);
// this.renderHoleBackground(this.y1, this.height, 255, 255); // this.renderHoleBackground(this.y1, this.height, 255, 255);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE); RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE);
RenderSystem.disableTexture(); // RenderSystem.disableTexture();
RenderSystem.setShader(GameRenderer::getPositionColorShader);
// int i1 = 4; // int i1 = 4;
// bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR); // bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
// bufferbuilder.pos((double)this.x0, (double)(this.y0 + 4), 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 0).endVertex(); // bufferbuilder.pos((double)this.x0, (double)(this.y0 + 4), 0.0D).tex(0.0F, 1.0F).color(0, 0, 0, 0).endVertex();
@@ -264,7 +267,7 @@ public class PlayerSettingsGui extends Screen {
} }
// this.renderDecorations(p_render_1_, p_render_2_); // this.renderDecorations(p_render_1_, p_render_2_);
RenderSystem.enableTexture(); // RenderSystem.enableTexture();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
} }
@@ -281,9 +284,9 @@ public class PlayerSettingsGui extends Screen {
} }
@Override @Override
public void render(PoseStack ms, int itemIndex, int rowTop, int rowLeft, int rowWidth, int rowHeight, int mouseX, int mouseY, boolean hovered, float partialTicks) { public void render(GuiGraphics guiGraphics, int itemIndex, int rowTop, int rowLeft, int rowWidth, int rowHeight, int mouseX, int mouseY, boolean hovered, float partialTicks) {
if (rowTop + 10 > ShaderTypeList.this.y0 && rowTop + rowHeight - 5 < ShaderTypeList.this.y1) if (rowTop + 10 > ShaderTypeList.this.y0 && rowTop + rowHeight - 5 < ShaderTypeList.this.y1)
drawString(ms, font, shaderType.name, ShaderTypeList.this.x0 + 8, rowTop + 4, 0xFFFFFF); guiGraphics.drawString(font, shaderType.name, ShaderTypeList.this.x0 + 8, rowTop + 4, 0xFFFFFF, false);
} }
@Override @Override

View File

@@ -1,39 +1,46 @@
package nl.requios.effortlessbuilding.gui.buildmode; package nl.requios.effortlessbuilding.gui.buildmode;
import com.mojang.blaze3d.vertex.*;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.math.Vector4f; import com.mojang.blaze3d.vertex.BufferBuilder;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.ChatFormatting;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.resources.language.I18n; import net.minecraft.client.resources.language.I18n;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.MutableComponent;
import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraftforge.server.command.TextComponentHelper;
import nl.requios.effortlessbuilding.ClientEvents; import nl.requios.effortlessbuilding.ClientEvents;
import nl.requios.effortlessbuilding.EffortlessBuildingClient; import nl.requios.effortlessbuilding.EffortlessBuildingClient;
import nl.requios.effortlessbuilding.buildmode.BuildModeEnum;
import nl.requios.effortlessbuilding.buildmode.ModeOptions; import nl.requios.effortlessbuilding.buildmode.ModeOptions;
import nl.requios.effortlessbuilding.buildmode.ModeOptions.ActionEnum;
import nl.requios.effortlessbuilding.buildmode.ModeOptions.OptionEnum;
import nl.requios.effortlessbuilding.create.foundation.item.ItemDescription; import nl.requios.effortlessbuilding.create.foundation.item.ItemDescription;
import nl.requios.effortlessbuilding.create.foundation.item.TooltipHelper; import nl.requios.effortlessbuilding.create.foundation.item.TooltipHelper;
import nl.requios.effortlessbuilding.create.foundation.utility.Color;
import nl.requios.effortlessbuilding.create.foundation.utility.Components; import nl.requios.effortlessbuilding.create.foundation.utility.Components;
import nl.requios.effortlessbuilding.create.foundation.utility.Lang; import nl.requios.effortlessbuilding.create.foundation.utility.Lang;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import static nl.requios.effortlessbuilding.buildmode.ModeOptions.*; import static nl.requios.effortlessbuilding.buildmode.ModeOptions.getBuildSpeed;
import static nl.requios.effortlessbuilding.buildmode.ModeOptions.getCircleStart;
import nl.requios.effortlessbuilding.buildmode.BuildModeEnum; import static nl.requios.effortlessbuilding.buildmode.ModeOptions.getCubeFill;
import nl.requios.effortlessbuilding.buildmode.ModeOptions.ActionEnum; import static nl.requios.effortlessbuilding.buildmode.ModeOptions.getFill;
import nl.requios.effortlessbuilding.buildmode.ModeOptions.OptionEnum; import static nl.requios.effortlessbuilding.buildmode.ModeOptions.getLineThickness;
import static nl.requios.effortlessbuilding.buildmode.ModeOptions.getRaisedEdge;
/** /**
* Initially from Chisels and Bits by AlgorithmX2 * Initially from Chisels and Bits by AlgorithmX2
@@ -44,11 +51,11 @@ public class RadialMenu extends Screen {
public static final RadialMenu instance = new RadialMenu(); public static final RadialMenu instance = new RadialMenu();
private final Vector4f radialButtonColor = new Vector4f(0f, 0f, 0f, .5f); private final Color radialButtonColor = new Color(0f, 0f, 0f, .5f);
private final Vector4f sideButtonColor = new Vector4f(.5f, .5f, .5f, .5f); private final Color sideButtonColor = new Color(.5f, .5f, .5f, .5f);
private final Vector4f highlightColor = new Vector4f(.6f, .8f, 1f, .6f); private final Color highlightColor = new Color(.6f, .8f, 1f, .6f);
private final Vector4f selectedColor = new Vector4f(0f, .5f, 1f, .5f); private final Color selectedColor = new Color(0f, .5f, 1f, .5f);
private final Vector4f highlightSelectedColor = new Vector4f(0.2f, .7f, 1f, .7f); private final Color highlightSelectedColor = new Color(0.2f, .7f, 1f, .7f);
private final int whiteTextColor = 0xffffffff; private final int whiteTextColor = 0xffffffff;
private final int watermarkTextColor = 0x88888888; private final int watermarkTextColor = 0x88888888;
@@ -95,9 +102,10 @@ public class RadialMenu extends Screen {
} }
@Override @Override
public void render(PoseStack ms, final int mouseX, final int mouseY, final float partialTicks) { public void render(GuiGraphics guiGraphics, final int mouseX, final int mouseY, final float partialTicks) {
BuildModeEnum currentBuildMode = EffortlessBuildingClient.BUILD_MODES.getBuildMode(); BuildModeEnum currentBuildMode = EffortlessBuildingClient.BUILD_MODES.getBuildMode();
PoseStack ms = guiGraphics.pose();
ms.pushPose(); ms.pushPose();
ms.translate(0, 0, 200); ms.translate(0, 0, 200);
@@ -107,11 +115,11 @@ public class RadialMenu extends Screen {
final int startColor = (int) (visibility * 98) << 24; final int startColor = (int) (visibility * 98) << 24;
final int endColor = (int) (visibility * 128) << 24; final int endColor = (int) (visibility * 128) << 24;
fillGradient(ms, 0, 0, width, height, startColor, endColor); guiGraphics.fillGradient(0, 0, width, height, startColor, endColor);
RenderSystem.disableTexture();
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0); RenderSystem.blendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, 1, 0);
RenderSystem.setShader(GameRenderer::getPositionColorShader);
final Tesselator tessellator = Tesselator.getInstance(); final Tesselator tessellator = Tesselator.getInstance();
final BufferBuilder buffer = tessellator.getBuilder(); final BufferBuilder buffer = tessellator.getBuilder();
@@ -182,11 +190,10 @@ public class RadialMenu extends Screen {
tessellator.end(); tessellator.end();
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.enableTexture();
drawIcons(ms, middleX, middleY, modes, buttons); drawIcons(guiGraphics, middleX, middleY, modes, buttons);
drawTexts(ms, currentBuildMode, middleX, middleY, modes, buttons, options, mouseXX, mouseYY); drawTexts(guiGraphics, currentBuildMode, middleX, middleY, modes, buttons, options, mouseXX, mouseYY);
ms.popPose(); ms.popPose();
} }
@@ -221,10 +228,10 @@ public class RadialMenu extends Screen {
final boolean isSelected = currentBuildMode.ordinal() == i; final boolean isSelected = currentBuildMode.ordinal() == i;
final boolean isMouseInQuad = inTriangle(x1m1, y1m1, x2m2, y2m2, x2m1, y2m1, mouseXCenter, mouseYCenter) final boolean isMouseInQuad = inTriangle(x1m1, y1m1, x2m2, y2m2, x2m1, y2m1, mouseXCenter, mouseYCenter)
|| inTriangle(x1m1, y1m1, x1m2, y1m2, x2m2, y2m2, mouseXCenter, mouseYCenter); || inTriangle(x1m1, y1m1, x1m2, y1m2, x2m2, y2m2, mouseXCenter, mouseYCenter);
final boolean isHighlighted = beginRadians <= mouseRadians && mouseRadians <= endRadians && isMouseInQuad; final boolean isHighlighted = beginRadians <= mouseRadians && mouseRadians <= endRadians && isMouseInQuad;
Vector4f color = radialButtonColor; Color color = radialButtonColor;
if (isSelected) color = selectedColor; if (isSelected) color = selectedColor;
if (isHighlighted) color = highlightColor; if (isHighlighted) color = highlightColor;
if (isSelected && isHighlighted) color = highlightSelectedColor; if (isSelected && isHighlighted) color = highlightSelectedColor;
@@ -234,10 +241,10 @@ public class RadialMenu extends Screen {
switchTo = menuRegion.mode; switchTo = menuRegion.mode;
} }
buffer.vertex(middleX + x1m1, middleY + y1m1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x1m1, middleY + y1m1, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + x2m1, middleY + y2m1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x2m1, middleY + y2m1, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + x2m2, middleY + y2m2, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x2m2, middleY + y2m2, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + x1m2, middleY + y1m2, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x1m2, middleY + y1m2, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
//Category line //Category line
color = menuRegion.mode.category.color; color = menuRegion.mode.category.color;
@@ -248,10 +255,10 @@ public class RadialMenu extends Screen {
final double y1m3 = Math.sin(beginRadians + fragment) * categoryLineOuterEdge; final double y1m3 = Math.sin(beginRadians + fragment) * categoryLineOuterEdge;
final double y2m3 = Math.sin(endRadians - fragment) * categoryLineOuterEdge; final double y2m3 = Math.sin(endRadians - fragment) * categoryLineOuterEdge;
buffer.vertex(middleX + x1m1, middleY + y1m1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x1m1, middleY + y1m1, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + x2m1, middleY + y2m1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x2m1, middleY + y2m1, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + x2m3, middleY + y2m3, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x2m3, middleY + y2m3, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + x1m3, middleY + y1m3, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + x1m3, middleY + y1m3, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
} }
} }
} }
@@ -263,15 +270,15 @@ public class RadialMenu extends Screen {
boolean isSelected = boolean isSelected =
btn.action == getBuildSpeed() || btn.action == getBuildSpeed() ||
btn.action == getFill() || btn.action == getFill() ||
btn.action == getCubeFill() || btn.action == getCubeFill() ||
btn.action == getRaisedEdge() || btn.action == getRaisedEdge() ||
btn.action == getLineThickness() || btn.action == getLineThickness() ||
btn.action == getCircleStart() || btn.action == getCircleStart() ||
btn.action == EffortlessBuildingClient.BUILD_SETTINGS.getReplaceModeActionEnum() || btn.action == EffortlessBuildingClient.BUILD_SETTINGS.getReplaceModeActionEnum() ||
btn.action == ActionEnum.TOGGLE_PROTECT_TILE_ENTITIES && EffortlessBuildingClient.BUILD_SETTINGS.shouldProtectTileEntities(); btn.action == ActionEnum.TOGGLE_PROTECT_TILE_ENTITIES && EffortlessBuildingClient.BUILD_SETTINGS.shouldProtectTileEntities();
Vector4f color = sideButtonColor; Color color = sideButtonColor;
if (isSelected) color = selectedColor; if (isSelected) color = selectedColor;
if (isHighlighted) color = highlightColor; if (isHighlighted) color = highlightColor;
if (isSelected && isHighlighted) color = highlightSelectedColor; if (isSelected && isHighlighted) color = highlightSelectedColor;
@@ -281,27 +288,25 @@ public class RadialMenu extends Screen {
doAction = btn.action; doAction = btn.action;
} }
buffer.vertex(middleX + btn.x1, middleY + btn.y1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + btn.x1, middleY + btn.y1, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + btn.x1, middleY + btn.y2, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + btn.x1, middleY + btn.y2, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + btn.x2, middleY + btn.y2, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + btn.x2, middleY + btn.y2, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
buffer.vertex(middleX + btn.x2, middleY + btn.y1, getBlitOffset()).color(color.x(), color.y(), color.z(), color.w()).endVertex(); buffer.vertex(middleX + btn.x2, middleY + btn.y1, 200).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
} }
} }
private void drawIcons(PoseStack ms, double middleX, double middleY, private void drawIcons(GuiGraphics guiGraphics, double middleX, double middleY,
ArrayList<MenuRegion> modes, ArrayList<MenuButton> buttons) { ArrayList<MenuRegion> modes, ArrayList<MenuButton> buttons) {
PoseStack ms = guiGraphics.pose();
ms.pushPose(); ms.pushPose();
RenderSystem.enableTexture();
RenderSystem.setShader(GameRenderer::getPositionColorTexShader);
RenderSystem.setShaderColor(1f, 1f, 1f, 1f);
//Draw buildmode icons //Draw buildmode icons
for (final MenuRegion menuRegion : modes) { for (final MenuRegion menuRegion : modes) {
final double x = (menuRegion.x1 + menuRegion.x2) * 0.5 * (ringOuterEdge * 0.55 + 0.45 * ringInnerEdge); final double x = (menuRegion.x1 + menuRegion.x2) * 0.5 * (ringOuterEdge * 0.55 + 0.45 * ringInnerEdge);
final double y = (menuRegion.y1 + menuRegion.y2) * 0.5 * (ringOuterEdge * 0.55 + 0.45 * ringInnerEdge); final double y = (menuRegion.y1 + menuRegion.y2) * 0.5 * (ringOuterEdge * 0.55 + 0.45 * ringInnerEdge);
menuRegion.mode.icon.render(ms, (int) (middleX + x - 8), (int) (middleY + y - 8)); menuRegion.mode.icon.render(guiGraphics, (int) (middleX + x - 8), (int) (middleY + y - 8));
} }
//Draw action icons //Draw action icons
@@ -310,28 +315,28 @@ public class RadialMenu extends Screen {
final double x = (button.x1 + button.x2) / 2 + 0.01; final double x = (button.x1 + button.x2) / 2 + 0.01;
final double y = (button.y1 + button.y2) / 2 + 0.01; final double y = (button.y1 + button.y2) / 2 + 0.01;
button.action.icon.render(ms, (int) (middleX + x - 8), (int) (middleY + y - 8)); button.action.icon.render(guiGraphics, (int) (middleX + x - 8), (int) (middleY + y - 8));
} }
ms.popPose(); ms.popPose();
} }
private void drawTexts(PoseStack ms, BuildModeEnum currentBuildMode, double middleX, double middleY, ArrayList<MenuRegion> modes, ArrayList<MenuButton> buttons, OptionEnum[] options, int mouseX, int mouseY) { private void drawTexts(GuiGraphics guiGraphics, BuildModeEnum currentBuildMode, double middleX, double middleY, ArrayList<MenuRegion> modes, ArrayList<MenuButton> buttons, OptionEnum[] options, int mouseX, int mouseY) {
//font.drawStringWithShadow("Actions", (int) (middleX - buttonDistance - 13) - font.getStringWidth("Actions") * 0.5f, (int) middleY - 38, 0xffffffff); //font.drawStringWithShadow("Actions", (int) (middleX - buttonDistance - 13) - font.getStringWidth("Actions") * 0.5f, (int) middleY - 38, 0xffffffff);
//Draw option strings //Draw option strings
for (int i = 0; i < currentBuildMode.options.length; i++) { for (int i = 0; i < currentBuildMode.options.length; i++) {
OptionEnum option = options[i]; OptionEnum option = options[i];
font.drawShadow(ms, I18n.get(option.name), (int) (middleX + buttonDistance - 9), (int) middleY - 37 + i * 39, optionTextColor); guiGraphics.drawString(font, I18n.get(option.name), (int) (middleX + buttonDistance - 9), (int) middleY - 37 + i * 39, optionTextColor);
} }
String credits = "Effortless Building"; String credits = "Effortless Building";
font.drawShadow(ms, credits, width - font.width(credits) - 4, height - 10, watermarkTextColor); guiGraphics.drawString(font, credits, width - font.width(credits) - 4, height - 10, watermarkTextColor);
//Draw power level info //Draw power level info
String powerLevelValue = minecraft.player.isCreative() ? "Creative" : String.valueOf(EffortlessBuildingClient.POWER_LEVEL.getPowerLevel()); String powerLevelValue = minecraft.player.isCreative() ? "Creative" : String.valueOf(EffortlessBuildingClient.POWER_LEVEL.getPowerLevel());
String powerLevelText = I18n.get("key.effortlessbuilding.power_level") + ": " + powerLevelValue; String powerLevelText = I18n.get("key.effortlessbuilding.power_level") + ": " + powerLevelValue;
font.drawShadow(ms, powerLevelText, width - font.width(powerLevelText) - 4, height - 22, minecraft.player.isCreative() ? watermarkTextColor : ChatFormatting.DARK_PURPLE.getColor()); guiGraphics.drawString(font, powerLevelText, width - font.width(powerLevelText) - 4, height - 22, minecraft.player.isCreative() ? watermarkTextColor : ChatFormatting.DARK_PURPLE.getColor());
//if hover over power level info, show tooltip //if hover over power level info, show tooltip
if (mouseX >= width - font.width(powerLevelText) - 14 && mouseX <= width && mouseY >= height - 24 && mouseY <= height) { if (mouseX >= width - font.width(powerLevelText) - 14 && mouseX <= width && mouseY >= height - 24 && mouseY <= height) {
@@ -354,7 +359,7 @@ public class RadialMenu extends Screen {
tooltip.addAll(TooltipHelper.cutTextComponent(Components.translatable("key.effortlessbuilding.next_power_level_how"), ChatFormatting.GRAY, ChatFormatting.WHITE)); tooltip.addAll(TooltipHelper.cutTextComponent(Components.translatable("key.effortlessbuilding.next_power_level_how"), ChatFormatting.GRAY, ChatFormatting.WHITE));
} }
renderComponentTooltip(ms, tooltip, mouseX, mouseY); guiGraphics.renderComponentTooltip(font, tooltip, mouseX, mouseY);
} }
@@ -375,11 +380,11 @@ public class RadialMenu extends Screen {
fixed_x -= font.width(text) / 2; fixed_x -= font.width(text) / 2;
} }
font.drawShadow(ms, text, (int) middleX + fixed_x, (int) middleY + fixed_y, whiteTextColor); guiGraphics.drawString(font, text, (int) middleX + fixed_x, (int) middleY + fixed_y, whiteTextColor);
//Draw description //Draw description
text = I18n.get(menuRegion.mode.getDescriptionKey()); text = I18n.get(menuRegion.mode.getDescriptionKey());
font.drawShadow(ms, text, (int) middleX - font.width(text) / 2f, (int) middleY + buildModeDescriptionHeight, descriptionTextColor); guiGraphics.drawString(font, text, (int) ((int) middleX - font.width(text) / 2f), (int) middleY + buildModeDescriptionHeight, descriptionTextColor);
} }
} }
@@ -400,13 +405,14 @@ public class RadialMenu extends Screen {
//Add keybind in brackets //Add keybind in brackets
var keybind = findKeybind(button); var keybind = findKeybind(button);
if (keybind != null) tooltip.add(Lang.translateDirect("tooltip.keybind", keybind.withStyle(ChatFormatting.GRAY)).withStyle(ChatFormatting.DARK_GRAY)); if (keybind != null)
renderComponentTooltip(ms, tooltip, mouseX, mouseY); tooltip.add(Lang.translateDirect("tooltip.keybind", keybind.withStyle(ChatFormatting.GRAY)).withStyle(ChatFormatting.DARK_GRAY));
guiGraphics.renderComponentTooltip(font, tooltip, mouseX, mouseY);
} }
} }
} }
private MutableComponent findKeybind(MenuButton button){ private MutableComponent findKeybind(MenuButton button) {
int keybindingIndex = -1; int keybindingIndex = -1;
if (button.action == ActionEnum.OPEN_MODIFIER_SETTINGS) keybindingIndex = 1; if (button.action == ActionEnum.OPEN_MODIFIER_SETTINGS) keybindingIndex = 1;
@@ -476,7 +482,7 @@ public class RadialMenu extends Screen {
public static void playRadialMenuSound() { public static void playRadialMenuSound() {
final float volume = 0.1f; final float volume = 0.1f;
if (volume >= 0.0001f) { if (volume >= 0.0001f) {
SimpleSoundInstance sound = new SimpleSoundInstance(SoundEvents.UI_BUTTON_CLICK, SoundSource.MASTER, volume, SimpleSoundInstance sound = new SimpleSoundInstance(SoundEvents.UI_BUTTON_CLICK.get(), SoundSource.MASTER, volume,
1.0f, RandomSource.create(), Minecraft.getInstance().player.blockPosition()); 1.0f, RandomSource.create(), Minecraft.getInstance().player.blockPosition());
Minecraft.getInstance().getSoundManager().play(sound); Minecraft.getInstance().getSoundManager().play(sound);
} }

View File

@@ -1,8 +1,8 @@
package nl.requios.effortlessbuilding.gui.buildmodifier; package nl.requios.effortlessbuilding.gui.buildmodifier;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@@ -13,7 +13,6 @@ import nl.requios.effortlessbuilding.buildmodifier.BaseModifier;
import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput; import nl.requios.effortlessbuilding.create.foundation.gui.widget.ScrollInput;
import nl.requios.effortlessbuilding.gui.elements.LabeledScrollInput; import nl.requios.effortlessbuilding.gui.elements.LabeledScrollInput;
import nl.requios.effortlessbuilding.utilities.MathHelper; import nl.requios.effortlessbuilding.utilities.MathHelper;
import nl.requios.effortlessbuilding.systems.PowerLevel;
import java.util.Vector; import java.util.Vector;
@@ -60,25 +59,25 @@ public class ArrayEntry extends BaseModifierEntry<Array> {
} }
@Override @Override
public void render(PoseStack ms, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) { public void render(GuiGraphics guiGraphics, int index, int y, int x, int width, int height, int mouseX, int mouseY, boolean p_230432_9_, float partialTicks) {
super.render(ms, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks); super.render(guiGraphics, index, y, x, width, height, mouseX, mouseY, p_230432_9_, partialTicks);
//draw offset inputs //draw offset inputs
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
offsetInputs.get(i).x = left + 49 + 20 * i; offsetInputs.get(i).setX(left + 49 + 20 * i);
offsetInputs.get(i).y = top + 19; offsetInputs.get(i).setY(top + 19);
offsetInputs.get(i).render(ms, mouseX, mouseY, partialTicks); offsetInputs.get(i).render(guiGraphics, mouseX, mouseY, partialTicks);
} }
//draw count input //draw count input
countInput.x = left + 49; countInput.setX(left + 49);
countInput.y = top + 41; countInput.setY(top + 41);
countInput.render(ms, mouseX, mouseY, partialTicks); countInput.render(guiGraphics, mouseX, mouseY, partialTicks);
//draw reach label //draw reach label
reachLabel.x = right - 8 - getFont().width(reachLabel.text); reachLabel.setX(right - 8 - getFont().width(reachLabel.text));
reachLabel.y = top + 24; reachLabel.setY(top + 24);
reachLabel.render(ms, mouseX, mouseY, partialTicks); reachLabel.render(guiGraphics, mouseX, mouseY, partialTicks);
} }
@Override @Override

Some files were not shown because too many files have changed in this diff Show More