everything but loot compiles

This commit is contained in:
Ell 2023-07-08 12:32:27 +02:00
parent 99dcd0f1ad
commit 6ab4634bfa
121 changed files with 771 additions and 678 deletions

View file

@ -1,95 +1,133 @@
buildscript { plugins {
repositories { id 'eclipse'
// These repositories are only for Gradle plugins, put any other repositories in the repository block further below id 'idea'
maven { url = 'https://maven.minecraftforge.net' } id 'maven-publish'
mavenCentral() id 'net.minecraftforge.gradle' version '[6.0,6.2)'
}
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true
}
} }
apply plugin: 'net.minecraftforge.gradle'
// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
version = '38.2'
group = 'de.ellpeck.naturesaura' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'NaturesAura'
version = mod_version
if (System.getenv('BUILD_NUMBER') != null) { if (System.getenv('BUILD_NUMBER') != null) {
version += "." + System.getenv('BUILD_NUMBER') version += "." + System.getenv('BUILD_NUMBER')
} }
group = mod_group_id
base {
archivesName = mod_name
}
// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17.
java.toolchain.languageVersion = JavaLanguageVersion.of(17) java.toolchain.languageVersion = JavaLanguageVersion.of(17)
println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}"
minecraft { minecraft {
mappings channel: 'official', version: '1.19.2' // The mappings can be changed at any time and must be in the following format.
// Channel: Version:
// official MCVersion Official field/method names from Mojang mapping files
// parchment YYYY.MM.DD-MCVersion Open community-sourced parameter names and javadocs layered on top of official
//
// You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
// See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
//
// Parchment is an unofficial project maintained by ParchmentMC, separate from MinecraftForge
// Additional setup is needed to use their mappings: https://parchmentmc.org/docs/getting-started
//
// Use non-default mappings at your own risk. They may not always work.
// Simply re-run your setup task after changing the mappings to update your workspace.
mappings channel: mapping_channel, version: mapping_version
// When true, this property will have all Eclipse/IntelliJ IDEA run configurations run the "prepareX" task for the given run configuration before launching the game.
// In most cases, it is not necessary to enable.
// enableEclipsePrepareRuns = true
// enableIdeaPrepareRuns = true
// This property allows configuring Gradle's ProcessResources task(s) to run on IDE output locations before launching the game.
// It is REQUIRED to be set to true for this template to function.
// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
copyIdeResources = true
// When true, this property will add the folder name of all declared run configurations to generated IDE run configurations.
// The folder name can be set on a run configuration using the "folderName" property.
// By default, the folder name of a run configuration is the name of the Gradle project containing it.
// generateRunFolders = true
// This property enables access transformers for use in development.
// They will be applied to the Minecraft artifact.
// The access transformer file can be anywhere in the project.
// However, it must be at "META-INF/accesstransformer.cfg" in the final mod jar to be loaded by Forge.
// This default location is a best practice to automatically put the file in the right place in the final jar.
// See https://docs.minecraftforge.net/en/latest/advanced/accesstransformers/ for more information.
// accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg')
// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs { runs {
client { // applies to all the run configs below
configureEach {
workingDirectory project.file('run') workingDirectory project.file('run')
// Recommended logging data for a userdev environment // Recommended logging data for a userdev environment
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' // The markers can be added/remove as needed separated by commas.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.
// "REGISTRYDUMP": For getting the contents of all registries.
property 'forge.logging.markers', 'REGISTRIES'
// Recommended logging level for the console // Recommended logging level for the console
// You can set various levels here.
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'info' property 'forge.logging.console.level', 'info'
property 'mixin.env.disableRefMap', 'true'
mods { mods {
naturesaura { "${mod_id}" {
source sourceSets.main source sourceSets.main
} }
} }
} }
client {
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', mod_id
}
server { server {
workingDirectory project.file('run') property 'forge.enabledGameTestNamespaces', mod_id
args '--nogui'
}
// Recommended logging data for a userdev environment // This run config launches GameTestServer and runs all registered gametests, then exits.
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' // By default, the server will crash when no gametests are provided.
// The gametest system is also enabled by default for other run configs under the /test command.
// Recommended logging level for the console gameTestServer {
property 'forge.logging.console.level', 'info' property 'forge.enabledGameTestNamespaces', mod_id
property 'mixin.env.disableRefMap', 'true'
mods {
naturesaura {
source sourceSets.main
}
}
} }
data { data {
workingDirectory project.file('run') // example of overriding the workingDirectory set in configureEach above
workingDirectory project.file('run-data')
// Recommended logging data for a userdev environment // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
// Recommended logging level for the console
property 'forge.logging.console.level', 'info'
property 'mixin.env.disableRefMap', 'true'
args '--mod', 'naturesaura', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/'), '--existing', file('src/generated/resources')
mods {
naturesaura {
source sourceSets.main
}
}
} }
} }
} }
sourceSets.main.resources { // Include resources generated by data generators.
srcDir 'src/generated/resources' sourceSets.main.resources { srcDir 'src/generated/resources' }
}
repositories { repositories {
maven { // Put repositories for dependencies here
url = "https://dvs1.progwml6.com/files/maven" // ForgeGradle automatically adds the Forge maven and Maven Central for you
}
// If you have mod jar dependencies in ./libs, you can declare them as a repository like so.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html#sub:flat_dir_resolver
// flatDir {
// dir 'libs'
// }
// it says this gets included automatically but apparently it doesn't
mavenCentral()
maven { maven {
url = "https://maven.blamejared.com" url = "https://maven.blamejared.com"
} }
@ -102,77 +140,83 @@ repositories {
} }
dependencies { dependencies {
minecraft 'net.minecraftforge:forge:1.19.2-43.2.0' // Specify the version of Minecraft to use.
// Any artifact can be supplied so long as it has a "userdev" classifier artifact and is a compatible patcher artifact.
// The "userdev" classifier will be requested and setup by ForgeGradle.
// If the group id is "net.minecraft" and the artifact id is one of ["client", "server", "joined"],
// then special handling is done to allow a setup of a vanilla dependency without the use of an external repository.
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
// Example mod dependency with JEI - using fg.deobf() ensures the dependency is remapped to your development mappings
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}-common-api:${jei_version}")
compileOnly fg.deobf("mezz.jei:jei-${minecraft_version}-forge-api:${jei_version}")
runtimeOnly fg.deobf("mezz.jei:jei-${minecraft_version}-forge:${jei_version}")
compileOnly fg.deobf("mezz.jei:jei-1.19.2-common-api:11.5.0.297") runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}")
runtimeOnly fg.deobf("mezz.jei:jei-1.19.2-forge:11.5.0.297") compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:${curios_version}:api")
compileOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}:api")
runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:${patchouli_version}")
compileOnly fg.deobf("vazkii.patchouli:Patchouli:1.19.2-77:api") // Example mod dependency using a mod jar from ./libs with a flat dir repository
runtimeOnly fg.deobf("vazkii.patchouli:Patchouli:1.19.2-77") // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
// The group id is ignored when searching -- in this case, it is "blank"
// implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}")
runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.19.2-5.1.1.0") // For more info:
compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:1.19.2-5.1.1.0:api") // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
// TODO Enchantability
/* compile fg.deobf("quarris.enchantability:Enchantability:11.0.48")*/
} }
// Example for how to get properties into the manifest for reading by the runtime.. // This block of code expands all declared replace properties in the specified resource targets.
jar { // A missing property will result in an error. Properties are expanded using ${} Groovy notation.
manifest { // When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments.
attributes([ // See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
"Specification-Title" : "naturesaura", tasks.named('processResources', ProcessResources).configure {
"Specification-Vendor" : "Ellpeck", var replaceProperties = [
"Specification-Version" : "1", // We are version 1 of ourselves minecraft_version : minecraft_version, minecraft_version_range: minecraft_version_range,
"Implementation-Title" : project.name, forge_version : forge_version, forge_version_range: forge_version_range,
"Implementation-Version" : "${version}", loader_version_range: loader_version_range,
"Implementation-Vendor" : "Ellpeck", mod_id : mod_id, mod_name: mod_name, mod_license: mod_license, mod_version: version,
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") mod_authors : mod_authors, mod_description: mod_description,
]) ]
inputs.properties replaceProperties
filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) {
expand replaceProperties + [project: project]
} }
} }
task deobfJar(type: Jar) { // Example for how to get properties into the manifest for reading at runtime.
from(sourceSets.main.output) tasks.named('jar', Jar).configure {
archiveName = "${baseName}-${version}-deobf.${extension}" manifest {
attributes([
'Specification-Title' : mod_id,
'Specification-Vendor' : mod_authors,
'Specification-Version' : '1', // We are version 1 of ourselves
'Implementation-Title' : project.name,
'Implementation-Version' : project.jar.archiveVersion,
'Implementation-Vendor' : mod_authors,
'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
])
}
// This is the preferred method to reobfuscate your jar file
finalizedBy 'reobfJar'
} }
task sourcesJar(type: Jar) { // However if you are in a multi-project build, dev time needs unobfed jar files, so you can delay the obfuscation until publishing by doing:
from(sourceSets.main.allSource) // tasks.named('publish').configure {
archiveName = "${baseName}-${version}-sources.${extension}" // dependsOn 'reobfJar'
} // }
task apiJar(type: Jar) {
from(sourceSets.main.output)
from(sourceSets.main.java)
include("de/ellpeck/naturesaura/api/**")
archiveName = "${baseName}-${version}-api.${extension}"
}
artifacts {
archives deobfJar
archives sourcesJar
archives apiJar
}
// Example configuration to allow publishing using the maven-publish plugin
publishing { publishing {
publications { publications {
mavenJava(MavenPublication) { register('mavenJava', MavenPublication) {
groupId project.group groupId mod_group_id
artifactId project.archivesBaseName artifactId mod_name
version project.version artifact jar
from components.java
artifact deobfJar {
classifier 'deobf'
}
artifact sourcesJar {
classifier 'sources'
}
artifact apiJar {
classifier 'api'
}
pom.withXml { pom.withXml {
def node = asNode() def node = asNode()
if (node.dependencies.size() > 0) if (node.dependencies.size() > 0)
@ -186,3 +230,7 @@ publishing {
} }
} }
} }
tasks.withType(JavaCompile).configureEach {
options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}

View file

@ -1,4 +1,57 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties. # Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process. # This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false org.gradle.daemon=false
## Environment Properties
# The Minecraft version must agree with the Forge version to get a valid artifact
minecraft_version=1.20.1
# The Minecraft version range can use any release version of Minecraft as bounds.
# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly
# as they do not follow standard versioning conventions.
minecraft_version_range=[1.20.1,1.21)
# The Forge version must agree with the Minecraft version to get a valid artifact
forge_version=47.1.0
# The Forge version range can use any version of Forge as bounds or match the loader version range
forge_version_range=[47,)
# The loader version range can only use the major version of Forge/FML as bounds
loader_version_range=[47,)
# The mapping channel to use for mappings.
# The default set of supported mapping channels are ["official", "snapshot", "snapshot_nodoc", "stable", "stable_nodoc"].
# Additional mapping channels can be registered through the "channelProviders" extension in a Gradle plugin.
#
# | Channel | Version | |
# |-----------|----------------------|--------------------------------------------------------------------------------|
# | official | MCVersion | Official field/method names from Mojang mapping files |
# | parchment | YYYY.MM.DD-MCVersion | Open community-sourced parameter names and javadocs layered on top of official |
#
# You must be aware of the Mojang license when using the 'official' or 'parchment' mappings.
# See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md
#
# Parchment is an unofficial project maintained by ParchmentMC, separate from Minecraft Forge.
# Additional setup is needed to use their mappings, see https://parchmentmc.org/docs/getting-started
mapping_channel=official
# The mapping version to query from the mapping channel.
# This must match the format required by the mapping channel.
mapping_version=1.20.1
jei_version=15.2.0.22
curios_version=5.2.0-beta.3+1.20.1
patchouli_version=1.20.1-80-FORGE-SNAPSHOT
## Mod Properties
# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
# Must match the String constant located in the main mod class annotated with @Mod.
mod_id=naturesaura
# The human-readable display name for the mod.
mod_name=NaturesAura
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=MIT
# The mod version. See https://semver.org/
mod_version=38.2
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
mod_group_id=de.ellpeck.naturesaura
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
mod_authors=Ellpeck
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
mod_description=Nature's Aura is a Minecraft mod about collecting, using and replenishing the Aura naturally present in the world to create useful devices and unique mechanics.

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

13
settings.gradle Normal file
View file

@ -0,0 +1,13 @@
pluginManagement {
repositories {
gradlePluginPortal()
maven {
name = 'MinecraftForge'
url = 'https://maven.minecraftforge.net/'
}
}
}
plugins {
id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0'
}

View file

@ -13,6 +13,7 @@ import de.ellpeck.naturesaura.misc.LevelData;
import de.ellpeck.naturesaura.packet.PacketHandler; import de.ellpeck.naturesaura.packet.PacketHandler;
import de.ellpeck.naturesaura.packet.PacketParticles; import de.ellpeck.naturesaura.packet.PacketParticles;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -117,22 +118,19 @@ public final class Helper {
} }
public static boolean areItemsEqual(ItemStack first, ItemStack second, boolean nbt) { public static boolean areItemsEqual(ItemStack first, ItemStack second, boolean nbt) {
if (!ItemStack.isSame(first, second)) // TODO see if this is the correct new comparison method?
return false; return nbt ? ItemStack.isSameItemSameTags(first, second) : ItemStack.isSameItem(first, second);
return !nbt || ItemStack.tagMatches(first, second);
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public static void renderItemInGui(ItemStack stack, int x, int y, float scale) { public static void renderItemInGui(GuiGraphics graphics, ItemStack stack, int x, int y, float scale) {
var poseStack = RenderSystem.getModelViewStack(); var poseStack = graphics.pose();
poseStack.pushPose(); poseStack.pushPose();
poseStack.translate(x, y, 0); poseStack.translate(x, y, 0);
poseStack.scale(scale, scale, scale); poseStack.scale(scale, scale, scale);
RenderSystem.applyModelViewMatrix(); graphics.renderItem(stack, 0, 0);
Minecraft.getInstance().getItemRenderer().renderGuiItem(stack, 0, 0); graphics.renderItemDecorations(Minecraft.getInstance().font, stack, 0, 0, null);
Minecraft.getInstance().getItemRenderer().renderGuiItemDecorations(Minecraft.getInstance().font, stack, 0, 0, null);
poseStack.popPose(); poseStack.popPose();
RenderSystem.applyModelViewMatrix();
} }
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
@ -164,18 +162,18 @@ public final class Helper {
} }
public static InteractionResult putStackOnTile(Player player, InteractionHand hand, BlockPos pos, int slot, boolean sound) { public static InteractionResult putStackOnTile(Player player, InteractionHand hand, BlockPos pos, int slot, boolean sound) {
var tile = player.level.getBlockEntity(pos); var tile = player.level().getBlockEntity(pos);
if (tile instanceof BlockEntityImpl) { if (tile instanceof BlockEntityImpl) {
var handler = ((BlockEntityImpl) tile).getItemHandler(); var handler = ((BlockEntityImpl) tile).getItemHandler();
if (handler != null) { if (handler != null) {
var handStack = player.getItemInHand(hand); var handStack = player.getItemInHand(hand);
if (!handStack.isEmpty()) { if (!handStack.isEmpty()) {
var remain = handler.insertItem(slot, handStack, player.level.isClientSide); var remain = handler.insertItem(slot, handStack, player.level().isClientSide);
if (!ItemStack.matches(remain, handStack)) { if (!ItemStack.matches(remain, handStack)) {
if (sound) if (sound)
player.level.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, player.level().playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5,
SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.PLAYERS, 0.75F, 1F); SoundEvents.ITEM_FRAME_ADD_ITEM, SoundSource.PLAYERS, 0.75F, 1F);
if (!player.level.isClientSide) if (!player.level().isClientSide)
player.setItemInHand(hand, remain); player.setItemInHand(hand, remain);
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
@ -183,13 +181,13 @@ public final class Helper {
if (!handler.getStackInSlot(slot).isEmpty()) { if (!handler.getStackInSlot(slot).isEmpty()) {
if (sound) if (sound)
player.level.playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, player.level().playSound(player, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5,
SoundEvents.ITEM_FRAME_REMOVE_ITEM, SoundSource.PLAYERS, 0.75F, 1F); SoundEvents.ITEM_FRAME_REMOVE_ITEM, SoundSource.PLAYERS, 0.75F, 1F);
if (!player.level.isClientSide) { if (!player.level().isClientSide) {
var stack = handler.getStackInSlot(slot); var stack = handler.getStackInSlot(slot);
if (!player.addItem(stack)) { if (!player.addItem(stack)) {
var item = new ItemEntity(player.level, player.getX(), player.getY(), player.getZ(), stack); var item = new ItemEntity(player.level(), player.getX(), player.getY(), player.getZ(), stack);
player.level.addFreshEntity(item); player.level().addFreshEntity(item);
} }
handler.setStackInSlot(slot, ItemStack.EMPTY); handler.setStackInSlot(slot, ItemStack.EMPTY);
} }
@ -260,7 +258,7 @@ public final class Helper {
public static void addAdvancement(Player player, ResourceLocation advancement, String criterion) { public static void addAdvancement(Player player, ResourceLocation advancement, String criterion) {
if (!(player instanceof ServerPlayer playerMp)) if (!(player instanceof ServerPlayer playerMp))
return; return;
var adv = playerMp.getLevel().getServer().getAdvancements().getAdvancement(advancement); var adv = playerMp.level().getServer().getAdvancements().getAdvancement(advancement);
if (adv != null) if (adv != null)
playerMp.getAdvancements().award(adv, criterion); playerMp.getAdvancements().award(adv, criterion);
} }
@ -372,7 +370,7 @@ public final class Helper {
return false; return false;
var disabled = !Helper.isToolEnabled(stack); var disabled = !Helper.isToolEnabled(stack);
stack.getOrCreateTag().putBoolean(NaturesAura.MOD_ID + ":disabled", !disabled); stack.getOrCreateTag().putBoolean(NaturesAura.MOD_ID + ":disabled", !disabled);
player.level.playSound(null, player.getX() + 0.5, player.getY() + 0.5, player.getZ() + 0.5, SoundEvents.ARROW_HIT_PLAYER, SoundSource.PLAYERS, 0.65F, 1F); player.level().playSound(null, player.getX() + 0.5, player.getY() + 0.5, player.getZ() + 0.5, SoundEvents.ARROW_HIT_PLAYER, SoundSource.PLAYERS, 0.65F, 1F);
return true; return true;
} }
} }

View file

@ -32,12 +32,13 @@ public final class NaturesAura {
public static final String MOD_NAME = "Nature's Aura"; public static final String MOD_NAME = "Nature's Aura";
public static final Logger LOGGER = LogManager.getLogger(NaturesAura.MOD_NAME); public static final Logger LOGGER = LogManager.getLogger(NaturesAura.MOD_NAME);
public static final CreativeModeTab CREATIVE_TAB = new CreativeModeTab(NaturesAura.MOD_ID) { // TODO creative tab
/* public static final CreativeModeTab CREATIVE_TAB = new CreativeModeTab(NaturesAura.MOD_ID) {
@Override @Override
public ItemStack makeIcon() { public ItemStack makeIcon() {
return new ItemStack(ModItems.GOLD_LEAF); return new ItemStack(ModItems.GOLD_LEAF);
} }
}; };*/
public static NaturesAura instance; public static NaturesAura instance;
// this causes a classloading issue if it's not wrapped like this // this causes a classloading issue if it's not wrapped like this
@SuppressWarnings("Convert2MethodRef") @SuppressWarnings("Convert2MethodRef")

View file

@ -16,8 +16,7 @@ import net.minecraft.world.level.block.LeavesBlock;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
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.material.Material; import net.minecraft.world.level.material.MapColor;
import net.minecraft.world.level.material.MaterialColor;
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 org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -25,7 +24,7 @@ import org.jetbrains.annotations.Nullable;
public class BlockAncientLeaves extends LeavesBlock implements IModItem, IColorProvidingBlock, IColorProvidingItem, ICustomBlockState, EntityBlock { public class BlockAncientLeaves extends LeavesBlock implements IModItem, IColorProvidingBlock, IColorProvidingItem, ICustomBlockState, EntityBlock {
public BlockAncientLeaves() { public BlockAncientLeaves() {
super(Block.Properties.of(Material.LEAVES, MaterialColor.COLOR_PINK).strength(0.2F).randomTicks().noOcclusion().sound(SoundType.GRASS)); super(Block.Properties.of().mapColor(MapColor.COLOR_PINK).strength(0.2F).randomTicks().noOcclusion().sound(SoundType.GRASS));
ModRegistry.ALL_ITEMS.add(this); ModRegistry.ALL_ITEMS.add(this);
ModRegistry.ALL_ITEMS.add(new ModTileType<>(BlockEntityAncientLeaves::new, this)); ModRegistry.ALL_ITEMS.add(new ModTileType<>(BlockEntityAncientLeaves::new, this));
} }

View file

@ -6,15 +6,14 @@ import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.world.level.block.RotatedPillarBlock; import net.minecraft.world.level.block.RotatedPillarBlock;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MapColor;
import net.minecraft.world.level.material.MaterialColor;
public class BlockAncientLog extends RotatedPillarBlock implements IModItem, ICustomBlockState { public class BlockAncientLog extends RotatedPillarBlock implements IModItem, ICustomBlockState {
private final String baseName; private final String baseName;
public BlockAncientLog(String baseName) { public BlockAncientLog(String baseName) {
super(Properties.of(Material.WOOD, MaterialColor.COLOR_PURPLE).strength(2.0F).sound(SoundType.WOOD)); super(Properties.of().mapColor(MapColor.COLOR_PURPLE).strength(2.0F).sound(SoundType.WOOD));
this.baseName = baseName; this.baseName = baseName;
ModRegistry.ALL_ITEMS.add(this); ModRegistry.ALL_ITEMS.add(this);
} }

View file

@ -12,10 +12,10 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.*;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.event.ForgeEventFactory; import net.minecraftforge.event.ForgeEventFactory;
@ -26,7 +26,7 @@ public class BlockAncientSapling extends BushBlock implements BonemealableBlock,
protected static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D); protected static final VoxelShape SHAPE = Block.box(2.0D, 0.0D, 2.0D, 14.0D, 12.0D, 14.0D);
public BlockAncientSapling() { public BlockAncientSapling() {
super(Properties.of(Material.GRASS).strength(0.0F).sound(SoundType.GRASS)); super(Properties.of().strength(0.0F).sound(SoundType.GRASS));
ModRegistry.ALL_ITEMS.add(this); ModRegistry.ALL_ITEMS.add(this);
} }
@ -58,7 +58,7 @@ public class BlockAncientSapling extends BushBlock implements BonemealableBlock,
} }
@Override @Override
public boolean isValidBonemealTarget(BlockGetter level, BlockPos pos, BlockState state, boolean b) { public boolean isValidBonemealTarget(LevelReader p_256559_, BlockPos p_50898_, BlockState p_50899_, boolean p_50900_) {
return true; return true;
} }
@ -85,4 +85,4 @@ public class BlockAncientSapling extends BushBlock implements BonemealableBlock,
public void generateCustomItemModel(ItemModelGenerator generator) { public void generateCustomItemModel(ItemModelGenerator generator) {
generator.withExistingParent(this.getBaseName(), "item/generated").texture("layer0", "block/" + this.getBaseName()); generator.withExistingParent(this.getBaseName(), "item/generated").texture("layer0", "block/" + this.getBaseName());
} }
} }

View file

@ -14,7 +14,6 @@ import net.minecraft.world.entity.animal.Animal;
import net.minecraft.world.entity.npc.Npc; import net.minecraft.world.entity.npc.Npc;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -28,7 +27,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
public class BlockAnimalGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public class BlockAnimalGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState {
public BlockAnimalGenerator() { public BlockAnimalGenerator() {
super("animal_generator", BlockEntityAnimalGenerator.class, Properties.of(Material.STONE).strength(3F).sound(SoundType.STONE)); super("animal_generator", BlockEntityAnimalGenerator.class, Properties.of().strength(3F).sound(SoundType.STONE));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
@ -36,7 +35,7 @@ public class BlockAnimalGenerator extends BlockContainerImpl implements IVisuali
@SubscribeEvent @SubscribeEvent
public void onLivingUpdate(LivingEvent.LivingTickEvent event) { public void onLivingUpdate(LivingEvent.LivingTickEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
if (entity.level.isClientSide || entity.level.getGameTime() % 40 != 0 || !(entity instanceof Animal) || entity instanceof Npc) if (entity.level().isClientSide || entity.level().getGameTime() % 40 != 0 || !(entity instanceof Animal) || entity instanceof Npc)
return; return;
var data = entity.getPersistentData(); var data = entity.getPersistentData();
var timeAlive = data.getInt(NaturesAura.MOD_ID + ":time_alive"); var timeAlive = data.getInt(NaturesAura.MOD_ID + ":time_alive");
@ -46,10 +45,10 @@ public class BlockAnimalGenerator extends BlockContainerImpl implements IVisuali
@SubscribeEvent @SubscribeEvent
public void onEntityDeath(LivingDeathEvent event) { public void onEntityDeath(LivingDeathEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
if (entity.level.isClientSide || !(entity instanceof Animal) || entity instanceof Npc) if (entity.level().isClientSide || !(entity instanceof Animal) || entity instanceof Npc)
return; return;
var pos = entity.blockPosition(); var pos = entity.blockPosition();
Helper.getBlockEntitiesInArea(entity.level, pos, 5, tile -> { Helper.getBlockEntitiesInArea(entity.level(), pos, 5, tile -> {
if (!(tile instanceof BlockEntityAnimalGenerator gen)) if (!(tile instanceof BlockEntityAnimalGenerator gen))
return false; return false;
@ -71,7 +70,7 @@ public class BlockAnimalGenerator extends BlockContainerImpl implements IVisuali
gen.setGenerationValues(time, amount); gen.setGenerationValues(time, amount);
var genPos = gen.getBlockPos(); var genPos = gen.getBlockPos();
PacketHandler.sendToAllAround(entity.level, pos, 32, new PacketParticles( PacketHandler.sendToAllAround(entity.level(), pos, 32, new PacketParticles(
(float) entity.getX(), (float) entity.getY(), (float) entity.getZ(), PacketParticles.Type.ANIMAL_GEN_CONSUME, (float) entity.getX(), (float) entity.getY(), (float) entity.getZ(), PacketParticles.Type.ANIMAL_GEN_CONSUME,
child ? 1 : 0, child ? 1 : 0,
(int) (entity.getEyeHeight() * 10F), (int) (entity.getEyeHeight() * 10F),
@ -114,4 +113,4 @@ public class BlockAnimalGenerator extends BlockContainerImpl implements IVisuali
generator.modLoc("block/" + this.getBaseName() + "_bottom"), generator.modLoc("block/" + this.getBaseName() + "_bottom"),
generator.modLoc("block/" + this.getBaseName() + "_top"))); generator.modLoc("block/" + this.getBaseName() + "_top")));
} }
} }

View file

@ -2,11 +2,10 @@ package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityAnimalSpawner; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityAnimalSpawner;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
public class BlockAnimalSpawner extends BlockContainerImpl { public class BlockAnimalSpawner extends BlockContainerImpl {
public BlockAnimalSpawner() { public BlockAnimalSpawner() {
super("animal_spawner", BlockEntityAnimalSpawner.class, Properties.of(Material.STONE).strength(2F).sound(SoundType.STONE)); super("animal_spawner", BlockEntityAnimalSpawner.class, Properties.of().strength(2F).sound(SoundType.STONE));
} }
} }

View file

@ -10,7 +10,6 @@ import de.ellpeck.naturesaura.reg.ICustomItemModel;
import de.ellpeck.naturesaura.reg.IModItem; import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
@ -23,7 +22,6 @@ import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityTicker;
import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -37,7 +35,7 @@ public class BlockAuraBloom extends BushBlock implements IModItem, ICustomBlockS
private final Block[] allowedGround; private final Block[] allowedGround;
public BlockAuraBloom(String baseName, Block... allowedGround) { public BlockAuraBloom(String baseName, Block... allowedGround) {
super(Properties.of(Material.PLANT).noCollission().strength(0).sound(SoundType.GRASS)); super(Properties.of().noCollission().strength(0).sound(SoundType.GRASS));
this.baseName = baseName; this.baseName = baseName;
this.allowedGround = allowedGround; this.allowedGround = allowedGround;
ModRegistry.ALL_ITEMS.add(this); ModRegistry.ALL_ITEMS.add(this);
@ -58,7 +56,7 @@ public class BlockAuraBloom extends BushBlock implements IModItem, ICustomBlockS
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void entityInside(BlockState state, Level levelIn, BlockPos pos, Entity entityIn) { public void entityInside(BlockState state, Level levelIn, BlockPos pos, Entity entityIn) {
if (this == ModBlocks.AURA_CACTUS) if (this == ModBlocks.AURA_CACTUS)
entityIn.hurt(DamageSource.CACTUS, 1); entityIn.hurt(entityIn.damageSources().cactus(), 1);
} }
@Override @Override

View file

@ -5,12 +5,11 @@ import net.minecraft.core.BlockPos;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
public class BlockAuraDetector extends BlockContainerImpl { public class BlockAuraDetector extends BlockContainerImpl {
public BlockAuraDetector() { public BlockAuraDetector() {
super("aura_detector", BlockEntityAuraDetector.class, Properties.of(Material.STONE).strength(2F).sound(SoundType.STONE)); super("aura_detector", BlockEntityAuraDetector.class, Properties.of().strength(2F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -10,14 +10,13 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.level.material.Material;
public class BlockAutoCrafter extends BlockContainerImpl implements ICustomBlockState { public class BlockAutoCrafter extends BlockContainerImpl implements ICustomBlockState {
public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING;
public BlockAutoCrafter() { public BlockAutoCrafter() {
super("auto_crafter", BlockEntityAutoCrafter.class, Properties.of(Material.WOOD).strength(1.5F).sound(SoundType.WOOD)); super("auto_crafter", BlockEntityAutoCrafter.class, Properties.of().strength(1.5F).sound(SoundType.WOOD));
} }
@Override @Override

View file

@ -15,7 +15,6 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
@ -27,7 +26,7 @@ public class BlockChunkLoader extends BlockContainerImpl implements IVisualizabl
private static final VoxelShape SHAPE = Block.box(4, 4, 4, 12, 12, 12); private static final VoxelShape SHAPE = Block.box(4, 4, 4, 12, 12, 12);
public BlockChunkLoader() { public BlockChunkLoader() {
super("chunk_loader", BlockEntityChunkLoader.class, Properties.of(Material.STONE).strength(3F).sound(SoundType.STONE)); super("chunk_loader", BlockEntityChunkLoader.class, Properties.of().strength(3F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -27,7 +27,7 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -113,7 +113,7 @@ public class BlockContainerImpl extends BaseEntityBlock implements IModItem {
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDrops(BlockState state, LootParams.Builder builder) {
var drops = super.getDrops(state, builder); var drops = super.getDrops(state, builder);
var tile = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); var tile = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY);
@ -176,8 +176,9 @@ public class BlockContainerImpl extends BaseEntityBlock implements IModItem {
private BlockEntity createBlockEntity(BlockPos pos, BlockState state) { private BlockEntity createBlockEntity(BlockPos pos, BlockState state) {
try { try {
return this.tileClass.getConstructor(BlockPos.class, BlockState.class).newInstance(pos, state); return this.tileClass.getConstructor(BlockPos.class, BlockState.class).newInstance(pos, state);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { } catch (InstantiationException | IllegalAccessException | InvocationTargetException |
NoSuchMethodException e) {
throw new IllegalStateException("Cannot construct block entity from class " + this.tileClass, e); throw new IllegalStateException("Cannot construct block entity from class " + this.tileClass, e);
} }
} }
} }

View file

@ -8,12 +8,11 @@ import net.minecraft.util.RandomSource;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
public class BlockDecayedLeaves extends BlockImpl implements ICustomBlockState { public class BlockDecayedLeaves extends BlockImpl implements ICustomBlockState {
public BlockDecayedLeaves() { public BlockDecayedLeaves() {
super("decayed_leaves", Properties.of(Material.LEAVES).strength(0.2F).sound(SoundType.GRASS).noOcclusion().randomTicks()); super("decayed_leaves", Properties.of().strength(0.2F).sound(SoundType.GRASS).noOcclusion().randomTicks());
} }
@Override @Override

View file

@ -99,7 +99,7 @@ public class BlockDimensionRail extends BaseRailBlock implements IModItem, ICust
@Override @Override
public Entity placeEntity(Entity entity, ServerLevel currentLevel, ServerLevel destLevel, float yaw, Function<Boolean, Entity> repositionEntity) { public Entity placeEntity(Entity entity, ServerLevel currentLevel, ServerLevel destLevel, float yaw, Function<Boolean, Entity> repositionEntity) {
// repositionEntity always causes a NPE because why wouldn't it, so this is a fixed copy // repositionEntity always causes a NPE because why wouldn't it, so this is a fixed copy
entity.level.getProfiler().popPush("reloading"); entity.level().getProfiler().popPush("reloading");
var result = entity.getType().create(destLevel); var result = entity.getType().create(destLevel);
if (result != null) { if (result != null) {
result.restoreFrom(entity); result.restoreFrom(entity);

View file

@ -21,8 +21,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FluidState;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootParams;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
@ -38,7 +37,7 @@ public class BlockEndFlower extends BushBlock implements IModItem, ICustomBlockS
protected static final VoxelShape SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 10.0D, 11.0D); protected static final VoxelShape SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 10.0D, 11.0D);
public BlockEndFlower() { public BlockEndFlower() {
super(Properties.of(Material.GRASS).noCollission().strength(0.5F).sound(SoundType.GRASS)); super(Properties.of().noCollission().strength(0.5F).sound(SoundType.GRASS));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
ModRegistry.ALL_ITEMS.add(this); ModRegistry.ALL_ITEMS.add(this);
ModRegistry.ALL_ITEMS.add(new ModTileType<>(BlockEntityEndFlower::new, this)); ModRegistry.ALL_ITEMS.add(new ModTileType<>(BlockEntityEndFlower::new, this));
@ -54,20 +53,20 @@ public class BlockEndFlower extends BushBlock implements IModItem, ICustomBlockS
@SubscribeEvent @SubscribeEvent
public void onDragonTick(LivingEvent.LivingTickEvent event) { public void onDragonTick(LivingEvent.LivingTickEvent event) {
var living = event.getEntity(); var living = event.getEntity();
if (living.level.isClientSide || !(living instanceof EnderDragon dragon)) if (living.level().isClientSide || !(living instanceof EnderDragon dragon))
return; return;
if (dragon.dragonDeathTime < 150 || dragon.dragonDeathTime % 10 != 0) if (dragon.dragonDeathTime < 150 || dragon.dragonDeathTime % 10 != 0)
return; return;
for (var i = 0; i < 6; i++) { for (var i = 0; i < 6; i++) {
var x = dragon.level.random.nextInt(256) - 128; var x = dragon.level().random.nextInt(256) - 128;
var z = dragon.level.random.nextInt(256) - 128; var z = dragon.level().random.nextInt(256) - 128;
var pos = new BlockPos(x, dragon.level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z), z); var pos = new BlockPos(x, dragon.level().getHeight(Heightmap.Types.WORLD_SURFACE, x, z), z);
if (!dragon.level.isLoaded(pos)) if (!dragon.level().isLoaded(pos))
continue; continue;
if (dragon.level.getBlockState(pos.below()).getBlock() != Blocks.END_STONE) if (dragon.level().getBlockState(pos.below()).getBlock() != Blocks.END_STONE)
continue; continue;
dragon.level.setBlockAndUpdate(pos, this.defaultBlockState()); dragon.level().setBlockAndUpdate(pos, this.defaultBlockState());
} }
} }
@ -104,9 +103,10 @@ public class BlockEndFlower extends BushBlock implements IModItem, ICustomBlockS
levelIn.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState()); levelIn.setBlockAndUpdate(pos, Blocks.AIR.defaultBlockState());
} }
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDrops(BlockState state, LootParams.Builder builder) {
var tile = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY); var tile = builder.getOptionalParameter(LootContextParams.BLOCK_ENTITY);
if (tile instanceof BlockEntityEndFlower f && f.isDrainMode) if (tile instanceof BlockEntityEndFlower f && f.isDrainMode)
return NonNullList.create(); return NonNullList.create();

View file

@ -27,7 +27,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -42,7 +41,7 @@ import java.util.List;
public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider<BlockEntityEnderCrate>, ICustomBlockState { public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider<BlockEntityEnderCrate>, ICustomBlockState {
public BlockEnderCrate() { public BlockEnderCrate() {
super("ender_crate", BlockEntityEnderCrate.class, Properties.of(Material.STONE).strength(5F).lightLevel(s -> 7).sound(SoundType.STONE)); super("ender_crate", BlockEntityEnderCrate.class, Properties.of().strength(5F).lightLevel(s -> 7).sound(SoundType.STONE));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
@ -77,7 +76,7 @@ public class BlockEnderCrate extends BlockContainerImpl implements ITESRProvider
var name = event.getName(); var name = event.getName();
if (name == null || name.isEmpty()) if (name == null || name.isEmpty())
return; return;
if (ILevelData.getOverworldData(player.level).isEnderStorageLocked(name)) if (ILevelData.getOverworldData(player.level()).isEnderStorageLocked(name))
return; return;
var output = stack.copy(); var output = stack.copy();
output.getOrCreateTag().putString(NaturesAura.MOD_ID + ":ender_name", name); output.getOrCreateTag().putString(NaturesAura.MOD_ID + ":ender_name", name);

View file

@ -14,7 +14,6 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -22,7 +21,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
public class BlockFieldCreator extends BlockContainerImpl implements ICustomBlockState { public class BlockFieldCreator extends BlockContainerImpl implements ICustomBlockState {
public BlockFieldCreator() { public BlockFieldCreator() {
super("field_creator", BlockEntityFieldCreator.class, Properties.of(Material.STONE).strength(2F).noCollission().sound(SoundType.STONE)); super("field_creator", BlockEntityFieldCreator.class, Properties.of().strength(2F).noCollission().sound(SoundType.STONE));
} }
@Override @Override

View file

@ -7,7 +7,6 @@ import de.ellpeck.naturesaura.reg.ICustomBlockState;
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.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -15,7 +14,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
public class BlockFireworkGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public class BlockFireworkGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState {
public BlockFireworkGenerator() { public BlockFireworkGenerator() {
super("firework_generator", BlockEntityFireworkGenerator.class, Properties.of(Material.STONE).strength(3F).sound(SoundType.STONE)); super("firework_generator", BlockEntityFireworkGenerator.class, Properties.of().strength(3F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -7,7 +7,6 @@ import de.ellpeck.naturesaura.reg.ICustomBlockState;
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.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -15,7 +14,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
public class BlockFlowerGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public class BlockFlowerGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState {
public BlockFlowerGenerator() { public BlockFlowerGenerator() {
super("flower_generator", BlockEntityFlowerGenerator.class, Properties.of(Material.WOOD).sound(SoundType.WOOD).strength(2F)); super("flower_generator", BlockEntityFlowerGenerator.class, Properties.of().sound(SoundType.WOOD).strength(2F));
} }
@Override @Override

View file

@ -15,7 +15,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
@ -37,7 +36,7 @@ public class BlockFurnaceHeater extends BlockContainerImpl implements ICustomBlo
}; };
public BlockFurnaceHeater() { public BlockFurnaceHeater() {
super("furnace_heater", BlockEntityFurnaceHeater.class, Properties.of(Material.STONE).strength(3F)); super("furnace_heater", BlockEntityFurnaceHeater.class, Properties.of().strength(3F));
} }
@Override @Override

View file

@ -8,12 +8,11 @@ import de.ellpeck.naturesaura.reg.ICustomBlockState;
import de.ellpeck.naturesaura.reg.ITESRProvider; import de.ellpeck.naturesaura.reg.ITESRProvider;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
public class BlockGeneratorLimitRemover extends BlockContainerImpl implements ITESRProvider<BlockEntityGeneratorLimitRemover>, ICustomBlockState { public class BlockGeneratorLimitRemover extends BlockContainerImpl implements ITESRProvider<BlockEntityGeneratorLimitRemover>, ICustomBlockState {
public BlockGeneratorLimitRemover() { public BlockGeneratorLimitRemover() {
super("generator_limit_remover", BlockEntityGeneratorLimitRemover.class, Properties.of(Material.STONE).strength(2F).sound(SoundType.STONE)); super("generator_limit_remover", BlockEntityGeneratorLimitRemover.class, Properties.of().strength(2F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -18,8 +18,7 @@ import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MapColor;
import net.minecraft.world.level.material.MaterialColor;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -29,7 +28,7 @@ public class BlockGoldenLeaves extends LeavesBlock implements IModItem, IColorPr
public static final IntegerProperty STAGE = IntegerProperty.create("stage", 0, BlockGoldenLeaves.HIGHEST_STAGE); public static final IntegerProperty STAGE = IntegerProperty.create("stage", 0, BlockGoldenLeaves.HIGHEST_STAGE);
public BlockGoldenLeaves() { public BlockGoldenLeaves() {
super(Properties.of(Material.LEAVES, MaterialColor.GOLD).strength(0.2F).randomTicks().noOcclusion().sound(SoundType.GRASS)); super(Properties.of().mapColor(MapColor.GOLD).strength(0.2F).randomTicks().noOcclusion().sound(SoundType.GRASS));
ModRegistry.ALL_ITEMS.add(this); ModRegistry.ALL_ITEMS.add(this);
} }
@ -115,4 +114,4 @@ public class BlockGoldenLeaves extends LeavesBlock implements IModItem, IColorPr
public void generateCustomBlockState(BlockStateGenerator generator) { public void generateCustomBlockState(BlockStateGenerator generator) {
generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName()))); generator.simpleBlock(this, generator.models().getExistingFile(generator.modLoc(this.getBaseName())));
} }
} }

View file

@ -22,7 +22,6 @@ import net.minecraft.world.level.block.entity.Hopper;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.BooleanOp;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
@ -51,7 +50,7 @@ public class BlockGratedChute extends BlockContainerImpl implements ICustomBlock
private static final VoxelShape WEST_RAYTRACE_SHAPE = Shapes.or(Hopper.INSIDE, Block.box(0.0D, 8.0D, 6.0D, 4.0D, 10.0D, 10.0D)); private static final VoxelShape WEST_RAYTRACE_SHAPE = Shapes.or(Hopper.INSIDE, Block.box(0.0D, 8.0D, 6.0D, 4.0D, 10.0D, 10.0D));
public BlockGratedChute() { public BlockGratedChute() {
super("grated_chute", BlockEntityGratedChute.class, Properties.of(Material.METAL).strength(3.0F, 8.0F).sound(SoundType.METAL)); super("grated_chute", BlockEntityGratedChute.class, Properties.of().strength(3.0F, 8.0F).sound(SoundType.METAL));
} }
@Override @Override

View file

@ -5,7 +5,6 @@ import de.ellpeck.naturesaura.blocks.tiles.BlockEntityHopperUpgrade;
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.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
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 +12,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
public class BlockHopperUpgrade extends BlockContainerImpl implements IVisualizable { public class BlockHopperUpgrade extends BlockContainerImpl implements IVisualizable {
public BlockHopperUpgrade() { public BlockHopperUpgrade() {
super("hopper_upgrade", BlockEntityHopperUpgrade.class, Properties.of(Material.METAL).strength(2.5F).sound(SoundType.METAL)); super("hopper_upgrade", BlockEntityHopperUpgrade.class, Properties.of().strength(2.5F).sound(SoundType.METAL));
} }
@Override @Override

View file

@ -11,7 +11,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
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 net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
@ -22,7 +21,7 @@ public class BlockLight extends BlockImpl implements ICustomBlockState, INoItemB
private static final VoxelShape SHAPE = Block.box(4, 4, 4, 12, 12, 12); private static final VoxelShape SHAPE = Block.box(4, 4, 4, 12, 12, 12);
public BlockLight() { public BlockLight() {
super("light", Properties.of(Material.WOOL).noCollission().lightLevel(s -> 15)); super("light", Properties.of().noCollission().lightLevel(s -> 15));
} }
@Override @Override

View file

@ -8,12 +8,11 @@ import de.ellpeck.naturesaura.reg.ICustomBlockState;
import de.ellpeck.naturesaura.reg.ITESRProvider; import de.ellpeck.naturesaura.reg.ITESRProvider;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
public class BlockLowerLimiter extends BlockContainerImpl implements ICustomBlockState, ITESRProvider<BlockEntityLowerLimiter> { public class BlockLowerLimiter extends BlockContainerImpl implements ICustomBlockState, ITESRProvider<BlockEntityLowerLimiter> {
public BlockLowerLimiter() { public BlockLowerLimiter() {
super("lower_limiter", BlockEntityLowerLimiter.class, Properties.of(Material.STONE).strength(2F).sound(SoundType.STONE)); super("lower_limiter", BlockEntityLowerLimiter.class, Properties.of().strength(2F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -5,7 +5,6 @@ import de.ellpeck.naturesaura.blocks.tiles.BlockEntityMossGenerator;
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.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
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 +12,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
public class BlockMossGenerator extends BlockContainerImpl implements IVisualizable { public class BlockMossGenerator extends BlockContainerImpl implements IVisualizable {
public BlockMossGenerator() { public BlockMossGenerator() {
super("moss_generator", BlockEntityMossGenerator.class, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); super("moss_generator", BlockEntityMossGenerator.class, Properties.of().strength(2.5F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -16,7 +16,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
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 net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
@ -27,7 +26,7 @@ public class BlockNatureAltar extends BlockContainerImpl implements ITESRProvide
private static final VoxelShape SHAPE = Shapes.create(0, 0, 0, 1, 12 / 16F, 1); private static final VoxelShape SHAPE = Shapes.create(0, 0, 0, 1, 12 / 16F, 1);
public BlockNatureAltar() { public BlockNatureAltar() {
super("nature_altar", BlockEntityNatureAltar.class, Block.Properties.of(Material.STONE).strength(4F)); super("nature_altar", BlockEntityNatureAltar.class, Block.Properties.of().strength(4F));
} }
@Override @Override

View file

@ -6,8 +6,8 @@ import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.BonemealableBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -36,7 +36,7 @@ public class BlockNetherGrass extends BlockImpl implements ICustomBlockState, Bo
} }
@Override @Override
public boolean isValidBonemealTarget(BlockGetter levelIn, BlockPos pos, BlockState state, boolean isClient) { public boolean isValidBonemealTarget(LevelReader levelIn, BlockPos pos, BlockState state, boolean isClient) {
return levelIn.getBlockState(pos.above()).isAir(); return levelIn.getBlockState(pos.above()).isAir();
} }

View file

@ -14,7 +14,6 @@ import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.SaplingBlock;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -25,7 +24,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
public class BlockOakGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public class BlockOakGenerator extends BlockContainerImpl implements IVisualizable, ICustomBlockState {
public BlockOakGenerator() { public BlockOakGenerator() {
super("oak_generator", BlockEntityOakGenerator.class, Properties.of(Material.WOOD).strength(2F).sound(SoundType.WOOD)); super("oak_generator", BlockEntityOakGenerator.class, Properties.of().strength(2F).sound(SoundType.WOOD));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
@ -39,11 +38,11 @@ public class BlockOakGenerator extends BlockContainerImpl implements IVisualizab
Helper.getBlockEntitiesInArea(level, pos, 10, tile -> { Helper.getBlockEntitiesInArea(level, pos, 10, tile -> {
if (!(tile instanceof BlockEntityOakGenerator oak)) if (!(tile instanceof BlockEntityOakGenerator oak))
return false; return false;
var replacement = BlockOakGenerator.getReplacement(event.getFeature()); /* var replacement = BlockOakGenerator.getReplacement(event.getFeature());
if (replacement != null) { if (replacement != null) {
oak.scheduledBigTrees.add(pos); oak.scheduledBigTrees.add(pos);
event.setFeature(replacement); event.setFeature(replacement);
} }*/
return true; return true;
}); });
} }
@ -69,7 +68,8 @@ public class BlockOakGenerator extends BlockContainerImpl implements IVisualizab
generator.modLoc("block/" + this.getBaseName() + "_top"))); generator.modLoc("block/" + this.getBaseName() + "_top")));
} }
private static Holder<? extends ConfiguredFeature<?, ?>> getReplacement(Holder<? extends ConfiguredFeature<?, ?>> feature) { // TODO oak gen replacements
/*private static Holder<? extends ConfiguredFeature<?, ?>> getReplacement(Holder<? extends ConfiguredFeature<?, ?>> feature) {
if (feature == TreeFeatures.FANCY_OAK || feature == TreeFeatures.FANCY_OAK_BEES) { if (feature == TreeFeatures.FANCY_OAK || feature == TreeFeatures.FANCY_OAK_BEES) {
return TreeFeatures.OAK; return TreeFeatures.OAK;
} else if (feature == TreeFeatures.FANCY_OAK_BEES_002) { } else if (feature == TreeFeatures.FANCY_OAK_BEES_002) {
@ -81,5 +81,5 @@ public class BlockOakGenerator extends BlockContainerImpl implements IVisualizab
} else { } else {
return null; return null;
} }
} }*/
} }

View file

@ -16,7 +16,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
@ -27,7 +26,7 @@ public class BlockOfferingTable extends BlockContainerImpl implements ITESRProvi
private static final VoxelShape SHAPE = Shapes.create(2 / 16F, 0F, 2 / 16F, 14 / 16F, 1F, 14 / 16F); private static final VoxelShape SHAPE = Shapes.create(2 / 16F, 0F, 2 / 16F, 14 / 16F, 1F, 14 / 16F);
public BlockOfferingTable() { public BlockOfferingTable() {
super("offering_table", BlockEntityOfferingTable.class, Properties.of(Material.WOOD).strength(2F).sound(SoundType.WOOD)); super("offering_table", BlockEntityOfferingTable.class, Properties.of().strength(2F).sound(SoundType.WOOD));
} }
@Override @Override

View file

@ -10,7 +10,6 @@ import de.ellpeck.naturesaura.reg.ICustomBlockState;
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.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -21,7 +20,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent;
public class BlockPickupStopper extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public class BlockPickupStopper extends BlockContainerImpl implements IVisualizable, ICustomBlockState {
public BlockPickupStopper() { public BlockPickupStopper() {
super("pickup_stopper", BlockEntityPickupStopper.class, Properties.of(Material.STONE).strength(2F).sound(SoundType.STONE)); super("pickup_stopper", BlockEntityPickupStopper.class, Properties.of().strength(2F).sound(SoundType.STONE));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
@ -32,7 +31,7 @@ public class BlockPickupStopper extends BlockContainerImpl implements IVisualiza
if (player != null && !player.isShiftKeyDown()) { if (player != null && !player.isShiftKeyDown()) {
var item = event.getItem(); var item = event.getItem();
var pos = item.blockPosition(); var pos = item.blockPosition();
Helper.getBlockEntitiesInArea(item.level, pos, 8, tile -> { Helper.getBlockEntitiesInArea(item.level(), pos, 8, tile -> {
if (!(tile instanceof BlockEntityPickupStopper stopper)) if (!(tile instanceof BlockEntityPickupStopper stopper))
return false; return false;
var radius = stopper.getRadius(); var radius = stopper.getRadius();
@ -44,8 +43,8 @@ public class BlockPickupStopper extends BlockContainerImpl implements IVisualiza
event.setCanceled(true); event.setCanceled(true);
if (item.level.getGameTime() % 3 == 0) if (item.level().getGameTime() % 3 == 0)
PacketHandler.sendToAllAround(item.level, pos, 32, PacketHandler.sendToAllAround(item.level(), pos, 32,
new PacketParticles((float) item.getX(), (float) item.getY(), (float) item.getZ(), PacketParticles.Type.PICKUP_STOPPER)); new PacketParticles((float) item.getX(), (float) item.getY(), (float) item.getZ(), PacketParticles.Type.PICKUP_STOPPER));
return true; return true;
}); });

View file

@ -7,7 +7,6 @@ import de.ellpeck.naturesaura.reg.ICustomBlockState;
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.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -15,7 +14,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
public class BlockPlacer extends BlockContainerImpl implements IVisualizable, ICustomBlockState { public class BlockPlacer extends BlockContainerImpl implements IVisualizable, ICustomBlockState {
public BlockPlacer() { public BlockPlacer() {
super("placer", BlockEntityPlacer.class, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); super("placer", BlockEntityPlacer.class, Properties.of().strength(2.5F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -3,12 +3,11 @@ package de.ellpeck.naturesaura.blocks;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityPotionGenerator; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityPotionGenerator;
import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.data.BlockStateGenerator;
import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomBlockState;
import net.minecraft.world.level.material.Material;
public class BlockPotionGenerator extends BlockContainerImpl implements ICustomBlockState { public class BlockPotionGenerator extends BlockContainerImpl implements ICustomBlockState {
public BlockPotionGenerator() { public BlockPotionGenerator() {
super("potion_generator", BlockEntityPotionGenerator.class, Properties.of(Material.STONE).strength(5F)); super("potion_generator", BlockEntityPotionGenerator.class, Properties.of().strength(5F));
} }
@Override @Override

View file

@ -7,7 +7,6 @@ import net.minecraft.core.BlockPos;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
@ -17,7 +16,7 @@ public class BlockPowderPlacer extends BlockContainerImpl implements ICustomBloc
private static final VoxelShape SHAPE = Shapes.create(0F, 0F, 0F, 1F, 4 / 16F, 1F); private static final VoxelShape SHAPE = Shapes.create(0F, 0F, 0F, 1F, 4 / 16F, 1F);
public BlockPowderPlacer() { public BlockPowderPlacer() {
super("powder_placer", BlockEntityPowderPlacer.class, Properties.of(Material.STONE).strength(2, 5F).sound(SoundType.STONE)); super("powder_placer", BlockEntityPowderPlacer.class, Properties.of().strength(2, 5F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -24,7 +24,6 @@ import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.DispenserBlock; import net.minecraft.world.level.block.DispenserBlock;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.ProjectileImpactEvent; import net.minecraftforge.event.entity.ProjectileImpactEvent;
@ -34,7 +33,7 @@ import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
public class BlockProjectileGenerator extends BlockContainerImpl implements ITESRProvider<BlockEntityProjectileGenerator>, ICustomBlockState { public class BlockProjectileGenerator extends BlockContainerImpl implements ITESRProvider<BlockEntityProjectileGenerator>, ICustomBlockState {
public BlockProjectileGenerator() { public BlockProjectileGenerator() {
super("projectile_generator", BlockEntityProjectileGenerator.class, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); super("projectile_generator", BlockEntityProjectileGenerator.class, Properties.of().strength(2.5F).sound(SoundType.STONE));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
DispenserBlock.registerBehavior(Items.ENDER_PEARL, new AbstractProjectileDispenseBehavior() { DispenserBlock.registerBehavior(Items.ENDER_PEARL, new AbstractProjectileDispenseBehavior() {
@ -61,7 +60,7 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES
@SubscribeEvent @SubscribeEvent
public void onProjectileImpact(ProjectileImpactEvent event) { public void onProjectileImpact(ProjectileImpactEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
if (entity.level.isClientSide) if (entity.level().isClientSide)
return; return;
var ray = event.getRayTraceResult(); var ray = event.getRayTraceResult();
if (!(ray instanceof BlockHitResult blockRay)) if (!(ray instanceof BlockHitResult blockRay))
@ -69,7 +68,7 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES
var pos = blockRay.getBlockPos(); var pos = blockRay.getBlockPos();
if (pos == null) if (pos == null)
return; return;
var tile = entity.level.getBlockEntity(pos); var tile = entity.level().getBlockEntity(pos);
if (!(tile instanceof BlockEntityProjectileGenerator generator)) if (!(tile instanceof BlockEntityProjectileGenerator generator))
return; return;
if (generator.nextSide != blockRay.getDirection()) if (generator.nextSide != blockRay.getDirection())
@ -81,9 +80,9 @@ public class BlockProjectileGenerator extends BlockContainerImpl implements ITES
return; return;
generator.generateAura(amount); generator.generateAura(amount);
PacketHandler.sendToAllAround(entity.level, pos, 32, PacketHandler.sendToAllAround(entity.level(), pos, 32,
new PacketParticles((float) entity.getX(), (float) entity.getY(), (float) entity.getZ(), PacketParticles.Type.PROJECTILE_GEN, pos.getX(), pos.getY(), pos.getZ())); new PacketParticles((float) entity.getX(), (float) entity.getY(), (float) entity.getZ(), PacketParticles.Type.PROJECTILE_GEN, pos.getX(), pos.getY(), pos.getZ()));
entity.level.playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.ENDER_EYE_LAUNCH, SoundSource.BLOCKS, 0.8F, 1F); entity.level().playSound(null, pos.getX(), pos.getY(), pos.getZ(), SoundEvents.ENDER_EYE_LAUNCH, SoundSource.BLOCKS, 0.8F, 1F);
generator.nextSide = generator.nextSide.getClockWise(); generator.nextSide = generator.nextSide.getClockWise();
generator.sendToClients(); generator.sendToClients();

View file

@ -4,12 +4,11 @@ import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityRFConverter; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityRFConverter;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
public class BlockRFConverter extends BlockContainerImpl { public class BlockRFConverter extends BlockContainerImpl {
public BlockRFConverter() { public BlockRFConverter() {
super("rf_converter", BlockEntityRFConverter.class, Properties.of(Material.STONE).sound(SoundType.STONE).strength(3)); super("rf_converter", BlockEntityRFConverter.class, Properties.of().sound(SoundType.STONE).strength(3));
} }
@Override @Override

View file

@ -48,12 +48,12 @@ public class BlockSlimeSplitGenerator extends BlockContainerImpl implements IVis
@SubscribeEvent @SubscribeEvent
public void onLivingDeath(LivingDeathEvent event) { public void onLivingDeath(LivingDeathEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
if (!(entity instanceof Slime slime) || entity.level.isClientSide) if (!(entity instanceof Slime slime) || entity.level().isClientSide)
return; return;
var size = slime.getSize(); var size = slime.getSize();
if (size <= 1) if (size <= 1)
return; return;
Helper.getBlockEntitiesInArea(entity.level, entity.blockPosition(), 8, tile -> { Helper.getBlockEntitiesInArea(entity.level(), entity.blockPosition(), 8, tile -> {
if (!(tile instanceof BlockEntitySlimeSplitGenerator gen)) if (!(tile instanceof BlockEntitySlimeSplitGenerator gen))
return false; return false;
if (gen.isBusy()) if (gen.isBusy())

View file

@ -15,7 +15,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
@ -24,7 +23,7 @@ import net.minecraft.world.phys.shapes.VoxelShape;
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 net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.living.LivingSpawnEvent; import net.minecraftforge.event.entity.living.MobSpawnEvent;
import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
@ -33,7 +32,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable,
private static final VoxelShape SHAPE = Shapes.create(4 / 16F, 0F, 4 / 16F, 12 / 16F, 13 / 16F, 12 / 16F); private static final VoxelShape SHAPE = Shapes.create(4 / 16F, 0F, 4 / 16F, 12 / 16F, 13 / 16F, 12 / 16F);
public BlockSpawnLamp() { public BlockSpawnLamp() {
super("spawn_lamp", BlockEntitySpawnLamp.class, Properties.of(Material.METAL).strength(3F).lightLevel(s -> 15).sound(SoundType.METAL)); super("spawn_lamp", BlockEntitySpawnLamp.class, Properties.of().strength(3F).lightLevel(s -> 15).sound(SoundType.METAL));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }
@ -43,12 +42,12 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable,
} }
@SubscribeEvent @SubscribeEvent
public void onSpawn(LivingSpawnEvent.CheckSpawn event) { public void onSpawn(MobSpawnEvent.PositionCheck event) {
var amountToUse = 200; var amountToUse = 200;
if (event.getSpawner() != null) if (event.getSpawner() != null)
return; return;
var accessor = event.getLevel(); var accessor = event.getLevel();
var pos = new BlockPos(event.getX(), event.getY(), event.getZ()); var pos = BlockPos.containing(event.getX(), event.getY(), event.getZ());
if (!(accessor instanceof Level level)) if (!(accessor instanceof Level level))
return; return;
var data = (LevelData) ILevelData.getLevelData(level); var data = (LevelData) ILevelData.getLevelData(level);
@ -65,7 +64,7 @@ public class BlockSpawnLamp extends BlockContainerImpl implements IVisualizable,
continue; continue;
var entity = (Mob) event.getEntity(); var entity = (Mob) event.getEntity();
if (entity.checkSpawnRules(level, event.getSpawnReason()) && entity.checkSpawnObstruction(level)) { if (entity.checkSpawnRules(level, event.getSpawnType()) && entity.checkSpawnObstruction(level)) {
var spot = IAuraChunk.getHighestSpot(level, lampPos, 32, lampPos); var spot = IAuraChunk.getHighestSpot(level, lampPos, 32, lampPos);
IAuraChunk.getAuraChunk(level, spot).drainAura(spot, amountToUse); IAuraChunk.getAuraChunk(level, spot).drainAura(spot, amountToUse);

View file

@ -46,7 +46,7 @@ public class BlockSpring extends BlockContainerImpl implements ICustomBlockState
Player player = Minecraft.getInstance().player; Player player = Minecraft.getInstance().player;
if (player == null) if (player == null)
return 0; return 0;
return BiomeColors.getAverageWaterColor(player.level, player.blockPosition()); return BiomeColors.getAverageWaterColor(player.level(), player.blockPosition());
} }
}; };
} }

View file

@ -4,12 +4,11 @@ import de.ellpeck.naturesaura.blocks.tiles.BlockEntityTimeChanger;
import de.ellpeck.naturesaura.data.BlockStateGenerator; import de.ellpeck.naturesaura.data.BlockStateGenerator;
import de.ellpeck.naturesaura.reg.ICustomBlockState; import de.ellpeck.naturesaura.reg.ICustomBlockState;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material;
public class BlockTimeChanger extends BlockContainerImpl implements ICustomBlockState { public class BlockTimeChanger extends BlockContainerImpl implements ICustomBlockState {
public BlockTimeChanger() { public BlockTimeChanger() {
super("time_changer", BlockEntityTimeChanger.class, Properties.of(Material.STONE).strength(2.5F).sound(SoundType.STONE)); super("time_changer", BlockEntityTimeChanger.class, Properties.of().strength(2.5F).sound(SoundType.STONE));
} }
@Override @Override

View file

@ -20,7 +20,6 @@ import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
@ -39,7 +38,7 @@ public class BlockWoodStand extends BlockContainerImpl implements ITESRProvider<
private static final VoxelShape SHAPE = Shapes.create(3 / 16F, 0F, 3 / 16F, 13 / 16F, 13 / 16F, 13 / 16F); private static final VoxelShape SHAPE = Shapes.create(3 / 16F, 0F, 3 / 16F, 13 / 16F, 13 / 16F, 13 / 16F);
public BlockWoodStand() { public BlockWoodStand() {
super("wood_stand", BlockEntityWoodStand.class, Properties.of(Material.WOOD).strength(1.5F).sound(SoundType.WOOD)); super("wood_stand", BlockEntityWoodStand.class, Properties.of().strength(1.5F).sound(SoundType.WOOD));
MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(this);
} }

View file

@ -12,7 +12,6 @@ import net.minecraft.tags.BlockTags;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.SaplingBlock;
import net.minecraft.world.level.material.Material;
public final class Multiblocks { public final class Multiblocks {
@ -38,7 +37,7 @@ public final class Multiblocks {
'G', ModBlocks.GOLD_POWDER, 'G', ModBlocks.GOLD_POWDER,
'0', new Matcher(Blocks.OAK_SAPLING.defaultBlockState(), '0', new Matcher(Blocks.OAK_SAPLING.defaultBlockState(),
(level, start, offset, pos, state, c) -> { (level, start, offset, pos, state, c) -> {
if (state.getBlock() instanceof SaplingBlock || state.getMaterial() == Material.WOOD) if (state.getBlock() instanceof SaplingBlock || state.is(BlockTags.LOGS))
return true; return true;
// try-catch to prevent blocks that need to have been placed crashing here // try-catch to prevent blocks that need to have been placed crashing here
try { try {

View file

@ -59,7 +59,7 @@ public class BlockEntityAnimalSpawner extends BlockEntityImpl implements ITickab
this.time += 10; this.time += 10;
if (this.time >= this.currentRecipe.time) { if (this.time >= this.currentRecipe.time) {
var entity = this.currentRecipe.makeEntity(this.level, new BlockPos(this.spawnX, this.worldPosition.getY() + 1, this.spawnZ)); var entity = this.currentRecipe.makeEntity(this.level, BlockPos.containing(this.spawnX, this.worldPosition.getY() + 1, this.spawnZ));
this.level.addFreshEntity(entity); this.level.addFreshEntity(entity);
this.currentRecipe = null; this.currentRecipe = null;

View file

@ -10,6 +10,7 @@ import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.inventory.CraftingContainer;
import net.minecraft.world.inventory.TransientCraftingContainer;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -17,7 +18,7 @@ import net.minecraft.world.phys.AABB;
public class BlockEntityAutoCrafter extends BlockEntityImpl implements ITickableBlockEntity { public class BlockEntityAutoCrafter extends BlockEntityImpl implements ITickableBlockEntity {
public final CraftingContainer crafting = new CraftingContainer(new AbstractContainerMenu(null, 0) { public final CraftingContainer crafting = new TransientCraftingContainer(new AbstractContainerMenu(null, 0) {
@Override @Override
public ItemStack quickMoveStack(Player p_38941_, int p_38942_) { public ItemStack quickMoveStack(Player p_38941_, int p_38942_) {
return ItemStack.EMPTY; return ItemStack.EMPTY;
@ -81,7 +82,7 @@ public class BlockEntityAutoCrafter extends BlockEntityImpl implements ITickable
if (recipe == null) if (recipe == null)
return; return;
var result = recipe.assemble(this.crafting); var result = recipe.assemble(this.crafting, this.level.registryAccess());
if (result.isEmpty()) if (result.isEmpty())
return; return;
var resultItem = new ItemEntity(this.level, var resultItem = new ItemEntity(this.level,

View file

@ -57,7 +57,7 @@ public class BlockEntityBlastFurnaceBooster extends BlockEntityImpl implements I
return; return;
if (output.isEmpty()) { if (output.isEmpty()) {
var result = recipe.getResultItem(); var result = recipe.getResultItem(this.level.registryAccess());
tile.setItem(2, result.copy()); tile.setItem(2, result.copy());
} else { } else {
output.grow(1); output.grow(1);

View file

@ -14,7 +14,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;
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 net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootParams;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.MinecraftForge;
@ -109,7 +109,7 @@ public class BlockEntityFieldCreator extends BlockEntityImpl implements ITickabl
if (!state.isAir() && state.getDestroySpeed(this.level, pos) >= 0F) { if (!state.isAir() && state.getDestroySpeed(this.level, pos) >= 0F) {
var fake = FakePlayerFactory.getMinecraft((ServerLevel) this.level); var fake = FakePlayerFactory.getMinecraft((ServerLevel) this.level);
if (!MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(this.level, pos, state, fake))) { if (!MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(this.level, pos, state, fake))) {
var drops = state.getDrops(new LootContext.Builder((ServerLevel) this.level) var drops = state.getDrops(new LootParams.Builder((ServerLevel) this.level)
.withParameter(LootContextParams.THIS_ENTITY, fake) .withParameter(LootContextParams.THIS_ENTITY, fake)
.withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(pos)) .withParameter(LootContextParams.ORIGIN, Vec3.atCenterOf(pos))
.withParameter(LootContextParams.BLOCK_STATE, state) .withParameter(LootContextParams.BLOCK_STATE, state)

View file

@ -105,7 +105,7 @@ public class BlockEntityFurnaceHeater extends BlockEntityImpl implements ITickab
var recipe = this.level.getRecipeManager().getRecipeFor(BlockEntityFurnaceHeater.getRecipeType(furnace), furnace, this.level).orElse(null); var recipe = this.level.getRecipeManager().getRecipeFor(BlockEntityFurnaceHeater.getRecipeType(furnace), furnace, this.level).orElse(null);
if (recipe == null) if (recipe == null)
return false; return false;
var output = recipe.getResultItem(); var output = recipe.getResultItem(this.level.registryAccess());
var currOutput = furnace.getItem(2); var currOutput = furnace.getItem(2);
return currOutput.isEmpty() || Helper.areItemsEqual(currOutput, output, true) && currOutput.getCount() + output.getCount() <= output.getMaxStackSize(); return currOutput.isEmpty() || Helper.areItemsEqual(currOutput, output, true) && currOutput.getCount() + output.getCount() <= output.getMaxStackSize();
} else } else

View file

@ -59,7 +59,7 @@ public class BlockEntityPlacer extends BlockEntityImpl implements ITickableBlock
var up = pos.above(); var up = pos.above();
var state = this.level.getBlockState(up); var state = this.level.getBlockState(up);
if (state.getMaterial().isReplaceable()) if (state.canBeReplaced())
validPositions.add(up); validPositions.add(up);
} }
if (validPositions.isEmpty()) if (validPositions.isEmpty())

View file

@ -49,15 +49,15 @@ public class BlockEntitySnowCreator extends BlockEntityImpl implements ITickable
for (var i = 0; i < 10; i++) { for (var i = 0; i < 10; i++) {
var angle = this.level.random.nextFloat() * Math.PI * 2; var angle = this.level.random.nextFloat() * Math.PI * 2;
var pos = this.worldPosition.offset(Math.cos(angle) * range * this.level.random.nextFloat(), 0, Math.sin(angle) * range * this.level.random.nextFloat()); var pos = this.worldPosition.offset(Mth.floor(Math.cos(angle) * range * this.level.random.nextFloat()), 0, Mth.floor(Math.sin(angle) * range * this.level.random.nextFloat()));
pos = this.level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, pos); pos = this.level.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, pos);
var down = pos.below(); var down = pos.below();
var fluid = this.level.getFluidState(down).getType(); var fluid = this.level.getFluidState(down).getType();
if (fluid == Fluids.WATER) { if (fluid == Fluids.WATER) {
if (this.level.getBlockState(down).getMaterial().isReplaceable()) if (this.level.getBlockState(down).canBeReplaced())
this.level.setBlockAndUpdate(down, Blocks.ICE.defaultBlockState()); this.level.setBlockAndUpdate(down, Blocks.ICE.defaultBlockState());
} else if (Blocks.SNOW.defaultBlockState().canSurvive(this.level, pos) && this.level.getBlockState(pos).getBlock() != Blocks.SNOW && this.level.getBlockState(pos).getMaterial().isReplaceable()) { } else if (Blocks.SNOW.defaultBlockState().canSurvive(this.level, pos) && this.level.getBlockState(pos).getBlock() != Blocks.SNOW && this.level.getBlockState(pos).canBeReplaced()) {
this.level.setBlockAndUpdate(pos, Blocks.SNOW.defaultBlockState()); this.level.setBlockAndUpdate(pos, Blocks.SNOW.defaultBlockState());
if (this.snowmanCount < range / 2 && this.level.random.nextFloat() >= 0.995F) { if (this.snowmanCount < range / 2 && this.level.random.nextFloat() >= 0.995F) {
@ -83,9 +83,9 @@ public class BlockEntitySnowCreator extends BlockEntityImpl implements ITickable
for (var i = range * 4; i >= 0; i--) { for (var i = range * 4; i >= 0; i--) {
var angle = this.level.random.nextFloat() * Math.PI * 2; var angle = this.level.random.nextFloat() * Math.PI * 2;
var pos = this.worldPosition.offset( var pos = this.worldPosition.offset(
Math.cos(angle) * range * this.level.random.nextFloat(), Mth.floor(Math.cos(angle) * range * this.level.random.nextFloat()),
Mth.nextInt(this.level.random, range / 2, range), Mth.nextInt(this.level.random, range / 2, range),
Math.sin(angle) * range * this.level.random.nextFloat()); Mth.floor(Math.sin(angle) * range * this.level.random.nextFloat()));
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(
pos.getX() + this.level.random.nextFloat(), pos.getY() + 1, pos.getZ() + this.level.random.nextFloat(), pos.getX() + this.level.random.nextFloat(), pos.getY() + 1, pos.getZ() + this.level.random.nextFloat(),
this.level.random.nextGaussian() * 0.05, 0, this.level.random.nextGaussian() * 0.05, this.level.random.nextGaussian() * 0.05, 0, this.level.random.nextGaussian() * 0.05,

View file

@ -2,7 +2,6 @@ package de.ellpeck.naturesaura.blocks.tiles.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 com.mojang.math.Matrix4f;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityEnderCrate; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityEnderCrate;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
@ -10,6 +9,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
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 org.joml.Matrix4f;
@OnlyIn(Dist.CLIENT) @OnlyIn(Dist.CLIENT)
public class RenderEnderCrate implements BlockEntityRenderer<BlockEntityEnderCrate> { public class RenderEnderCrate implements BlockEntityRenderer<BlockEntityEnderCrate> {

View file

@ -2,7 +2,7 @@ package de.ellpeck.naturesaura.blocks.tiles.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 com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityGeneratorLimitRemover; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityGeneratorLimitRemover;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityImpl; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityImpl;
@ -44,7 +44,7 @@ public class RenderGeneratorLimitRemover implements BlockEntityRenderer<BlockEnt
var brightness = 15 << 20 | 15 << 4; var brightness = 15 << 20 | 15 << 4;
var alpha = ((float) Math.sin(System.currentTimeMillis() / 800D) + 1F) / 2F; var alpha = ((float) Math.sin(System.currentTimeMillis() / 800D) + 1F) / 2F;
stack.translate(-0.002F + xOff, 1 + 0.002F + yOff, 1 + 0.002F + zOff); stack.translate(-0.002F + xOff, 1 + 0.002F + yOff, 1 + 0.002F + zOff);
stack.mulPose(Vector3f.XP.rotationDegrees(180F)); stack.mulPose(Axis.XP.rotationDegrees(180F));
stack.scale(1.004F, 1.004F, 1.004F); stack.scale(1.004F, 1.004F, 1.004F);
model.renderToBuffer(stack, buffer.getBuffer(model.renderType(texture)), brightness, combinedOverlayIn, 1, 1, 1, alpha * maxAlpha); model.renderToBuffer(stack, buffer.getBuffer(model.renderType(texture)), brightness, combinedOverlayIn, 1, 1, 1, alpha * maxAlpha);
stack.popPose(); stack.popPose();

View file

@ -1,13 +1,13 @@
package de.ellpeck.naturesaura.blocks.tiles.render; package de.ellpeck.naturesaura.blocks.tiles.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityNatureAltar; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityNatureAltar;
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.block.model.ItemTransforms;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.world.item.ItemDisplayContext;
public class RenderNatureAltar implements BlockEntityRenderer<BlockEntityNatureAltar> { public class RenderNatureAltar implements BlockEntityRenderer<BlockEntityNatureAltar> {
@ -23,8 +23,8 @@ public class RenderNatureAltar implements BlockEntityRenderer<BlockEntityNatureA
var time = tileEntityIn.bobTimer + partialTicks; var time = tileEntityIn.bobTimer + partialTicks;
var bob = (float) Math.sin(time / 10F) * 0.1F; var bob = (float) Math.sin(time / 10F) * 0.1F;
matrixStackIn.translate(0.5F, 1.2F + bob, 0.5F); matrixStackIn.translate(0.5F, 1.2F + bob, 0.5F);
matrixStackIn.mulPose(Vector3f.YP.rotationDegrees(time * 3 % 360)); matrixStackIn.mulPose(Axis.YP.rotationDegrees(time * 3 % 360));
Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, combinedLightIn, combinedOverlayIn, matrixStackIn, bufferIn, 0); Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemDisplayContext.GROUND, combinedLightIn, combinedOverlayIn, matrixStackIn, bufferIn, tileEntityIn.getLevel(), 0);
matrixStackIn.popPose(); matrixStackIn.popPose();
} }
} }

View file

@ -1,16 +1,16 @@
package de.ellpeck.naturesaura.blocks.tiles.render; package de.ellpeck.naturesaura.blocks.tiles.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityOfferingTable; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityOfferingTable;
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.block.model.ItemTransforms;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemDisplayContext;
import java.util.Random; import java.util.Random;
@ -47,11 +47,11 @@ public class RenderOfferingTable implements BlockEntityRenderer<BlockEntityOffer
0.35F + this.rand.nextFloat() * 0.3F, 0.35F + this.rand.nextFloat() * 0.3F,
0.9F + yOff + i * 0.001F, 0.9F + yOff + i * 0.001F,
0.35F + this.rand.nextFloat() * 0.3F); 0.35F + this.rand.nextFloat() * 0.3F);
matrixStack.mulPose(Vector3f.YP.rotationDegrees(this.rand.nextFloat() * 360)); matrixStack.mulPose(Axis.YP.rotationDegrees(this.rand.nextFloat() * 360));
matrixStack.mulPose(Vector3f.XP.rotationDegrees(90F)); matrixStack.mulPose(Axis.XP.rotationDegrees(90F));
matrixStack.scale(scale, scale, scale); matrixStack.scale(scale, scale, scale);
Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, combinedLightIn, combinedOverlayIn, matrixStack, iRenderTypeBuffer, 0); Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemDisplayContext.GROUND, combinedLightIn, combinedOverlayIn, matrixStack, iRenderTypeBuffer, tileEntityOfferingTable.getLevel(), 0);
matrixStack.popPose(); matrixStack.popPose();
} }
} }

View file

@ -2,7 +2,7 @@ package de.ellpeck.naturesaura.blocks.tiles.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 com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityProjectileGenerator; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityProjectileGenerator;
import net.minecraft.client.model.Model; import net.minecraft.client.model.Model;
@ -34,13 +34,13 @@ public class RenderProjectileGenerator implements BlockEntityRenderer<BlockEntit
public void render(BlockEntityProjectileGenerator te, float partialTicks, PoseStack stack, MultiBufferSource buffer, int combinedLightIn, int combinedOverlayIn) { public void render(BlockEntityProjectileGenerator te, float partialTicks, PoseStack stack, MultiBufferSource buffer, int combinedLightIn, int combinedOverlayIn) {
stack.pushPose(); stack.pushPose();
if (te.nextSide == Direction.NORTH) { if (te.nextSide == Direction.NORTH) {
stack.mulPose(Vector3f.YP.rotationDegrees(270)); stack.mulPose(Axis.YP.rotationDegrees(270));
stack.translate(-0.002F, 0, -1); stack.translate(-0.002F, 0, -1);
} else if (te.nextSide == Direction.EAST) { } else if (te.nextSide == Direction.EAST) {
stack.mulPose(Vector3f.YP.rotationDegrees(180)); stack.mulPose(Axis.YP.rotationDegrees(180));
stack.translate(-1.002F, 0, -1); stack.translate(-1.002F, 0, -1);
} else if (te.nextSide == Direction.SOUTH) { } else if (te.nextSide == Direction.SOUTH) {
stack.mulPose(Vector3f.YP.rotationDegrees(90)); stack.mulPose(Axis.YP.rotationDegrees(90));
stack.translate(-1.002F, 0, 0); stack.translate(-1.002F, 0, 0);
} else { } else {
stack.translate(-0.002F, 0, 0); stack.translate(-0.002F, 0, 0);

View file

@ -1,14 +1,14 @@
package de.ellpeck.naturesaura.blocks.tiles.render; package de.ellpeck.naturesaura.blocks.tiles.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.blocks.tiles.BlockEntityWoodStand; import de.ellpeck.naturesaura.blocks.tiles.BlockEntityWoodStand;
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.block.model.ItemTransforms;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemDisplayContext;
public class RenderWoodStand implements BlockEntityRenderer<BlockEntityWoodStand> { public class RenderWoodStand implements BlockEntityRenderer<BlockEntityWoodStand> {
@ -22,7 +22,7 @@ public class RenderWoodStand implements BlockEntityRenderer<BlockEntityWoodStand
if (!stack.isEmpty()) { if (!stack.isEmpty()) {
matrixStack.pushPose(); matrixStack.pushPose();
var item = stack.getItem(); var item = stack.getItem();
if (item instanceof BlockItem blockItem && blockItem.getBlock().defaultBlockState().getMaterial().isSolid()) { if (item instanceof BlockItem blockItem && blockItem.getBlock().defaultBlockState().isSolid()) {
matrixStack.translate(0.5F, 0.755F, 0.5F); matrixStack.translate(0.5F, 0.755F, 0.5F);
var scale = 0.95F; var scale = 0.95F;
matrixStack.scale(scale, scale, scale); matrixStack.scale(scale, scale, scale);
@ -30,9 +30,9 @@ public class RenderWoodStand implements BlockEntityRenderer<BlockEntityWoodStand
matrixStack.translate(0.5F, 0.825F, 0.4F); matrixStack.translate(0.5F, 0.825F, 0.4F);
var scale = 0.75F; var scale = 0.75F;
matrixStack.scale(scale, scale, scale); matrixStack.scale(scale, scale, scale);
matrixStack.mulPose(Vector3f.XP.rotationDegrees(90)); matrixStack.mulPose(Axis.XP.rotationDegrees(90));
} }
Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, i, i1, matrixStack, iRenderTypeBuffer, 0); Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemDisplayContext.GROUND, i, i1, matrixStack, iRenderTypeBuffer, tileEntityWoodStand.getLevel(), 0);
matrixStack.popPose(); matrixStack.popPose();
} }
} }

View file

@ -38,7 +38,7 @@ public class AngerEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!this.bb.contains(player.getEyePosition())) if (!this.bb.contains(player.getEyePosition()))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;

View file

@ -49,11 +49,11 @@ public class AnimalEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!this.bb.contains(player.getEyePosition())) if (!this.bb.contains(player.getEyePosition()))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), AnimalEffect.NAME)) if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level(), player.blockPosition(), AnimalEffect.NAME))
return ActiveType.INHIBITED; return ActiveType.INHIBITED;
return ActiveType.ACTIVE; return ActiveType.ACTIVE;
} }
@ -132,13 +132,13 @@ public class AnimalEffect implements IDrainSpotEffect {
private void setInLove(Animal animal) { private void setInLove(Animal animal) {
animal.setInLove(null); animal.setInLove(null);
for (var j = 0; j < 7; j++) for (var j = 0; j < 7; j++)
animal.level.addParticle(ParticleTypes.HEART, animal.level().addParticle(ParticleTypes.HEART,
animal.getX() + (double) (animal.level.random.nextFloat() * animal.getBbWidth() * 2.0F) - animal.getBbWidth(), animal.getX() + (double) (animal.level().random.nextFloat() * animal.getBbWidth() * 2.0F) - animal.getBbWidth(),
animal.getY() + 0.5D + (double) (animal.level.random.nextFloat() * animal.getBbHeight()), animal.getY() + 0.5D + (double) (animal.level().random.nextFloat() * animal.getBbHeight()),
animal.getZ() + (double) (animal.level.random.nextFloat() * animal.getBbWidth() * 2.0F) - animal.getBbWidth(), animal.getZ() + (double) (animal.level().random.nextFloat() * animal.getBbWidth() * 2.0F) - animal.getBbWidth(),
animal.level.random.nextGaussian() * 0.02D, animal.level().random.nextGaussian() * 0.02D,
animal.level.random.nextGaussian() * 0.02D, animal.level().random.nextGaussian() * 0.02D,
animal.level.random.nextGaussian() * 0.02D); animal.level().random.nextGaussian() * 0.02D);
} }
@Override @Override

View file

@ -42,7 +42,7 @@ public class BreathlessEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!this.bb.contains(player.getEyePosition())) if (!this.bb.contains(player.getEyePosition()))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;

View file

@ -39,11 +39,11 @@ public class CacheRechargeEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!this.bb.contains(player.getEyePosition())) if (!this.bb.contains(player.getEyePosition()))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), CacheRechargeEffect.NAME)) if (NaturesAuraAPI.instance().isEffectPowderActive(player.level(), player.blockPosition(), CacheRechargeEffect.NAME))
return ActiveType.INHIBITED; return ActiveType.INHIBITED;
return ActiveType.ACTIVE; return ActiveType.ACTIVE;
} }

View file

@ -42,7 +42,7 @@ public class ExplosionEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist)
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
@ -65,9 +65,11 @@ public class ExplosionEffect implements IDrainSpotEffect {
var z = Mth.floor(pos.getZ() + level.random.nextGaussian() * this.dist); var z = Mth.floor(pos.getZ() + level.random.nextGaussian() * this.dist);
var chosenPos = new BlockPos(x, level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z), z); var chosenPos = new BlockPos(x, level.getHeight(Heightmap.Types.WORLD_SURFACE, x, z), z);
if (chosenPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(chosenPos)) { if (chosenPos.distSqr(pos) <= this.dist * this.dist && level.isLoaded(chosenPos)) {
level.explode(null, var explosion = new Explosion(level, null, chosenPos.getX() + 0.5, chosenPos.getY() + 0.5, chosenPos.getZ() + 0.5, this.strength, false, Explosion.BlockInteraction.DESTROY);
chosenPos.getX() + 0.5, chosenPos.getY() + 0.5, chosenPos.getZ() + 0.5, if (!net.minecraftforge.event.ForgeEventFactory.onExplosionStart(level, explosion)) {
this.strength, false, Explosion.BlockInteraction.DESTROY); explosion.explode();
explosion.finalizeExplosion(true);
}
} }
} }

View file

@ -45,7 +45,7 @@ public class GrassDieEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist)
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
@ -62,7 +62,7 @@ public class GrassDieEffect implements IDrainSpotEffect {
if (!this.calcValues(level, pos, spot)) if (!this.calcValues(level, pos, spot))
return; return;
for (var i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) { for (var i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) {
var grassPos = new BlockPos( var grassPos = BlockPos.containing(
pos.getX() + level.random.nextGaussian() * this.dist, pos.getX() + level.random.nextGaussian() * this.dist,
pos.getY() + level.random.nextGaussian() * this.dist, pos.getY() + level.random.nextGaussian() * this.dist,
pos.getZ() + level.random.nextGaussian() * this.dist pos.getZ() + level.random.nextGaussian() * this.dist

View file

@ -44,7 +44,7 @@ public class NetherDecayEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist)
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
@ -61,7 +61,7 @@ public class NetherDecayEffect implements IDrainSpotEffect {
if (!this.calcValues(level, pos, spot)) if (!this.calcValues(level, pos, spot))
return; return;
for (var i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) { for (var i = this.amount / 2 + level.random.nextInt(this.amount / 2); i >= 0; i--) {
var offset = new BlockPos( var offset = BlockPos.containing(
pos.getX() + level.random.nextGaussian() * this.dist, pos.getX() + level.random.nextGaussian() * this.dist,
pos.getY() + level.random.nextGaussian() * this.dist, pos.getY() + level.random.nextGaussian() * this.dist,
pos.getZ() + level.random.nextGaussian() * this.dist); pos.getZ() + level.random.nextGaussian() * this.dist);

View file

@ -43,11 +43,11 @@ public class NetherGrassEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist)
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), NetherGrassEffect.NAME)) if (NaturesAuraAPI.instance().isEffectPowderActive(player.level(), player.blockPosition(), NetherGrassEffect.NAME))
return ActiveType.INHIBITED; return ActiveType.INHIBITED;
return ActiveType.ACTIVE; return ActiveType.ACTIVE;
} }

View file

@ -59,11 +59,11 @@ public class OreSpawnEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist)
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), OreSpawnEffect.NAME)) if (!NaturesAuraAPI.instance().isEffectPowderActive(player.level(), player.blockPosition(), OreSpawnEffect.NAME))
return ActiveType.INHIBITED; return ActiveType.INHIBITED;
return ActiveType.ACTIVE; return ActiveType.ACTIVE;
} }

View file

@ -49,11 +49,11 @@ public class PlantBoostEffect implements IDrainSpotEffect {
@Override @Override
public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) { public ActiveType isActiveHere(Player player, LevelChunk chunk, IAuraChunk auraChunk, BlockPos pos, Integer spot) {
if (!this.calcValues(player.level, pos, spot)) if (!this.calcValues(player.level(), pos, spot))
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist) if (player.distanceToSqr(pos.getX(), pos.getY(), pos.getZ()) > this.dist * this.dist)
return ActiveType.INACTIVE; return ActiveType.INACTIVE;
if (NaturesAuraAPI.instance().isEffectPowderActive(player.level, player.blockPosition(), PlantBoostEffect.NAME)) if (NaturesAuraAPI.instance().isEffectPowderActive(player.level(), player.blockPosition(), PlantBoostEffect.NAME))
return ActiveType.INHIBITED; return ActiveType.INHIBITED;
return ActiveType.ACTIVE; return ActiveType.ACTIVE;
} }

View file

@ -15,29 +15,29 @@ public final class CommandAura {
.then(Commands.literal("add").then(Commands.argument("amount", IntegerArgumentType.integer(1)).executes(context -> { .then(Commands.literal("add").then(Commands.argument("amount", IntegerArgumentType.integer(1)).executes(context -> {
var amount = IntegerArgumentType.getInteger(context, "amount"); var amount = IntegerArgumentType.getInteger(context, "amount");
var source = context.getSource(); var source = context.getSource();
var pos = new BlockPos(source.getPosition()); var pos = BlockPos.containing(source.getPosition());
while (amount > 0) { while (amount > 0) {
var spot = IAuraChunk.getLowestSpot(source.getLevel(), pos, 35, pos); var spot = IAuraChunk.getLowestSpot(source.getLevel(), pos, 35, pos);
amount -= IAuraChunk.getAuraChunk(source.getLevel(), spot).storeAura(spot, amount); amount -= IAuraChunk.getAuraChunk(source.getLevel(), spot).storeAura(spot, amount);
} }
source.sendSuccess(Component.literal("Added aura to area"), true); source.sendSuccess(() -> Component.literal("Added aura to area"), true);
return 0; return 0;
}))) })))
.then(Commands.literal("remove").then(Commands.argument("amount", IntegerArgumentType.integer(1)).executes(context -> { .then(Commands.literal("remove").then(Commands.argument("amount", IntegerArgumentType.integer(1)).executes(context -> {
var amount = IntegerArgumentType.getInteger(context, "amount"); var amount = IntegerArgumentType.getInteger(context, "amount");
var source = context.getSource(); var source = context.getSource();
var pos = new BlockPos(source.getPosition()); var pos = BlockPos.containing(source.getPosition());
while (amount > 0) { while (amount > 0) {
var spot = IAuraChunk.getHighestSpot(source.getLevel(), pos, 35, pos); var spot = IAuraChunk.getHighestSpot(source.getLevel(), pos, 35, pos);
amount -= IAuraChunk.getAuraChunk(source.getLevel(), spot).drainAura(spot, amount); amount -= IAuraChunk.getAuraChunk(source.getLevel(), spot).drainAura(spot, amount);
} }
source.sendSuccess(Component.literal("Removed aura from area"), true); source.sendSuccess(() -> Component.literal("Removed aura from area"), true);
return 0; return 0;
}))) })))
.then(Commands.literal("reset").then(Commands.argument("range", IntegerArgumentType.integer(10, 1000)).executes(context -> { .then(Commands.literal("reset").then(Commands.argument("range", IntegerArgumentType.integer(10, 1000)).executes(context -> {
var range = IntegerArgumentType.getInteger(context, "range"); var range = IntegerArgumentType.getInteger(context, "range");
var source = context.getSource(); var source = context.getSource();
var pos = new BlockPos(source.getPosition()); var pos = BlockPos.containing(source.getPosition());
IAuraChunk.getSpotsInArea(source.getLevel(), pos, range, (spot, amount) -> { IAuraChunk.getSpotsInArea(source.getLevel(), pos, range, (spot, amount) -> {
var chunk = IAuraChunk.getAuraChunk(source.getLevel(), spot); var chunk = IAuraChunk.getAuraChunk(source.getLevel(), spot);
if (amount > 0) if (amount > 0)
@ -45,7 +45,7 @@ public final class CommandAura {
else else
chunk.storeAura(spot, -amount); chunk.storeAura(spot, -amount);
}); });
source.sendSuccess(Component.literal("Reset aura in area"), true); source.sendSuccess(() -> Component.literal("Reset aura in area"), true);
return 0; return 0;
})))); }))));
} }

View file

@ -60,7 +60,7 @@ public class CuriosCompat implements ICompat {
private final LazyOptional<ICurio> curio = LazyOptional.of(() -> new ICurio() { private final LazyOptional<ICurio> curio = LazyOptional.of(() -> new ICurio() {
@Override @Override
public void curioTick(SlotContext slotContext) { public void curioTick(SlotContext slotContext) {
stack.getItem().inventoryTick(stack, slotContext.entity().level, slotContext.entity(), -1, false); stack.getItem().inventoryTick(stack, slotContext.entity().level(), slotContext.entity(), -1, false);
} }
@Override @Override

View file

@ -3,7 +3,7 @@ package de.ellpeck.naturesaura.compat.jei;
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 de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.recipes.AnimalSpawnerRecipe; import de.ellpeck.naturesaura.recipes.AnimalSpawnerRecipe;
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
@ -15,6 +15,7 @@ import mezz.jei.api.recipe.RecipeIngredientRole;
import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.RecipeType;
import mezz.jei.api.recipe.category.IRecipeCategory; import mezz.jei.api.recipe.category.IRecipeCategory;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -47,8 +48,8 @@ public class AnimalSpawnerCategory implements IRecipeCategory<AnimalSpawnerRecip
RenderSystem.applyModelViewMatrix(); RenderSystem.applyModelViewMatrix();
matrixstack.translate(0.0D, 0.0D, 1000.0D); matrixstack.translate(0.0D, 0.0D, 1000.0D);
matrixstack.scale(scale, scale, scale); matrixstack.scale(scale, scale, scale);
var quaternion = Vector3f.ZP.rotationDegrees(180.0F); var quaternion = Axis.ZP.rotationDegrees(180.0F);
var quaternion1 = Vector3f.XP.rotationDegrees(f1 * 20.0F); var quaternion1 = Axis.XP.rotationDegrees(f1 * 20.0F);
quaternion.mul(quaternion1); quaternion.mul(quaternion1);
matrixstack.mulPose(quaternion); matrixstack.mulPose(quaternion);
var f2 = entity.yBodyRot; var f2 = entity.yBodyRot;
@ -63,7 +64,7 @@ public class AnimalSpawnerCategory implements IRecipeCategory<AnimalSpawnerRecip
entity.yHeadRotO = entity.getYRot(); entity.yHeadRotO = entity.getYRot();
Lighting.setupForEntityInInventory(); Lighting.setupForEntityInInventory();
var entityrenderermanager = Minecraft.getInstance().getEntityRenderDispatcher(); var entityrenderermanager = Minecraft.getInstance().getEntityRenderDispatcher();
quaternion1.conj(); quaternion1.conjugate();
entityrenderermanager.overrideCameraOrientation(quaternion1); entityrenderermanager.overrideCameraOrientation(quaternion1);
entityrenderermanager.setRenderShadow(false); entityrenderermanager.setRenderShadow(false);
var buff = Minecraft.getInstance().renderBuffers().bufferSource(); var buff = Minecraft.getInstance().renderBuffers().bufferSource();
@ -108,7 +109,7 @@ public class AnimalSpawnerCategory implements IRecipeCategory<AnimalSpawnerRecip
} }
@Override @Override
public void draw(AnimalSpawnerRecipe recipe, IRecipeSlotsView recipeSlotsView, PoseStack matrixStack, double mouseX, double mouseY) { public void draw(AnimalSpawnerRecipe recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics graphics, double mouseX, double mouseY) {
var minecraft = Minecraft.getInstance(); var minecraft = Minecraft.getInstance();
var entity = this.entityCache.get(recipe.entity); var entity = this.entityCache.get(recipe.entity);
if (entity == null) { if (entity == null) {
@ -116,13 +117,13 @@ public class AnimalSpawnerCategory implements IRecipeCategory<AnimalSpawnerRecip
this.entityCache.put(recipe.entity, entity); this.entityCache.put(recipe.entity, entity);
} }
matrixStack.pushPose(); graphics.pose().pushPose();
var size = Math.max(1F, Math.max(recipe.entity.getWidth(), recipe.entity.getHeight())); var size = Math.max(1F, Math.max(recipe.entity.getWidth(), recipe.entity.getHeight()));
AnimalSpawnerCategory.renderEntity(matrixStack, 36, 56, 100F / size * 0.4F, 40, size * 0.5F, (LivingEntity) entity); AnimalSpawnerCategory.renderEntity(graphics.pose(), 36, 56, 100F / size * 0.4F, 40, size * 0.5F, (LivingEntity) entity);
matrixStack.popPose(); graphics.pose().popPose();
var name = recipe.entity.getDescription().getString(); var name = recipe.entity.getDescription().getString();
minecraft.font.drawShadow(matrixStack, name, 36 - minecraft.font.width(name) / 2F, 55, 0xFFFFFF); graphics.drawString(minecraft.font, name, 36 - minecraft.font.width(name) / 2F, 55, 0xFFFFFF, true);
} }
} }

View file

@ -10,8 +10,6 @@ import de.ellpeck.naturesaura.events.ClientEvents;
import de.ellpeck.naturesaura.renderers.SupporterFancyHandler; import de.ellpeck.naturesaura.renderers.SupporterFancyHandler;
import net.minecraft.ChatFormatting; import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style; import net.minecraft.network.chat.Style;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -29,10 +27,7 @@ import vazkii.patchouli.api.PatchouliAPI;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.Month; import java.time.Month;
import java.util.Arrays; import java.util.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class PatchouliCompat implements ICompat { public class PatchouliCompat implements ICompat {
@ -100,26 +95,24 @@ public class PatchouliCompat implements ICompat {
var x = gui.width / 2 + 272 / 2 - 16; var x = gui.width / 2 + 272 / 2 - 16;
var y = gui.height / 2 - 180 / 2 - 26; var y = gui.height / 2 - 180 / 2 - 26;
RenderSystem.setShader(GameRenderer::getPositionTexShader); event.getGraphics().blit(ClientEvents.BOOK_GUI, x, y, 469, 0, 43, 42, 512, 256);
RenderSystem.setShaderTexture(0, ClientEvents.BOOK_GUI);
Screen.blit(event.getPoseStack(), x, y, 469, 0, 43, 42, 512, 256);
if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 43 && event.getMouseY() < y + 42) if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 43 && event.getMouseY() < y + 42)
gui.renderComponentTooltip(event.getPoseStack(), event.getGraphics().renderTooltip(Minecraft.getInstance().font,
Collections.singletonList(Component.literal("It's the author Ellpeck's birthday!").setStyle(Style.EMPTY.applyFormat(ChatFormatting.GOLD))), Collections.singletonList(Component.literal("It's the author Ellpeck's birthday!").setStyle(Style.EMPTY.applyFormat(ChatFormatting.GOLD))),
event.getMouseX(), event.getMouseY(), gui.getMinecraft().font); Optional.empty(),
event.getMouseX(), event.getMouseY());
} else if (now.getMonth() == Month.JUNE) { } else if (now.getMonth() == Month.JUNE) {
var x = gui.width / 2 + 272 / 2; var x = gui.width / 2 + 272 / 2;
var y = gui.height / 2 + 32; var y = gui.height / 2 + 32;
RenderSystem.setShader(GameRenderer::getPositionTexShader); event.getGraphics().blit(ClientEvents.BOOK_GUI, x, y, 424, 0, 45, 26, 512, 256);
RenderSystem.setShaderTexture(0, ClientEvents.BOOK_GUI);
Screen.blit(event.getPoseStack(), x, y, 424, 0, 45, 26, 512, 256);
if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 45 && event.getMouseY() < y + 26) if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 45 && event.getMouseY() < y + 26)
gui.renderComponentTooltip(event.getPoseStack(), //noinspection UnnecessaryUnicodeEscape
Collections.singletonList(Component.literal("\u00A76Happy \u00A74P\u00A76r\u00A7ei\u00A72d\u00A79e\u00A75!")), event.getGraphics().renderTooltip(gui.getMinecraft().font,
event.getMouseX(), event.getMouseY(), gui.getMinecraft().font); Collections.singletonList(Component.literal("\u00A76Happy \u00A74P\u00A76r\u00A7ei\u00A72d\u00A79e\u00A75!")), Optional.empty(),
event.getMouseX(), event.getMouseY());
} }
var name = gui.getMinecraft().player.getName().getString(); var name = gui.getMinecraft().player.getName().getString();
@ -128,24 +121,21 @@ public class PatchouliCompat implements ICompat {
var x = gui.width / 2 - 272 / 2 + 20; var x = gui.width / 2 - 272 / 2 + 20;
var y = gui.height / 2 + 180 / 2; var y = gui.height / 2 + 180 / 2;
RenderSystem.setShader(GameRenderer::getPositionTexShader); event.getGraphics().blit(ClientEvents.BOOK_GUI, x, y, 496, 44, 16, 18, 512, 256);
RenderSystem.setShaderTexture(0, ClientEvents.BOOK_GUI);
Screen.blit(event.getPoseStack(), x, y, 496, 44, 16, 18, 512, 256);
if (info.tier() == 1) { if (info.tier() == 1) {
Screen.blit(event.getPoseStack(), x, y, 496 - 16, 44, 16, 18, 512, 256); event.getGraphics().blit(ClientEvents.BOOK_GUI, x, y, 496 - 16, 44, 16, 18, 512, 256);
} else { } else {
var r = (info.color() >> 16 & 255) / 255F; var r = (info.color() >> 16 & 255) / 255F;
var g = (info.color() >> 8 & 255) / 255F; var g = (info.color() >> 8 & 255) / 255F;
var b = (info.color() & 255) / 255F; var b = (info.color() & 255) / 255F;
RenderSystem.setShaderColor(r, g, b, 1); RenderSystem.setShaderColor(r, g, b, 1);
Screen.blit(event.getPoseStack(), x, y, 496 - 32, 44, 16, 18, 512, 256); event.getGraphics().blit(ClientEvents.BOOK_GUI, x, y, 496 - 32, 44, 16, 18, 512, 256);
} }
if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 16 && event.getMouseY() < y + 18) if (event.getMouseX() >= x && event.getMouseY() >= y && event.getMouseX() < x + 16 && event.getMouseY() < y + 18)
gui.renderComponentTooltip(event.getPoseStack(), event.getGraphics().renderTooltip(gui.getMinecraft().font,
Collections.singletonList(Component.literal("Thanks for your support, " + name + "!").setStyle(Style.EMPTY.applyFormat(ChatFormatting.YELLOW))), Collections.singletonList(Component.literal("Thanks for your support, " + name + "!").setStyle(Style.EMPTY.applyFormat(ChatFormatting.YELLOW))), Optional.empty(),
event.getMouseX(), event.getMouseY(), gui.getMinecraft().font); event.getMouseX(), event.getMouseY());
} }
} }

View file

@ -2,6 +2,7 @@ package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.AltarRecipe; import de.ellpeck.naturesaura.recipes.AltarRecipe;
import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.level.Level;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable; import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider; import vazkii.patchouli.api.IVariableProvider;
@ -11,18 +12,19 @@ public class ProcessorAltar implements IComponentProcessor {
private AltarRecipe recipe; private AltarRecipe recipe;
@Override @Override
public void setup(IVariableProvider provider) { public void setup(Level level, IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("altar", provider.get("recipe").asString()); this.recipe = PatchouliCompat.getRecipe("altar", provider.get("recipe").asString());
} }
@Override @Override
public IVariable process(String key) { public IVariable process(Level level, String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return null;
return switch (key) { return switch (key) {
case "input" -> PatchouliCompat.ingredientVariable(this.recipe.input); case "input" -> PatchouliCompat.ingredientVariable(this.recipe.input);
case "output" -> IVariable.from(this.recipe.output); case "output" -> IVariable.from(this.recipe.output);
case "catalyst" -> this.recipe.catalyst != Ingredient.EMPTY ? PatchouliCompat.ingredientVariable(this.recipe.catalyst) : null; case "catalyst" ->
this.recipe.catalyst != Ingredient.EMPTY ? PatchouliCompat.ingredientVariable(this.recipe.catalyst) : null;
case "name" -> IVariable.wrap(this.recipe.output.getHoverName().getString()); case "name" -> IVariable.wrap(this.recipe.output.getHoverName().getString());
default -> null; default -> null;
}; };

View file

@ -2,6 +2,7 @@ package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.AnimalSpawnerRecipe; import de.ellpeck.naturesaura.recipes.AnimalSpawnerRecipe;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraftforge.common.ForgeSpawnEggItem; import net.minecraftforge.common.ForgeSpawnEggItem;
import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistries;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
@ -13,12 +14,12 @@ public class ProcessorAnimalSpawner implements IComponentProcessor {
private AnimalSpawnerRecipe recipe; private AnimalSpawnerRecipe recipe;
@Override @Override
public void setup(IVariableProvider provider) { public void setup(Level level, IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("animal_spawner", provider.get("recipe").asString()); this.recipe = PatchouliCompat.getRecipe("animal_spawner", provider.get("recipe").asString());
} }
@Override @Override
public IVariable process(String key) { public IVariable process(Level level, String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return null;
if (key.startsWith("input")) { if (key.startsWith("input")) {

View file

@ -1,6 +1,7 @@
package de.ellpeck.naturesaura.compat.patchouli; package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.OfferingRecipe; import de.ellpeck.naturesaura.recipes.OfferingRecipe;
import net.minecraft.world.level.Level;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable; import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider; import vazkii.patchouli.api.IVariableProvider;
@ -10,12 +11,12 @@ public class ProcessorOffering implements IComponentProcessor {
private OfferingRecipe recipe; private OfferingRecipe recipe;
@Override @Override
public void setup(IVariableProvider provider) { public void setup(Level level, IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("offering", provider.get("recipe").asString()); this.recipe = PatchouliCompat.getRecipe("offering", provider.get("recipe").asString());
} }
@Override @Override
public IVariable process(String key) { public IVariable process(Level level, String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return null;
return switch (key) { return switch (key) {

View file

@ -1,6 +1,7 @@
package de.ellpeck.naturesaura.compat.patchouli; package de.ellpeck.naturesaura.compat.patchouli;
import de.ellpeck.naturesaura.recipes.TreeRitualRecipe; import de.ellpeck.naturesaura.recipes.TreeRitualRecipe;
import net.minecraft.world.level.Level;
import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable; import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider; import vazkii.patchouli.api.IVariableProvider;
@ -10,12 +11,12 @@ public class ProcessorTreeRitual implements IComponentProcessor {
private TreeRitualRecipe recipe; private TreeRitualRecipe recipe;
@Override @Override
public void setup(IVariableProvider provider) { public void setup(Level level, IVariableProvider provider) {
this.recipe = PatchouliCompat.getRecipe("tree_ritual", provider.get("recipe").asString()); this.recipe = PatchouliCompat.getRecipe("tree_ritual", provider.get("recipe").asString());
} }
@Override @Override
public IVariable process(String key) { public IVariable process(Level level, String key) {
if (this.recipe == null) if (this.recipe == null)
return null; return null;
if (key.startsWith("input")) { if (key.startsWith("input")) {

View file

@ -8,6 +8,7 @@ import de.ellpeck.naturesaura.reg.IModItem;
import de.ellpeck.naturesaura.reg.ModRegistry; import de.ellpeck.naturesaura.reg.ModRegistry;
import net.minecraft.data.DataGenerator; import net.minecraft.data.DataGenerator;
import net.minecraft.data.tags.BlockTagsProvider; import net.minecraft.data.tags.BlockTagsProvider;
import net.minecraft.data.tags.IntrinsicHolderTagsProvider;
import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.data.tags.ItemTagsProvider;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags; import net.minecraft.tags.ItemTags;
@ -39,15 +40,15 @@ public class ItemTagProvider extends ItemTagsProvider {
ModRegistry.ALL_ITEMS.stream().sorted(Comparator.comparing(IModItem::getBaseName)).filter(i -> i instanceof Item).map(i -> (Item) i).forEach(i -> { ModRegistry.ALL_ITEMS.stream().sorted(Comparator.comparing(IModItem::getBaseName)).filter(i -> i instanceof Item).map(i -> (Item) i).forEach(i -> {
if (i instanceof ItemPickaxe) { if (i instanceof ItemPickaxe) {
this.tag(ItemTags.CLUSTER_MAX_HARVESTABLES).add(i); this.tag(ItemTags.CLUSTER_MAX_HARVESTABLES).add(i);
this.tag(Tags.Items.TOOLS_PICKAXES).add(i); this.tag(ItemTags.PICKAXES).add(i);
} else if (i instanceof ItemAxe) { } else if (i instanceof ItemAxe) {
this.tag(Tags.Items.TOOLS_AXES).add(i); this.tag(ItemTags.AXES).add(i);
} else if (i instanceof ItemHoe) { } else if (i instanceof ItemHoe) {
this.tag(Tags.Items.TOOLS_HOES).add(i); this.tag(ItemTags.HOES).add(i);
} else if (i instanceof ItemSword) { } else if (i instanceof ItemSword) {
this.tag(Tags.Items.TOOLS_SWORDS).add(i); this.tag(ItemTags.SWORDS).add(i);
} else if (i instanceof ItemShovel) { } else if (i instanceof ItemShovel) {
this.tag(Tags.Items.TOOLS_SHOVELS).add(i); this.tag(ItemTags.SHOVELS).add(i);
} }
}); });
@ -55,7 +56,7 @@ public class ItemTagProvider extends ItemTagsProvider {
} }
@Override @Override
public TagAppender<Item> tag(TagKey<Item> tag) { public IntrinsicHolderTagsProvider.IntrinsicTagAppender<Item> tag(TagKey<Item> tag) {
// super is protected, but CuriosCompat needs this // super is protected, but CuriosCompat needs this
return super.tag(tag); return super.tag(tag);
} }

View file

@ -10,13 +10,13 @@ import de.ellpeck.naturesaura.misc.LevelData;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataAccessor;
import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.EntityDataSerializers;
import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.network.syncher.SynchedEntityData;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Tuple; import net.minecraft.util.Tuple;
import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.EntityDamageSource;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
@ -94,16 +94,16 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable {
if (this.powderListDirty) if (this.powderListDirty)
this.updatePowderListStatus(this.getInhibitedEffect()); this.updatePowderListStatus(this.getInhibitedEffect());
if (this.level.isClientSide) { if (this.level().isClientSide) {
if (this.level.getGameTime() % 5 == 0) { if (this.level().getGameTime() % 5 == 0) {
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(
this.getX() + this.level.random.nextGaussian() * 0.1F, this.getX() + this.level().random.nextGaussian() * 0.1F,
this.getY(), this.getY(),
this.getZ() + this.level.random.nextGaussian() * 0.1F, this.getZ() + this.level().random.nextGaussian() * 0.1F,
this.level.random.nextGaussian() * 0.005F, this.level().random.nextGaussian() * 0.005F,
this.level.random.nextFloat() * 0.03F, this.level().random.nextFloat() * 0.03F,
this.level.random.nextGaussian() * 0.005F, this.level().random.nextGaussian() * 0.005F,
this.getColor(), this.level.random.nextFloat() * 3F + 1F, 120, 0F, true, true); this.getColor(), this.level().random.nextFloat() * 3F + 1F, 120, 0F, true, true);
} }
this.renderTicks++; this.renderTicks++;
} }
@ -124,18 +124,18 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable {
} }
@Override @Override
public Packet<?> getAddEntityPacket() { public Packet<ClientGamePacketListener> getAddEntityPacket() {
return NetworkHooks.getEntitySpawningPacket(this); return NetworkHooks.getEntitySpawningPacket(this);
} }
@Override @Override
public boolean skipAttackInteraction(Entity entity) { public boolean skipAttackInteraction(Entity entity) {
return entity instanceof Player player && (!this.level.mayInteract(player, this.blockPosition()) || this.hurt(DamageSource.playerAttack(player), 0.0F)); return entity instanceof Player player && (!this.level().mayInteract(player, this.blockPosition()) || this.hurt(this.damageSources().playerAttack(player), 0.0F));
} }
@Override @Override
public boolean hurt(DamageSource source, float amount) { public boolean hurt(DamageSource source, float amount) {
if (source instanceof EntityDamageSource && !this.level.isClientSide) { if (source.getEntity() != null && !this.level().isClientSide) {
this.spawnAtLocation(this.getDrop(), 0F); this.spawnAtLocation(this.getDrop(), 0F);
this.kill(); this.kill();
return true; return true;
@ -200,7 +200,7 @@ public class EntityEffectInhibitor extends Entity implements IVisualizable {
} }
private void updatePowderListStatus(ResourceLocation inhibitedEffect) { private void updatePowderListStatus(ResourceLocation inhibitedEffect) {
var powders = ((LevelData) ILevelData.getLevelData(this.level)).effectPowders; var powders = ((LevelData) ILevelData.getLevelData(this.level())).effectPowders;
if (this.lastEffect != null) { if (this.lastEffect != null) {
var oldList = powders.get(this.lastEffect); var oldList = powders.get(this.lastEffect);
oldList.removeIf(t -> this.getEyePosition().equals(t.getA())); oldList.removeIf(t -> this.getEyePosition().equals(t.getA()));

View file

@ -29,7 +29,7 @@ public class EntityLightProjectile extends ThrowableProjectile {
@Override @Override
public void tick() { public void tick() {
super.tick(); super.tick();
if (this.level.isClientSide && this.tickCount > 1) { if (this.level().isClientSide && this.tickCount > 1) {
for (float i = 0; i <= 1; i += 0.2F) { for (float i = 0; i <= 1; i += 0.2F) {
NaturesAuraAPI.instance().spawnMagicParticle( NaturesAuraAPI.instance().spawnMagicParticle(
Mth.lerp(i, this.xOld, this.getX()), Mth.lerp(i, this.xOld, this.getX()),
@ -43,12 +43,12 @@ public class EntityLightProjectile extends ThrowableProjectile {
@Override @Override
protected void onHit(HitResult result) { protected void onHit(HitResult result) {
if (!this.level.isClientSide) { if (!this.level().isClientSide) {
if (result instanceof BlockHitResult res) { if (result instanceof BlockHitResult res) {
var pos = res.getBlockPos().relative(res.getDirection()); var pos = res.getBlockPos().relative(res.getDirection());
var state = this.level.getBlockState(pos); var state = this.level().getBlockState(pos);
if (state.getMaterial().isReplaceable()) if (state.canBeReplaced())
this.level.setBlockAndUpdate(pos, ModBlocks.LIGHT.defaultBlockState()); this.level().setBlockAndUpdate(pos, ModBlocks.LIGHT.defaultBlockState());
} else if (result instanceof EntityHitResult entity) { } else if (result instanceof EntityHitResult entity) {
entity.getEntity().setSecondsOnFire(5); entity.getEntity().setSecondsOnFire(5);
} }

View file

@ -10,6 +10,8 @@ import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.LongTag; import net.minecraft.nbt.LongTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
@ -57,15 +59,15 @@ public class EntityMoverMinecart extends Minecart {
return; return;
var pos = this.blockPosition(); var pos = this.blockPosition();
if (!this.spotOffsets.isEmpty() && this.level.getGameTime() % 10 == 0) if (!this.spotOffsets.isEmpty() && this.level().getGameTime() % 10 == 0)
PacketHandler.sendToAllAround(this.level, pos, 32, new PacketParticles( PacketHandler.sendToAllAround(this.level(), pos, 32, new PacketParticles(
(float) this.getX(), (float) this.getY(), (float) this.getZ(), PacketParticles.Type.MOVER_CART, (float) this.getX(), (float) this.getY(), (float) this.getZ(), PacketParticles.Type.MOVER_CART,
Mth.floor(this.getDeltaMovement().x * 100F), Mth.floor(this.getDeltaMovement().y * 100F), Mth.floor(this.getDeltaMovement().z * 100F))); Mth.floor(this.getDeltaMovement().x * 100F), Mth.floor(this.getDeltaMovement().y * 100F), Mth.floor(this.getDeltaMovement().z * 100F)));
if (pos.distSqr(this.lastPosition) < 8 * 8) if (pos.distSqr(this.lastPosition) < 8 * 8)
return; return;
this.moveAura(this.level, this.lastPosition, this.level, pos); this.moveAura(this.level(), this.lastPosition, this.level(), pos);
this.lastPosition = pos; this.lastPosition = pos;
} }
@ -93,13 +95,13 @@ public class EntityMoverMinecart extends Minecart {
var pos = this.blockPosition(); var pos = this.blockPosition();
if (!this.isActive) { if (!this.isActive) {
this.moveAura(this.level, this.lastPosition, this.level, pos); this.moveAura(this.level(), this.lastPosition, this.level(), pos);
this.spotOffsets.clear(); this.spotOffsets.clear();
this.lastPosition = BlockPos.ZERO; this.lastPosition = BlockPos.ZERO;
return; return;
} }
IAuraChunk.getSpotsInArea(this.level, pos, 25, (spot, amount) -> { IAuraChunk.getSpotsInArea(this.level(), pos, 25, (spot, amount) -> {
if (amount > 0) if (amount > 0)
this.spotOffsets.add(spot.subtract(pos)); this.spotOffsets.add(spot.subtract(pos));
}); });
@ -110,7 +112,7 @@ public class EntityMoverMinecart extends Minecart {
@Override @Override
public void destroy(DamageSource source) { public void destroy(DamageSource source) {
this.kill(); this.kill();
if (this.level.getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) if (this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS))
this.spawnAtLocation(new ItemStack(ModItems.MOVER_CART), 0); this.spawnAtLocation(new ItemStack(ModItems.MOVER_CART), 0);
} }
@ -145,7 +147,7 @@ public class EntityMoverMinecart extends Minecart {
var entity = super.changeDimension(destination, teleporter); var entity = super.changeDimension(destination, teleporter);
if (entity instanceof EntityMoverMinecart) { if (entity instanceof EntityMoverMinecart) {
var pos = entity.blockPosition(); var pos = entity.blockPosition();
this.moveAura(this.level, this.lastPosition, entity.level, pos); this.moveAura(this.level(), this.lastPosition, entity.level(), pos);
((EntityMoverMinecart) entity).lastPosition = pos; ((EntityMoverMinecart) entity).lastPosition = pos;
} }
return entity; return entity;
@ -183,7 +185,7 @@ public class EntityMoverMinecart extends Minecart {
} }
@Override @Override
public Packet<?> getAddEntityPacket() { public Packet<ClientGamePacketListener> getAddEntityPacket() {
return NetworkHooks.getEntitySpawningPacket(this); return NetworkHooks.getEntitySpawningPacket(this);
} }

View file

@ -92,7 +92,7 @@ public class EntityStructureFinder extends EyeOfEnder {
this.yRotO += 360.0F; this.yRotO += 360.0F;
this.setXRot(Mth.lerp(0.2F, this.xRotO, this.getXRot())); this.setXRot(Mth.lerp(0.2F, this.xRotO, this.getXRot()));
this.setYRot(Mth.lerp(0.2F, this.yRotO, this.getYRot())); this.setYRot(Mth.lerp(0.2F, this.yRotO, this.getYRot()));
if (!this.level.isClientSide) { if (!this.level().isClientSide) {
var d3 = this.targetX - d0; var d3 = this.targetX - d0;
var d4 = this.targetZ - d2; var d4 = this.targetZ - d2;
var f1 = (float) Math.sqrt(d3 * d3 + d4 * d4); var f1 = (float) Math.sqrt(d3 * d3 + d4 * d4);
@ -111,21 +111,21 @@ public class EntityStructureFinder extends EyeOfEnder {
if (this.isInWater()) { if (this.isInWater()) {
for (var i = 0; i < 4; ++i) for (var i = 0; i < 4; ++i)
this.level.addParticle(ParticleTypes.BUBBLE, d0 - vec3d.x * 0.25D, d1 - vec3d.y * 0.25D, d2 - vec3d.z * 0.25D, vec3d.x, vec3d.y, vec3d.z); this.level().addParticle(ParticleTypes.BUBBLE, d0 - vec3d.x * 0.25D, d1 - vec3d.y * 0.25D, d2 - vec3d.z * 0.25D, vec3d.x, vec3d.y, vec3d.z);
} else if (this.level.isClientSide) { } else if (this.level().isClientSide) {
NaturesAuraAPI.instance().spawnMagicParticle(d0 - vec3d.x * 0.25D + this.random.nextDouble() * 0.6D - 0.3D, d1 - vec3d.y * 0.25D - 0.5D, d2 - vec3d.z * 0.25D + this.random.nextDouble() * 0.6D - 0.3D, vec3d.x * 0.25F, vec3d.y * 0.25F, vec3d.z * 0.25F, this.entityData.get(EntityStructureFinder.COLOR), 1, 50, 0, false, true); NaturesAuraAPI.instance().spawnMagicParticle(d0 - vec3d.x * 0.25D + this.random.nextDouble() * 0.6D - 0.3D, d1 - vec3d.y * 0.25D - 0.5D, d2 - vec3d.z * 0.25D + this.random.nextDouble() * 0.6D - 0.3D, vec3d.x * 0.25F, vec3d.y * 0.25F, vec3d.z * 0.25F, this.entityData.get(EntityStructureFinder.COLOR), 1, 50, 0, false, true);
} }
if (!this.level.isClientSide) { if (!this.level().isClientSide) {
this.setPos(d0, d1, d2); this.setPos(d0, d1, d2);
++this.despawnTimer; ++this.despawnTimer;
if (this.despawnTimer > 80 && !this.level.isClientSide) { if (this.despawnTimer > 80 && !this.level().isClientSide) {
this.playSound(SoundEvents.ENDER_EYE_DEATH, 1.0F, 1.0F); this.playSound(SoundEvents.ENDER_EYE_DEATH, 1.0F, 1.0F);
this.remove(RemovalReason.DISCARDED); this.remove(RemovalReason.DISCARDED);
if (this.shatterOrDrop) { if (this.shatterOrDrop) {
this.level.addFreshEntity(new ItemEntity(this.level, this.getX(), this.getY(), this.getZ(), this.getItem())); this.level().addFreshEntity(new ItemEntity(this.level(), this.getX(), this.getY(), this.getZ(), this.getItem()));
} else { } else {
PacketHandler.sendToAllAround(this.level, this.blockPosition(), 32, new PacketParticles((float) this.getX(), (float) this.getY(), (float) this.getZ(), PacketParticles.Type.STRUCTURE_FINDER, this.getId())); PacketHandler.sendToAllAround(this.level(), this.blockPosition(), 32, new PacketParticles((float) this.getX(), (float) this.getY(), (float) this.getZ(), PacketParticles.Type.STRUCTURE_FINDER, this.getId()));
} }
} }
} else { } else {

View file

@ -1,7 +1,7 @@
package de.ellpeck.naturesaura.entities.render; package de.ellpeck.naturesaura.entities.render;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.entities.EntityEffectInhibitor; import de.ellpeck.naturesaura.entities.EntityEffectInhibitor;
import de.ellpeck.naturesaura.items.ItemEffectPowder; import de.ellpeck.naturesaura.items.ItemEffectPowder;
import de.ellpeck.naturesaura.items.ModItems; import de.ellpeck.naturesaura.items.ModItems;
@ -13,6 +13,7 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
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.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -40,11 +41,11 @@ public class RenderEffectInhibitor extends EntityRenderer<EntityEffectInhibitor>
var time = entity.renderTicks + entity.getId() + partialTicks; var time = entity.renderTicks + entity.getId() + partialTicks;
var bob = (float) Math.sin(time / 10F) * 0.05F; var bob = (float) Math.sin(time / 10F) * 0.05F;
matrixStackIn.translate(0, 0.15F + bob, 0); matrixStackIn.translate(0, 0.15F + bob, 0);
matrixStackIn.mulPose(Vector3f.YP.rotationDegrees(time * 3 % 360)); matrixStackIn.mulPose(Axis.YP.rotationDegrees(time * 3 % 360));
var effect = entity.getInhibitedEffect(); var effect = entity.getInhibitedEffect();
var stack = this.items.computeIfAbsent(effect, var stack = this.items.computeIfAbsent(effect,
res -> ItemEffectPowder.setEffect(new ItemStack(ModItems.EFFECT_POWDER), effect)); res -> ItemEffectPowder.setEffect(new ItemStack(ModItems.EFFECT_POWDER), effect));
Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, packedLightIn, OverlayTexture.NO_OVERLAY, matrixStackIn, bufferIn, 0); Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemDisplayContext.GROUND, packedLightIn, OverlayTexture.NO_OVERLAY, matrixStackIn, bufferIn, entity.level(), 0);
matrixStackIn.popPose(); matrixStackIn.popPose();
} }
} }

View file

@ -2,7 +2,7 @@ package de.ellpeck.naturesaura.entities.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 com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.entities.EntityMoverMinecart; import de.ellpeck.naturesaura.entities.EntityMoverMinecart;
import net.minecraft.client.model.Model; import net.minecraft.client.model.Model;
@ -35,7 +35,7 @@ public class RenderMoverMinecart extends MinecartRenderer<EntityMoverMinecart> {
matrixStackIn.pushPose(); matrixStackIn.pushPose();
matrixStackIn.translate(0, 22 / 16F, 0); matrixStackIn.translate(0, 22 / 16F, 0);
matrixStackIn.translate(0, 0, 1); matrixStackIn.translate(0, 0, 1);
matrixStackIn.mulPose(Vector3f.XP.rotationDegrees(180)); matrixStackIn.mulPose(Axis.XP.rotationDegrees(180));
this.model.renderToBuffer(matrixStackIn, bufferIn.getBuffer(this.model.renderType(RenderMoverMinecart.RES)), packedLightIn, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1); this.model.renderToBuffer(matrixStackIn, bufferIn.getBuffer(this.model.renderType(RenderMoverMinecart.RES)), packedLightIn, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
matrixStackIn.popPose(); matrixStackIn.popPose();
} }

View file

@ -2,7 +2,10 @@ package de.ellpeck.naturesaura.events;
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.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.Tesselator;
import com.mojang.blaze3d.vertex.VertexFormat;
import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.ModConfig; import de.ellpeck.naturesaura.ModConfig;
import de.ellpeck.naturesaura.NaturesAura; import de.ellpeck.naturesaura.NaturesAura;
@ -18,8 +21,8 @@ import de.ellpeck.naturesaura.items.ModItems;
import de.ellpeck.naturesaura.packet.PacketAuraChunk; import de.ellpeck.naturesaura.packet.PacketAuraChunk;
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.client.gui.screens.ChatScreen; import net.minecraft.client.gui.screens.ChatScreen;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.renderer.BiomeColors; import net.minecraft.client.renderer.BiomeColors;
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;
@ -197,7 +200,7 @@ public class ClientEvents {
// dirty raytrace to see if we're looking at roughly this spot // dirty raytrace to see if we're looking at roughly this spot
if (playerEye.distanceToSqr(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5) <= range * range) { if (playerEye.distanceToSqr(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5) <= range * range) {
for (var d = 0F; d <= range; d += 0.5F) { for (var d = 0F; d <= range; d += 0.5F) {
if (pos.equals(new BlockPos(playerEye.add(playerView.scale(d))))) { if (pos.equals(BlockPos.containing(playerEye.add(playerView.scale(d))))) {
ClientEvents.hoveringAuraSpot = pos; ClientEvents.hoveringAuraSpot = pos;
break; break;
} }
@ -250,7 +253,8 @@ public class ClientEvents {
@SubscribeEvent @SubscribeEvent
public void onOverlayRender(RenderGuiOverlayEvent.Post event) { public void onOverlayRender(RenderGuiOverlayEvent.Post event) {
var mc = Minecraft.getInstance(); var mc = Minecraft.getInstance();
var stack = event.getPoseStack(); var graphics = event.getGuiGraphics();
var stack = graphics.pose();
if (event.getOverlay() == VanillaGuiOverlay.HOTBAR.type()) { if (event.getOverlay() == VanillaGuiOverlay.HOTBAR.type()) {
var res = event.getWindow(); var res = event.getWindow();
if (mc.player != null) { if (mc.player != null) {
@ -266,17 +270,16 @@ public class ClientEvents {
var color = container.getAuraColor(); var color = container.getAuraColor();
RenderSystem.setShaderColor((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 1); RenderSystem.setShaderColor((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 1);
RenderSystem.setShaderTexture(0, ClientEvents.OVERLAYS);
if (width < 80) if (width < 80)
Screen.blit(stack, x + width, y, width, 0, 80 - width, 6, 256, 256); graphics.blit(ClientEvents.OVERLAYS, x + width, y, width, 0, 80 - width, 6, 256, 256);
if (width > 0) if (width > 0)
Screen.blit(stack, x, y, 0, 6, width, 6, 256, 256); graphics.blit(ClientEvents.OVERLAYS, x, y, 0, 6, width, 6, 256, 256);
var scale = 0.75F; var scale = 0.75F;
stack.pushPose(); stack.pushPose();
stack.scale(scale, scale, scale); stack.scale(scale, scale, scale);
var s = ClientEvents.heldCache.getHoverName().getString(); var s = ClientEvents.heldCache.getHoverName().getString();
mc.font.drawShadow(stack, s, conf == 1 ? x / scale : (x + 80) / scale - mc.font.width(s), (y - 7) / scale, color); graphics.drawString(mc.font, s, conf == 1 ? x / scale : (x + 80) / scale - mc.font.width(s), (y - 7) / scale, color, true);
stack.popPose(); stack.popPose();
RenderSystem.setShaderColor(1F, 1F, 1F, 1); RenderSystem.setShaderColor(1F, 1F, 1F, 1);
@ -285,7 +288,6 @@ public class ClientEvents {
if (!ClientEvents.heldEye.isEmpty() || !ClientEvents.heldOcular.isEmpty()) { if (!ClientEvents.heldEye.isEmpty() || !ClientEvents.heldOcular.isEmpty()) {
stack.pushPose(); stack.pushPose();
RenderSystem.setShaderTexture(0, ClientEvents.OVERLAYS);
int conf = ModConfig.instance.auraBarLocation.get(); int conf = ModConfig.instance.auraBarLocation.get();
if (!mc.options.renderDebug && (conf != 2 || !(mc.screen instanceof ChatScreen))) { if (!mc.options.renderDebug && (conf != 2 || !(mc.screen instanceof ChatScreen))) {
@ -306,33 +308,33 @@ public class ClientEvents {
var tHeight = Mth.ceil(Mth.clamp(totalPercentage, 0F, 1F) * 50); var tHeight = Mth.ceil(Mth.clamp(totalPercentage, 0F, 1F) * 50);
var y = !ClientEvents.heldOcular.isEmpty() && totalPercentage > 1F ? startY + 26 : startY; var y = !ClientEvents.heldOcular.isEmpty() && totalPercentage > 1F ? startY + 26 : startY;
if (tHeight < 50) if (tHeight < 50)
Screen.blit(stack, startX, y, 6, 12, 6, 50 - tHeight, 256, 256); graphics.blit(ClientEvents.OVERLAYS, startX, y, 6, 12, 6, 50 - tHeight, 256, 256);
if (tHeight > 0) if (tHeight > 0)
Screen.blit(stack, startX, y + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256); graphics.blit(ClientEvents.OVERLAYS, startX, y + 50 - tHeight, 0, 12 + 50 - tHeight, 6, tHeight, 256, 256);
if (!ClientEvents.heldOcular.isEmpty()) { if (!ClientEvents.heldOcular.isEmpty()) {
var topHeight = Mth.ceil(Mth.clamp((totalPercentage - 1F) * 2F, 0F, 1F) * 25); var topHeight = Mth.ceil(Mth.clamp((totalPercentage - 1F) * 2F, 0F, 1F) * 25);
if (topHeight > 0) { if (topHeight > 0) {
if (topHeight < 25) if (topHeight < 25)
Screen.blit(stack, startX, startY, 18, 12, 6, 25 - topHeight, 256, 256); graphics.blit(ClientEvents.OVERLAYS, startX, startY, 18, 12, 6, 25 - topHeight, 256, 256);
Screen.blit(stack, startX, startY + 25 - topHeight, 12, 12 + 25 - topHeight, 6, topHeight, 256, 256); graphics.blit(ClientEvents.OVERLAYS, startX, startY + 25 - topHeight, 12, 12 + 25 - topHeight, 6, topHeight, 256, 256);
} }
var bottomHeight = Mth.floor(Mth.clamp((totalPercentage + 1F) * 2F - 1F, 0F, 1F) * 25); var bottomHeight = Mth.floor(Mth.clamp((totalPercentage + 1F) * 2F - 1F, 0F, 1F) * 25);
if (bottomHeight < 25) { if (bottomHeight < 25) {
Screen.blit(stack, startX, startY + 51, 18, 12, 6, 25 - bottomHeight, 256, 256); graphics.blit(ClientEvents.OVERLAYS, startX, startY + 51, 18, 12, 6, 25 - bottomHeight, 256, 256);
if (bottomHeight > 0) if (bottomHeight > 0)
Screen.blit(stack, startX, startY + 51 + 25 - bottomHeight, 12, 12 + 25 - bottomHeight, 6, bottomHeight, 256, 256); graphics.blit(ClientEvents.OVERLAYS, startX, startY + 51 + 25 - bottomHeight, 12, 12 + 25 - bottomHeight, 6, bottomHeight, 256, 256);
} }
} }
if (totalPercentage > (ClientEvents.heldOcular.isEmpty() ? 1F : 1.5F)) if (totalPercentage > (ClientEvents.heldOcular.isEmpty() ? 1F : 1.5F))
mc.font.drawShadow(stack, "+", startX + plusOffX, startY - 0.5F, color); graphics.drawString(mc.font, "+", startX + plusOffX, startY - 0.5F, color, true);
if (totalPercentage < (ClientEvents.heldOcular.isEmpty() ? 0F : -0.5F)) if (totalPercentage < (ClientEvents.heldOcular.isEmpty() ? 0F : -0.5F))
mc.font.drawShadow(stack, "-", startX + plusOffX, startY - 0.5F + (ClientEvents.heldOcular.isEmpty() ? 44 : 70), color); graphics.drawString(mc.font, "-", startX + plusOffX, startY - 0.5F + (ClientEvents.heldOcular.isEmpty() ? 44 : 70), color, true);
stack.pushPose(); stack.pushPose();
stack.scale(textScale, textScale, textScale); stack.scale(textScale, textScale, textScale);
mc.font.drawShadow(stack, text, textX / textScale, textY / textScale, color); graphics.drawString(mc.font, text, textX / textScale, textY / textScale, color, true);
stack.popPose(); stack.popPose();
if (!ClientEvents.heldOcular.isEmpty()) { if (!ClientEvents.heldOcular.isEmpty()) {
@ -342,11 +344,10 @@ public class ClientEvents {
var stackY = conf < 2 ? 10 : res.getGuiScaledHeight() - 60; var stackY = conf < 2 ? 10 : res.getGuiScaledHeight() - 60;
for (var effect : ClientEvents.SHOWING_EFFECTS.values()) { for (var effect : ClientEvents.SHOWING_EFFECTS.values()) {
var itemStack = effect.getA(); var itemStack = effect.getA();
Helper.renderItemInGui(itemStack, stackX, stackY, 1F); Helper.renderItemInGui(graphics, itemStack, stackX, stackY, 1F);
if (effect.getB()) { if (effect.getB()) {
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
RenderSystem.setShaderTexture(0, ClientEvents.OVERLAYS); graphics.blit(ClientEvents.OVERLAYS, stackX, stackY, 240, 0, 16, 16, 256, 256);
Screen.blit(stack, stackX, stackY, 240, 0, 16, 16, 256, 256);
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
} }
stackY += 12; stackY += 12;
@ -365,7 +366,7 @@ public class ClientEvents {
if (tile != null && (container = tile.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER, null).orElse(null)) != null) { if (tile != null && (container = tile.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER, null).orElse(null)) != null) {
var state = mc.level.getBlockState(pos); var state = mc.level.getBlockState(pos);
var blockStack = state.getBlock().getCloneItemStack(state, blockHitResult, mc.level, pos, mc.player); var blockStack = state.getBlock().getCloneItemStack(state, blockHitResult, mc.level, pos, mc.player);
this.drawContainerInfo(stack, container.getStoredAura(), container.getMaxAura(), container.getAuraColor(), this.drawContainerInfo(graphics, container.getStoredAura(), container.getMaxAura(), container.getAuraColor(),
mc, res, 35, blockStack.getHoverName().getString(), null); mc, res, 35, blockStack.getHoverName().getString(), null);
if (tile instanceof BlockEntityNatureAltar) { if (tile instanceof BlockEntityNatureAltar) {
@ -373,46 +374,44 @@ public class ClientEvents {
if (!tileStack.isEmpty()) { if (!tileStack.isEmpty()) {
var stackCont = tileStack.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER, null).orElse(null); var stackCont = tileStack.getCapability(NaturesAuraAPI.CAP_AURA_CONTAINER, null).orElse(null);
if (stackCont != null) { if (stackCont != null) {
this.drawContainerInfo(stack, stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(), this.drawContainerInfo(graphics, stackCont.getStoredAura(), stackCont.getMaxAura(), stackCont.getAuraColor(),
mc, res, 55, tileStack.getHoverName().getString(), null); mc, res, 55, tileStack.getHoverName().getString(), null);
} }
} }
} }
} else if (tile instanceof BlockEntityRFConverter) { } else if (tile instanceof BlockEntityRFConverter) {
EnergyStorage storage = ((BlockEntityRFConverter) tile).storage; EnergyStorage storage = ((BlockEntityRFConverter) tile).storage;
this.drawContainerInfo(stack, storage.getEnergyStored(), storage.getMaxEnergyStored(), 0xcc4916, this.drawContainerInfo(graphics, storage.getEnergyStored(), storage.getMaxEnergyStored(), 0xcc4916,
mc, res, 35, I18n.get("block.naturesaura.rf_converter"), mc, res, 35, I18n.get("block.naturesaura.rf_converter"),
storage.getEnergyStored() + " / " + storage.getMaxEnergyStored() + " RF"); storage.getEnergyStored() + " / " + storage.getMaxEnergyStored() + " RF");
} else if (tile instanceof BlockEntityGratedChute chute) { } else if (tile instanceof BlockEntityGratedChute chute) {
var itemStack = chute.getItemHandler().getStackInSlot(0); var itemStack = chute.getItemHandler().getStackInSlot(0);
if (itemStack.isEmpty()) { if (itemStack.isEmpty()) {
mc.font.drawShadow(stack, graphics.drawString(mc.font,
ChatFormatting.GRAY.toString() + ChatFormatting.ITALIC + I18n.get("info.naturesaura.empty"), ChatFormatting.GRAY.toString() + ChatFormatting.ITALIC + I18n.get("info.naturesaura.empty"),
x + 5, y - 11, 0xFFFFFF); x + 5, y - 11, 0xFFFFFF);
} else { } else {
Helper.renderItemInGui(itemStack, x + 2, y - 18, 1F); Helper.renderItemInGui(graphics, itemStack, x + 2, y - 18, 1F);
} }
Helper.renderItemInGui(ClientEvents.ITEM_FRAME, x - 24, y - 24, 1F); Helper.renderItemInGui(graphics, ClientEvents.ITEM_FRAME, x - 24, y - 24, 1F);
RenderSystem.setShaderTexture(0, ClientEvents.OVERLAYS);
var u = chute.isBlacklist ? 240 : 224; var u = chute.isBlacklist ? 240 : 224;
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
Screen.blit(stack, x - 18, y - 18, u, 0, 16, 16, 256, 256); graphics.blit(ClientEvents.OVERLAYS, x - 18, y - 18, u, 0, 16, 16, 256, 256);
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
} else if (tile instanceof BlockEntityItemDistributor distributor) { } else if (tile instanceof BlockEntityItemDistributor distributor) {
Helper.renderItemInGui(ClientEvents.DISPENSER, x - 24, y - 24, 1F); Helper.renderItemInGui(graphics, ClientEvents.DISPENSER, x - 24, y - 24, 1F);
RenderSystem.setShaderTexture(0, ClientEvents.OVERLAYS);
var u = !distributor.isRandomMode ? 240 : 224; var u = !distributor.isRandomMode ? 240 : 224;
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
Screen.blit(stack, x - 18, y - 18, u, 0, 16, 16, 256, 256); graphics.blit(ClientEvents.OVERLAYS, x - 18, y - 18, u, 0, 16, 16, 256, 256);
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
} else if (tile instanceof BlockEntityAuraTimer timer) { } else if (tile instanceof BlockEntityAuraTimer timer) {
var itemStack = timer.getItemHandler().getStackInSlot(0); var itemStack = timer.getItemHandler().getStackInSlot(0);
if (!itemStack.isEmpty()) { if (!itemStack.isEmpty()) {
Helper.renderItemInGui(itemStack, x - 20, y - 20, 1); Helper.renderItemInGui(graphics, itemStack, x - 20, y - 20, 1);
mc.font.drawShadow(stack, ChatFormatting.GRAY + this.createTimeString(timer.getTotalTime()), x + 5, y - 11, 0xFFFFFF); graphics.drawString(mc.font, ChatFormatting.GRAY + this.createTimeString(timer.getTotalTime()), x + 5, y - 11, 0xFFFFFF);
mc.font.drawShadow(stack, ChatFormatting.GRAY + I18n.get("info.naturesaura.remaining", this.createTimeString(timer.getTimeLeft())), x + 5, y + 3, 0xFFFFFF); graphics.drawString(mc.font, ChatFormatting.GRAY + I18n.get("info.naturesaura.remaining", this.createTimeString(timer.getTimeLeft())), x + 5, y + 3, 0xFFFFFF);
} }
} }
} }
@ -426,10 +425,10 @@ public class ClientEvents {
var format = NumberFormat.getInstance(); var format = NumberFormat.getInstance();
var spot = IAuraChunk.getAuraChunk(mc.level, ClientEvents.hoveringAuraSpot).getActualDrainSpot(ClientEvents.hoveringAuraSpot, false); var spot = IAuraChunk.getAuraChunk(mc.level, ClientEvents.hoveringAuraSpot).getActualDrainSpot(ClientEvents.hoveringAuraSpot, false);
var color = spot.intValue() > 0 ? ChatFormatting.GREEN : ChatFormatting.RED; var color = spot.intValue() > 0 ? ChatFormatting.GREEN : ChatFormatting.RED;
mc.font.drawShadow(stack, "Pos: " + spot.pos.toShortString(), res.getGuiScaledWidth() / 2F + 5, res.getGuiScaledHeight() / 2F - 20, 0xFFFFFF); graphics.drawString(mc.font, "Pos: " + spot.pos.toShortString(), res.getGuiScaledWidth() / 2F + 5, res.getGuiScaledHeight() / 2F - 20, 0xFFFFFF, true);
mc.font.drawShadow(stack, "Amount: " + color + format.format(spot.intValue()), res.getGuiScaledWidth() / 2F + 5, res.getGuiScaledHeight() / 2F - 10, 0xFFFFFF); graphics.drawString(mc.font, "Amount: " + color + format.format(spot.intValue()), res.getGuiScaledWidth() / 2F + 5, res.getGuiScaledHeight() / 2F - 10, 0xFFFFFF, true);
if (spot.originalSpreadPos != null) if (spot.originalSpreadPos != null)
mc.font.drawShadow(stack, "Dist from Original: " + (int) Math.sqrt(spot.pos.distSqr(spot.originalSpreadPos)) + " (" + spot.originalSpreadPos.toShortString() + ")", res.getGuiScaledWidth() / 2F + 5, res.getGuiScaledHeight() / 2F, 0xFFFFFF); graphics.drawString(mc.font, "Dist from Original: " + (int) Math.sqrt(spot.pos.distSqr(spot.originalSpreadPos)) + " (" + spot.originalSpreadPos.toShortString() + ")", res.getGuiScaledWidth() / 2F + 5, res.getGuiScaledHeight() / 2F, 0xFFFFFF, true);
} }
} }
} }
@ -443,22 +442,21 @@ public class ClientEvents {
return String.format("%02d:%02d:%02d.%02d", hours, minutes, seconds, ticks); return String.format("%02d:%02d:%02d.%02d", hours, minutes, seconds, ticks);
} }
private void drawContainerInfo(PoseStack stack, int stored, int max, int color, Minecraft mc, Window res, int yOffset, String name, String textBelow) { private void drawContainerInfo(GuiGraphics graphics, int stored, int max, int color, Minecraft mc, Window res, int yOffset, String name, String textBelow) {
RenderSystem.setShaderColor((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 1); RenderSystem.setShaderColor((color >> 16 & 255) / 255F, (color >> 8 & 255) / 255F, (color & 255) / 255F, 1);
var x = res.getGuiScaledWidth() / 2 - 40; var x = res.getGuiScaledWidth() / 2 - 40;
var y = res.getGuiScaledHeight() / 2 + yOffset; var y = res.getGuiScaledHeight() / 2 + yOffset;
var width = Mth.ceil(stored / (float) max * 80); var width = Mth.ceil(stored / (float) max * 80);
RenderSystem.setShaderTexture(0, ClientEvents.OVERLAYS);
if (width < 80) if (width < 80)
Screen.blit(stack, x + width, y, width, 0, 80 - width, 6, 256, 256); graphics.blit(ClientEvents.OVERLAYS, x + width, y, width, 0, 80 - width, 6, 256, 256);
if (width > 0) if (width > 0)
Screen.blit(stack, x, y, 0, 6, width, 6, 256, 256); graphics.blit(ClientEvents.OVERLAYS, x, y, 0, 6, width, 6, 256, 256);
mc.font.drawShadow(stack, name, x + 40 - mc.font.width(name) / 2F, y - 9, color); graphics.drawString(mc.font, name, x + 40 - mc.font.width(name) / 2F, y - 9, color, true);
if (textBelow != null) if (textBelow != null)
mc.font.drawShadow(stack, textBelow, x + 40 - mc.font.width(textBelow) / 2F, y + 7, color); graphics.drawString(mc.font, textBelow, x + 40 - mc.font.width(textBelow) / 2F, y + 7, color, true);
} }
} }

View file

@ -65,13 +65,13 @@ public class CommonEvents {
@SubscribeEvent @SubscribeEvent
public void onItemUse(PlayerInteractEvent.RightClickBlock event) { public void onItemUse(PlayerInteractEvent.RightClickBlock event) {
var player = event.getEntity(); var player = event.getEntity();
if (player.level.isClientSide) if (player.level().isClientSide)
return; return;
var held = event.getItemStack(); var held = event.getItemStack();
if (!held.isEmpty() && ForgeRegistries.ITEMS.getKey(held.getItem()).getPath().contains("chisel")) { if (!held.isEmpty() && ForgeRegistries.ITEMS.getKey(held.getItem()).getPath().contains("chisel")) {
var state = player.level.getBlockState(event.getPos()); var state = player.level().getBlockState(event.getPos());
if (NaturesAuraAPI.BOTANIST_PICKAXE_CONVERSIONS.containsKey(state)) { if (NaturesAuraAPI.BOTANIST_PICKAXE_CONVERSIONS.containsKey(state)) {
var data = (LevelData) ILevelData.getLevelData(player.level); var data = (LevelData) ILevelData.getLevelData(player.level());
data.addMossStone(event.getPos()); data.addMossStone(event.getPos());
} }
} }
@ -104,16 +104,16 @@ public class CommonEvents {
@SubscribeEvent @SubscribeEvent
public void onPlayerTick(TickEvent.PlayerTickEvent event) { public void onPlayerTick(TickEvent.PlayerTickEvent event) {
if (!event.player.level.isClientSide && event.phase == TickEvent.Phase.END) { if (!event.player.level().isClientSide && event.phase == TickEvent.Phase.END) {
if (event.player.level.getGameTime() % 10 == 0) { if (event.player.level().getGameTime() % 10 == 0) {
var pending = CommonEvents.PENDING_AURA_CHUNKS.get(event.player.getUUID()); var pending = CommonEvents.PENDING_AURA_CHUNKS.get(event.player.getUUID());
pending.removeIf(p -> this.handleChunkWatchDeferred(event.player, p)); pending.removeIf(p -> this.handleChunkWatchDeferred(event.player, p));
} }
if (event.player.level.getGameTime() % 200 != 0) if (event.player.level().getGameTime() % 200 != 0)
return; return;
var aura = IAuraChunk.triangulateAuraInArea(event.player.level, event.player.blockPosition(), 25); var aura = IAuraChunk.triangulateAuraInArea(event.player.level(), event.player.blockPosition(), 25);
if (aura <= 0) if (aura <= 0)
Helper.addAdvancement(event.player, new ResourceLocation(NaturesAura.MOD_ID, "negative_imbalance"), "triggered_in_code"); Helper.addAdvancement(event.player, new ResourceLocation(NaturesAura.MOD_ID, "negative_imbalance"), "triggered_in_code");
else if (aura >= 1500000) else if (aura >= 1500000)
@ -127,7 +127,7 @@ public class CommonEvents {
} }
private boolean handleChunkWatchDeferred(Player player, ChunkPos pos) { private boolean handleChunkWatchDeferred(Player player, ChunkPos pos) {
var chunk = Helper.getLoadedChunk(player.level, pos.x, pos.z); var chunk = Helper.getLoadedChunk(player.level(), pos.x, pos.z);
if (!(chunk instanceof LevelChunk levelChunk)) if (!(chunk instanceof LevelChunk levelChunk))
return false; return false;
var auraChunk = (AuraChunk) levelChunk.getCapability(NaturesAuraAPI.CAP_AURA_CHUNK, null).orElse(null); var auraChunk = (AuraChunk) levelChunk.getCapability(NaturesAuraAPI.CAP_AURA_CHUNK, null).orElse(null);

View file

@ -3,6 +3,7 @@ package de.ellpeck.naturesaura.gen;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import de.ellpeck.naturesaura.blocks.ModBlocks; import de.ellpeck.naturesaura.blocks.ModBlocks;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.tags.BlockTags;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
@ -14,9 +15,9 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
import net.minecraft.world.level.levelgen.feature.TreeFeature; import net.minecraft.world.level.levelgen.feature.TreeFeature;
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
import net.minecraft.world.level.material.Material;
import static net.minecraft.core.Direction.Axis; import static net.minecraft.core.Direction.Axis;
import static net.minecraft.world.level.block.state.BlockBehaviour.BlockStateBase;
public class LevelGenAncientTree extends Feature<NoneFeatureConfiguration> { public class LevelGenAncientTree extends Feature<NoneFeatureConfiguration> {
@ -41,8 +42,8 @@ public class LevelGenAncientTree extends Feature<NoneFeatureConfiguration> {
var x = (float) Math.sin(angle) * length; var x = (float) Math.sin(angle) * length;
var z = (float) Math.cos(angle) * length; var z = (float) Math.cos(angle) * length;
var goal = pos.offset(x, 0, z); var goal = pos.offset(Mth.floor(x), 0, Mth.floor(z));
while (level.isStateAtPosition(goal, state -> state.getMaterial().isReplaceable())) { while (level.isStateAtPosition(goal, BlockStateBase::canBeReplaced)) {
goal = goal.below(); goal = goal.below();
if (goal.distSqr(pos) >= 10 * 10) if (goal.distSqr(pos) >= 10 * 10)
break; break;
@ -71,7 +72,7 @@ public class LevelGenAncientTree extends Feature<NoneFeatureConfiguration> {
var x = (float) Math.sin(angle) * length; var x = (float) Math.sin(angle) * length;
var z = (float) Math.cos(angle) * length; var z = (float) Math.cos(angle) * length;
var goal = trunkTop.offset(x, rand.nextInt(3) + 1, z); var goal = trunkTop.offset(Mth.floor(x), rand.nextInt(3) + 1, Mth.floor(z));
this.makeBranch(level, trunkTop, goal, ModBlocks.ANCIENT_LOG.defaultBlockState(), true); this.makeBranch(level, trunkTop, goal, ModBlocks.ANCIENT_LOG.defaultBlockState(), true);
this.makeLeaves(level, goal, ModBlocks.ANCIENT_LEAVES.defaultBlockState(), rand.nextInt(2) + 2, rand); this.makeLeaves(level, goal, ModBlocks.ANCIENT_LEAVES.defaultBlockState(), rand.nextInt(2) + 2, rand);
} }
@ -87,7 +88,7 @@ public class LevelGenAncientTree extends Feature<NoneFeatureConfiguration> {
var stepZ = (float) pos.getZ() / (float) length; var stepZ = (float) pos.getZ() / (float) length;
for (var i = 0; i <= length; i++) { for (var i = 0; i <= length; i++) {
var goal = first.offset(0.5F + i * stepX, 0.5F + i * stepY, 0.5F + i * stepZ); var goal = first.offset(Mth.floor(0.5F + i * stepX), Mth.floor(0.5F + i * stepY), Mth.floor(0.5F + i * stepZ));
if (!level.isStateAtPosition(goal, s -> !TreeFeature.validTreePos(level, goal))) { if (!level.isStateAtPosition(goal, s -> !TreeFeature.validTreePos(level, goal))) {
if (hasAxis) { if (hasAxis) {
var axis = this.getLogAxis(first, goal); var axis = this.getLogAxis(first, goal);
@ -105,8 +106,8 @@ public class LevelGenAncientTree extends Feature<NoneFeatureConfiguration> {
for (var z = -radius; z <= radius; z++) { for (var z = -radius; z <= radius; z++) {
var goal = pos.offset(x, y, z); var goal = pos.offset(x, y, z);
if (pos.distSqr(goal) <= radius * radius + rand.nextInt(3) - 1) { if (pos.distSqr(goal) <= radius * radius + rand.nextInt(3) - 1) {
if (!level.isStateAtPosition(goal, s -> s.getMaterial() == Material.LEAVES)) { if (!level.isStateAtPosition(goal, s -> s.is(BlockTags.LEAVES))) {
if (level.isStateAtPosition(goal, st -> st.getMaterial() != Material.WOOD && st.getBlock() != Blocks.DIRT && st.getBlock() != Blocks.GRASS)) if (level.isStateAtPosition(goal, st -> !st.is(BlockTags.LOGS) && st.getBlock() != Blocks.DIRT && st.getBlock() != Blocks.GRASS))
this.setBlock(level, goal, state); this.setBlock(level, goal, state);
} }
} }

View file

@ -1,9 +1,7 @@
package de.ellpeck.naturesaura.gui; package de.ellpeck.naturesaura.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.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Inventory;
@ -21,25 +19,23 @@ public class GuiEnderCrate extends AbstractContainerScreen<ContainerEnderCrate>
} }
@Override @Override
public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { public void render(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) {
this.renderBackground(matrixStack); this.renderBackground(graphics);
super.render(matrixStack, mouseX, mouseY, partialTicks); super.render(graphics, mouseX, mouseY, partialTicks);
this.renderTooltip(matrixStack, mouseX, mouseY); this.renderTooltip(graphics, mouseX, mouseY);
} }
@Override @Override
protected void renderLabels(PoseStack matrixStack, int mouseX, int mouseY) { protected void renderLabels(GuiGraphics graphics, int mouseX, int mouseY) {
this.font.draw(matrixStack, this.title.getString(), 8, 6, 4210752); graphics.drawString(this.font, this.title.getString(), 8, 6, 4210752);
this.font.draw(matrixStack, this.playerInventoryTitle, 8, this.imageHeight - 96 + 2, 4210752); graphics.drawString(this.font, this.playerInventoryTitle, 8, this.imageHeight - 96 + 2, 4210752);
} }
@Override @Override
protected void renderBg(PoseStack matrixStack, float partialTicks, int mouseX, int mouseY) { protected void renderBg(GuiGraphics graphics, float partialTicks, int mouseX, int mouseY) {
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, GuiEnderCrate.CHEST_GUI_TEXTURE);
var i = (this.width - this.imageWidth) / 2; var i = (this.width - this.imageWidth) / 2;
var j = (this.height - this.imageHeight) / 2; var j = (this.height - this.imageHeight) / 2;
this.blit(matrixStack, i, j, 0, 0, this.imageWidth, 3 * 18 + 17); graphics.blit(GuiEnderCrate.CHEST_GUI_TEXTURE, i, j, 0, 0, this.imageWidth, 3 * 18 + 17);
this.blit(matrixStack, i, j + 3 * 18 + 17, 0, 126, this.imageWidth, 96); graphics.blit(GuiEnderCrate.CHEST_GUI_TEXTURE, i, j + 3 * 18 + 17, 0, 126, this.imageWidth, 96);
} }
} }

View file

@ -52,7 +52,8 @@ public class ItemAuraBottle extends ItemImpl implements IColorProvidingItem, ICu
}); });
} }
@Override // TODO aura bottle creative
/* @Override
public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> items) { public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> items) {
if (this.allowedIn(tab)) { if (this.allowedIn(tab)) {
for (var type : NaturesAuraAPI.AURA_TYPES.values()) { for (var type : NaturesAuraAPI.AURA_TYPES.values()) {
@ -61,7 +62,7 @@ public class ItemAuraBottle extends ItemImpl implements IColorProvidingItem, ICu
items.add(stack); items.add(stack);
} }
} }
} }*/
@Override @Override
public Component getName(ItemStack stack) { public Component getName(ItemStack stack) {
@ -116,19 +117,19 @@ public class ItemAuraBottle extends ItemImpl implements IColorProvidingItem, ICu
if (held.isEmpty() || held.getItem() != ModItems.BOTTLE_TWO_THE_REBOTTLING) if (held.isEmpty() || held.getItem() != ModItems.BOTTLE_TWO_THE_REBOTTLING)
return; return;
var player = event.getEntity(); var player = event.getEntity();
HitResult ray = Item.getPlayerPOVHitResult(player.level, player, ClipContext.Fluid.NONE); HitResult ray = Item.getPlayerPOVHitResult(player.level(), player, ClipContext.Fluid.NONE);
if (ray.getType() == HitResult.Type.BLOCK) if (ray.getType() == HitResult.Type.BLOCK)
return; return;
var bottle = ItemAuraBottle.create(player.level, player.blockPosition()); var bottle = ItemAuraBottle.create(player.level(), player.blockPosition());
if (bottle.isEmpty()) if (bottle.isEmpty())
return; return;
if (!player.level.isClientSide) { if (!player.level().isClientSide) {
held.shrink(1); held.shrink(1);
if (!player.addItem(bottle)) if (!player.addItem(bottle))
player.level.addFreshEntity(new ItemEntity(player.level, player.getX(), player.getY(), player.getZ(), bottle)); player.level().addFreshEntity(new ItemEntity(player.level(), player.getX(), player.getY(), player.getZ(), bottle));
player.level.playSound(null, player.getX(), player.getY(), player.getZ(), player.level().playSound(null, player.getX(), player.getY(), player.getZ(),
SoundEvents.BOTTLE_FILL_DRAGONBREATH, SoundSource.PLAYERS, 1F, 1F); SoundEvents.BOTTLE_FILL_DRAGONBREATH, SoundSource.PLAYERS, 1F, 1F);
} }

View file

@ -1,7 +1,7 @@
package de.ellpeck.naturesaura.items; package de.ellpeck.naturesaura.items;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.Helper; import de.ellpeck.naturesaura.Helper;
import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.container.ItemAuraContainer; import de.ellpeck.naturesaura.api.aura.container.ItemAuraContainer;
@ -9,15 +9,13 @@ import de.ellpeck.naturesaura.api.render.ITrinketItem;
import de.ellpeck.naturesaura.enchant.ModEnchantments; import de.ellpeck.naturesaura.enchant.ModEnchantments;
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.block.model.ItemTransforms;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
@ -63,7 +61,8 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem {
} }
} }
@Override // TODO creative tabs for items with variations
/* @Override
public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> items) { public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> items) {
if (this.allowedIn(tab)) { if (this.allowedIn(tab)) {
items.add(new ItemStack(this)); items.add(new ItemStack(this));
@ -74,7 +73,7 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem {
items.add(stack); items.add(stack);
}); });
} }
} }*/
@Override @Override
public boolean isBarVisible(ItemStack stack) { public boolean isBarVisible(ItemStack stack) {
@ -122,8 +121,8 @@ public class ItemAuraCache extends ItemImpl implements ITrinketItem {
var legs = !player.getInventory().armor.get(EquipmentSlot.LEGS.getIndex()).isEmpty(); var legs = !player.getInventory().armor.get(EquipmentSlot.LEGS.getIndex()).isEmpty();
matrices.translate(-0.15F, 0.65F, chest ? -0.195F : legs ? -0.165F : -0.1475F); matrices.translate(-0.15F, 0.65F, chest ? -0.195F : legs ? -0.165F : -0.1475F);
matrices.scale(0.5F, 0.5F, 0.5F); matrices.scale(0.5F, 0.5F, 0.5F);
matrices.mulPose(Vector3f.XP.rotationDegrees(180F)); matrices.mulPose(Axis.XP.rotationDegrees(180F));
Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer, 0); Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemDisplayContext.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer, player.level(), 0);
} }
} }
} }

View file

@ -20,18 +20,18 @@ public class ItemBirthSpirit extends ItemGlowing {
@SubscribeEvent @SubscribeEvent
public void onBabyBorn(BabyEntitySpawnEvent event) { public void onBabyBorn(BabyEntitySpawnEvent event) {
LivingEntity parent = event.getParentA(); LivingEntity parent = event.getParentA();
if (!parent.level.isClientSide && event.getCausedByPlayer() != null) { if (!parent.level().isClientSide && event.getCausedByPlayer() != null) {
var pos = parent.blockPosition(); var pos = parent.blockPosition();
var aura = IAuraChunk.getAuraInArea(parent.level, pos, 30); var aura = IAuraChunk.getAuraInArea(parent.level(), pos, 30);
if (aura < 1200000) if (aura < 1200000)
return; return;
var amount = parent.level.random.nextInt(3) + 1; var amount = parent.level().random.nextInt(3) + 1;
var item = new ItemEntity(parent.level, parent.getX(), parent.getY(), parent.getZ(), new ItemStack(ModItems.BIRTH_SPIRIT, amount)); var item = new ItemEntity(parent.level(), parent.getX(), parent.getY(), parent.getZ(), new ItemStack(ModItems.BIRTH_SPIRIT, amount));
parent.level.addFreshEntity(item); parent.level().addFreshEntity(item);
var spot = IAuraChunk.getHighestSpot(parent.level, pos, 30, pos); var spot = IAuraChunk.getHighestSpot(parent.level(), pos, 30, pos);
IAuraChunk.getAuraChunk(parent.level, spot).drainAura(spot, 800 * amount); IAuraChunk.getAuraChunk(parent.level(), spot).drainAura(spot, 800 * amount);
} }
} }
} }

View file

@ -42,7 +42,7 @@ public class ItemCaveFinder extends ItemImpl {
var offUp = offset.above(); var offUp = offset.above();
var stateUp = levelIn.getBlockState(offUp); var stateUp = levelIn.getBlockState(offUp);
if (stateUp.isCollisionShapeFullBlock(levelIn, offUp) || stateUp.getMaterial().isLiquid()) if (stateUp.isCollisionShapeFullBlock(levelIn, offUp) || stateUp.liquid())
continue; continue;
var sky = levelIn.getBrightness(LightLayer.SKY, offUp); var sky = levelIn.getBrightness(LightLayer.SKY, offUp);

View file

@ -23,7 +23,7 @@ public class ItemDeathRing extends ItemImpl {
@SubscribeEvent @SubscribeEvent
public void onDeath(LivingDeathEvent event) { public void onDeath(LivingDeathEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
if (!entity.level.isClientSide && entity instanceof Player) { if (!entity.level().isClientSide && entity instanceof Player) {
var equipped = Helper.getEquippedItem(s -> s.getItem() == ModItems.DEATH_RING, (Player) entity); var equipped = Helper.getEquippedItem(s -> s.getItem() == ModItems.DEATH_RING, (Player) entity);
if (!equipped.isEmpty()) { if (!equipped.isEmpty()) {
entity.setHealth(entity.getMaxHealth() / 2); entity.setHealth(entity.getMaxHealth() / 2);
@ -32,7 +32,7 @@ public class ItemDeathRing extends ItemImpl {
var data = new CompoundTag(); var data = new CompoundTag();
data.putInt("id", entity.getId()); data.putInt("id", entity.getId());
PacketHandler.sendToAllAround(entity.level, entity.blockPosition(), 32, new PacketClient(1, data)); PacketHandler.sendToAllAround(entity.level(), entity.blockPosition(), 32, new PacketClient(1, data));
equipped.shrink(1); equipped.shrink(1);
event.setCanceled(true); event.setCanceled(true);

View file

@ -46,7 +46,8 @@ public class ItemEffectPowder extends ItemImpl implements IColorProvidingItem {
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
@Override // TODO effect powder creative tab
/* @Override
public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> items) { public void fillItemCategory(CreativeModeTab tab, NonNullList<ItemStack> items) {
if (this.allowedIn(tab)) { if (this.allowedIn(tab)) {
for (var effect : NaturesAuraAPI.EFFECT_POWDERS.keySet()) { for (var effect : NaturesAuraAPI.EFFECT_POWDERS.keySet()) {
@ -55,7 +56,7 @@ public class ItemEffectPowder extends ItemImpl implements IColorProvidingItem {
items.add(stack); items.add(stack);
} }
} }
} }*/
@Override @Override
public Component getName(ItemStack stack) { public Component getName(ItemStack stack) {

View file

@ -51,7 +51,7 @@ public class ItemEnderAccess extends ItemImpl {
@Nullable @Nullable
@Override @Override
public AbstractContainerMenu createMenu(int windowId, Inventory inv, Player player) { public AbstractContainerMenu createMenu(int windowId, Inventory inv, Player player) {
IItemHandler handler = ILevelData.getOverworldData(inv.player.level).getEnderStorage(name); IItemHandler handler = ILevelData.getOverworldData(inv.player.level()).getEnderStorage(name);
return new ContainerEnderCrate(ModContainers.ENDER_ACCESS, windowId, player, handler); return new ContainerEnderCrate(ModContainers.ENDER_ACCESS, windowId, player, handler);
} }
}, buffer -> buffer.writeUtf(name)); }, buffer -> buffer.writeUtf(name));

View file

@ -1,14 +1,14 @@
package de.ellpeck.naturesaura.items; package de.ellpeck.naturesaura.items;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Vector3f; import com.mojang.math.Axis;
import de.ellpeck.naturesaura.api.render.ITrinketItem; import de.ellpeck.naturesaura.api.render.ITrinketItem;
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.block.model.ItemTransforms;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.api.distmarker.OnlyIn;
@ -26,8 +26,8 @@ public class ItemEye extends ItemImpl implements ITrinketItem {
var armor = !player.getInventory().armor.get(EquipmentSlot.CHEST.getIndex()).isEmpty(); var armor = !player.getInventory().armor.get(EquipmentSlot.CHEST.getIndex()).isEmpty();
matrices.translate(0.1F, 0.225F, armor ? -0.195F : -0.1475F); matrices.translate(0.1F, 0.225F, armor ? -0.195F : -0.1475F);
matrices.scale(0.3F, 0.3F, 0.3F); matrices.scale(0.3F, 0.3F, 0.3F);
matrices.mulPose(Vector3f.XP.rotationDegrees(180)); matrices.mulPose(Axis.XP.rotationDegrees(180));
Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemTransforms.TransformType.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer, 0); Minecraft.getInstance().getItemRenderer().renderStatic(stack, ItemDisplayContext.GROUND, packedLight, OverlayTexture.NO_OVERLAY, matrices, buffer, player.level(), 0);
} }
} }
} }

View file

@ -14,7 +14,7 @@ public class ItemImpl extends Item implements IModItem {
} }
public ItemImpl(String baseName, Item.Properties properties) { public ItemImpl(String baseName, Item.Properties properties) {
super(properties.tab(NaturesAura.CREATIVE_TAB)); super(properties);
this.baseName = baseName; this.baseName = baseName;
ModRegistry.ALL_ITEMS.add(this); ModRegistry.ALL_ITEMS.add(this);
} }

View file

@ -33,19 +33,19 @@ public class ItemPetReviver extends ItemImpl {
@SubscribeEvent @SubscribeEvent
public void onEntityTick(LivingEvent.LivingTickEvent event) { public void onEntityTick(LivingEvent.LivingTickEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
if (entity.level.isClientSide || entity.level.getGameTime() % 20 != 0 || !(entity instanceof TamableAnimal tameable)) if (entity.level().isClientSide || entity.level().getGameTime() % 20 != 0 || !(entity instanceof TamableAnimal tameable))
return; return;
if (!tameable.isTame() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver")) if (!tameable.isTame() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver"))
return; return;
var owner = tameable.getOwner(); var owner = tameable.getOwner();
if (owner == null || owner.distanceToSqr(tameable) > 5 * 5) if (owner == null || owner.distanceToSqr(tameable) > 5 * 5)
return; return;
if (entity.level.random.nextFloat() >= 0.65F) { if (entity.level().random.nextFloat() >= 0.65F) {
((ServerLevel) entity.level).sendParticles(ParticleTypes.HEART, ((ServerLevel) entity.level()).sendParticles(ParticleTypes.HEART,
entity.getX() + entity.level.random.nextGaussian() * 0.25F, entity.getX() + entity.level().random.nextGaussian() * 0.25F,
entity.getEyeY() + entity.level.random.nextGaussian() * 0.25F, entity.getEyeY() + entity.level().random.nextGaussian() * 0.25F,
entity.getZ() + entity.level.random.nextGaussian() * 0.25F, entity.getZ() + entity.level().random.nextGaussian() * 0.25F,
entity.level.random.nextInt(2) + 1, 0, 0, 0, 0); entity.level().random.nextInt(2) + 1, 0, 0, 0, 0);
} }
} }
@ -61,7 +61,7 @@ public class ItemPetReviver extends ItemImpl {
if (stack.getItem() != ModItems.PET_REVIVER) if (stack.getItem() != ModItems.PET_REVIVER)
return; return;
target.getPersistentData().putBoolean(NaturesAura.MOD_ID + ":pet_reviver", true); target.getPersistentData().putBoolean(NaturesAura.MOD_ID + ":pet_reviver", true);
if (!target.level.isClientSide) if (!target.level().isClientSide)
stack.shrink(1); stack.shrink(1);
event.setCancellationResult(InteractionResult.SUCCESS); event.setCancellationResult(InteractionResult.SUCCESS);
event.setCanceled(true); event.setCanceled(true);
@ -71,13 +71,13 @@ public class ItemPetReviver extends ItemImpl {
@SubscribeEvent(priority = EventPriority.LOWEST) @SubscribeEvent(priority = EventPriority.LOWEST)
public void onLivingDeath(LivingDeathEvent event) { public void onLivingDeath(LivingDeathEvent event) {
var entity = event.getEntity(); var entity = event.getEntity();
if (entity.level.isClientSide || !(entity instanceof TamableAnimal tameable)) if (entity.level().isClientSide || !(entity instanceof TamableAnimal tameable))
return; return;
if (!tameable.isTame() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver")) if (!tameable.isTame() || !tameable.getPersistentData().getBoolean(NaturesAura.MOD_ID + ":pet_reviver"))
return; return;
// get the overworld, and the overworld's spawn point, by default // get the overworld, and the overworld's spawn point, by default
var spawnLevel = tameable.level.getServer().overworld(); var spawnLevel = tameable.level().getServer().overworld();
var spawn = Vec3.atBottomCenterOf(spawnLevel.getSharedSpawnPos()); var spawn = Vec3.atBottomCenterOf(spawnLevel.getSharedSpawnPos());
// check if the owner is online, and respawn at the bed if they are // check if the owner is online, and respawn at the bed if they are
@ -87,18 +87,18 @@ public class ItemPetReviver extends ItemImpl {
if (pos != null) { if (pos != null) {
var f = player.getRespawnAngle(); var f = player.getRespawnAngle();
var b = player.isRespawnForced(); var b = player.isRespawnForced();
var bed = Player.findRespawnPositionAndUseSpawnBlock((ServerLevel) player.level, pos, f, b, false); var bed = Player.findRespawnPositionAndUseSpawnBlock((ServerLevel) player.level(), pos, f, b, false);
if (bed.isPresent()) { if (bed.isPresent()) {
spawnLevel = (ServerLevel) player.level; spawnLevel = (ServerLevel) player.level();
spawn = bed.get(); spawn = bed.get();
} }
} }
} }
PacketHandler.sendToAllAround(tameable.level, tameable.blockPosition(), 32, new PacketParticles((float) tameable.getX(), (float) tameable.getEyeY(), (float) tameable.getZ(), PacketParticles.Type.PET_REVIVER, 0xc2461d)); PacketHandler.sendToAllAround(tameable.level(), tameable.blockPosition(), 32, new PacketParticles((float) tameable.getX(), (float) tameable.getEyeY(), (float) tameable.getZ(), PacketParticles.Type.PET_REVIVER, 0xc2461d));
var spawnedPet = tameable; var spawnedPet = tameable;
if (tameable.level != spawnLevel) { if (tameable.level() != spawnLevel) {
tameable.remove(Entity.RemovalReason.DISCARDED); tameable.remove(Entity.RemovalReason.DISCARDED);
spawnedPet = (TamableAnimal) tameable.getType().create(spawnLevel); spawnedPet = (TamableAnimal) tameable.getType().create(spawnLevel);
} }
@ -114,7 +114,7 @@ public class ItemPetReviver extends ItemImpl {
spawnedPet.setInSittingPose(true); spawnedPet.setInSittingPose(true);
spawnedPet.setJumping(false); spawnedPet.setJumping(false);
spawnedPet.setTarget(null); spawnedPet.setTarget(null);
if (tameable.level != spawnLevel) { if (tameable.level() != spawnLevel) {
spawnLevel.addFreshEntity(spawnedPet); spawnLevel.addFreshEntity(spawnedPet);
tameable.remove(Entity.RemovalReason.DISCARDED); tameable.remove(Entity.RemovalReason.DISCARDED);
} }
@ -123,7 +123,7 @@ public class ItemPetReviver extends ItemImpl {
var auraPos = IAuraChunk.getHighestSpot(spawnLevel, spawnedPet.blockPosition(), 35, spawnedPet.blockPosition()); var auraPos = IAuraChunk.getHighestSpot(spawnLevel, spawnedPet.blockPosition(), 35, spawnedPet.blockPosition());
IAuraChunk.getAuraChunk(spawnLevel, auraPos).drainAura(auraPos, 200000); IAuraChunk.getAuraChunk(spawnLevel, auraPos).drainAura(auraPos, 200000);
PacketHandler.sendToAllAround(spawnedPet.level, spawnedPet.blockPosition(), 32, new PacketParticles((float) spawnedPet.getX(), (float) spawnedPet.getEyeY(), (float) spawnedPet.getZ(), PacketParticles.Type.PET_REVIVER, 0x4dba2f)); PacketHandler.sendToAllAround(spawnedPet.level(), spawnedPet.blockPosition(), 32, new PacketParticles((float) spawnedPet.getX(), (float) spawnedPet.getEyeY(), (float) spawnedPet.getZ(), PacketParticles.Type.PET_REVIVER, 0x4dba2f));
if (owner instanceof Player) if (owner instanceof Player)
owner.sendSystemMessage(Component.translatable("info." + NaturesAura.MOD_ID + ".pet_reviver", spawnedPet.getDisplayName()).withStyle(ChatFormatting.ITALIC, ChatFormatting.GRAY)); owner.sendSystemMessage(Component.translatable("info." + NaturesAura.MOD_ID + ".pet_reviver", spawnedPet.getDisplayName()).withStyle(ChatFormatting.ITALIC, ChatFormatting.GRAY));

View file

@ -83,8 +83,8 @@ public class ItemRangeVisualizer extends ItemImpl {
return; return;
var entity = event.getTarget(); var entity = event.getTarget();
if (entity instanceof IVisualizable) { if (entity instanceof IVisualizable) {
if (entity.level.isClientSide) { if (entity.level().isClientSide) {
var dim = entity.level.dimension().location(); var dim = entity.level().dimension().location();
ItemRangeVisualizer.visualize(event.getEntity(), ItemRangeVisualizer.VISUALIZED_ENTITIES, dim, entity); ItemRangeVisualizer.visualize(event.getEntity(), ItemRangeVisualizer.VISUALIZED_ENTITIES, dim, entity);
} }
event.getEntity().swing(event.getHand()); event.getEntity().swing(event.getHand());

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