ENV Detector and Environmental Essence textures, models and functionality

This commit is contained in:
Robin 2024-06-09 13:10:20 +02:00
parent 332daec520
commit 58befd34b3
30 changed files with 233 additions and 23 deletions

View File

@ -1,10 +1,12 @@
import java.net.URI
plugins {
`java-library`
eclipse
idea
`maven-publish`
id("io.freefair.lombok") version "8.6"
id ("net.neoforged.gradle.userdev") version ("7.0.139")
id ("net.neoforged.gradle.userdev") version ("7.0.142")
}
val minecraftVersion: String by project
@ -21,11 +23,25 @@ val modGroupId: String by project
val modAuthors: String by project
val modDescription: String by project
val junitVersion: String by project
val assertjVersion: String by project
val topVersion: String by project
val reiVersion: String by project
version = modVersion
group = modGroupId
repositories {
mavenLocal()
maven {
url = URI.create("https://maven.k-4u.nl")
}
maven {
url = URI.create("https://maven.blamejared.com")
}
maven { url = URI.create("https://maven.shedaniel.me/") }
maven { url = URI.create("https://maven.architectury.dev/") }
}
base {
@ -35,6 +51,7 @@ base {
java.toolchain.languageVersion = JavaLanguageVersion.of(21)
sourceSets {
// Include resources generated by data generators.
main.configure {
@ -129,12 +146,6 @@ runs {
}
afterEvaluate {
runs["junit"].modSources = runs["junit"].modSources.get().stream().filter { it != sourceSets.main.get() }.toList()
}
dependencies {
// Specify the version of Minecraft to use.
// Depending on the plugin applied there are several options. We will assume you applied the userdev plugin as shown above.
@ -144,26 +155,26 @@ dependencies {
// For all intends and purposes: You can treat this dependency as if it is a normal library you would use.
implementation ("net.neoforged:neoforge:${neoVersion}")
// Wait until 1.20.6 has a stable neoforge version, so that all mods should work when updated
// implementation("mcjty.theoneprobe:theoneprobe:${topVersion}")
//
// runtimeOnly("me.shedaniel:RoughlyEnoughItems-neoforge:${reiVersion}")
// compileOnly("me.shedaniel:RoughlyEnoughItems-api-neoforge:${reiVersion}")
// compileOnly("me.shedaniel:RoughlyEnoughItems-default-plugin-neoforge:${reiVersion}")
// Testing
junitImplementation(platform("org.junit:junit-bom:5.10.2"))
junitImplementation(platform("org.junit:junit-bom:${junitVersion}"))
junitImplementation("org.junit.jupiter:junit-jupiter-params")
junitRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
junitImplementation("org.assertj:assertj-core:3.25.1")
// "junitImplementation"(platform("org.junit:junit-bom:5.10.2"))
// "junitImplementation"("org.junit.jupiter:junit-jupiter-params")
// "junitRuntimeOnly"("org.junit.jupiter:junit-jupiter-engine")
junitImplementation("org.assertj:assertj-core:${assertjVersion}")
// Example mod dependency with JEI
// The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
// compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
// compileOnly "mezz.jei:jei-${mc_version}-forge-api:${jei_version}"
// runtimeOnly "mezz.jei:jei-${mc_version}-forge:${jei_version}"
// compileOnly("mezz.jei:jei-${minecraftVersion}-common-api:${jei_version}")
// compileOnly("mezz.jei:jei-${minecraftVersion}-forge-api:${jei_version}")
// runtimeOnly("mezz.jei:jei-${minecraftVersion}-forge:${jei_version}")
// Example mod dependency using a mod jar from ./libs with a flat dir repository
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
@ -181,6 +192,15 @@ dependencies {
// http://www.gradle.org/docs/current/userguide/dependency_management.html
}
afterEvaluate {
// runs["junit"].modSources(runs["junit"].modSources)
// runs["junit"].modSources = runs["junit"].modSources.get().stream().filter { it != sourceSets.main.get() }.toList()
runs["junit"].modSources.all().get().values().remove(sourceSets.main.get())
}
// This block of code expands all declared replace properties in the specified resource targets.
// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments.

View File

@ -12,7 +12,7 @@ minecraftVersion=1.20.6
# as they do not follow standard versioning conventions.
minecraftVersionRange=[1.20.6,1.21)
# The Neo version must agree with the Minecraft version to get a valid artifact
neoVersion=20.6.110-beta
neoVersion=20.6.113-beta
# The Neo version range can use any version of Neo as bounds
neoVersionRange=[20,)
# The loader version range can only use the major version of FML as bounds
@ -40,3 +40,9 @@ modGroupId=robaertschi
modAuthors=RoBaertschi
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
modDescription=
# Dependencies
junitVersion=5.10.2
assertjVersion=3.25.1
topVersion=1.20.5_neo-11.1.1-2
reiVersion=15.0.728

View File

@ -1,2 +1,13 @@
// 1.20.6 2024-06-08T10:31:27.329252554 Item Models: environmenttech
// 1.20.6 2024-06-09T12:43:39.789774136 Item Models: environmenttech
ee3837b261f3dbe2001ba1192716f0fdf144b663 assets/environmenttech/models/item/env_collector.json
aa962e881326461668467281df08b7b82fcc3fd6 assets/environmenttech/models/item/env_detector.json
e6d7f80a803863d6196f53d67487af2b3644323b assets/environmenttech/models/item/env_detector_0.json
8f94bb9cdf778fafd04225c255a740669597a4f3 assets/environmenttech/models/item/env_detector_1.json
e0d2aa063a62122c33bdf28bd675d8cd0823465c assets/environmenttech/models/item/env_detector_2.json
36616927bea7fe0da6c461eb47c20e50acd33831 assets/environmenttech/models/item/env_detector_3.json
d40d8bb7ca16312405190e89b662624fb8062bb3 assets/environmenttech/models/item/env_detector_4.json
b7bfd8c3f18761814a2c3562bba8aa5da4d6e553 assets/environmenttech/models/item/env_detector_5.json
013a0e9cb6db2d7336647b0ab363d258e80c15cd assets/environmenttech/models/item/env_detector_6.json
5acb213593a6932b20ac83a20cc30803631d519d assets/environmenttech/models/item/env_detector_7.json
ba599a8c31f0b4f9c41d5a5f79a83db41c29cb49 assets/environmenttech/models/item/env_detector_8.json
f3f1594483691b7873d0679104a892bae138e925 assets/environmenttech/models/item/environmental_essence.json

View File

@ -0,0 +1,59 @@
{
"parent": "minecraft:item/generated",
"overrides": [
{
"model": "environmenttech:item/env_detector_0",
"predicate": {
"minecraft:custom_model_data": 0.0
}
},
{
"model": "environmenttech:item/env_detector_1",
"predicate": {
"minecraft:custom_model_data": 1.0
}
},
{
"model": "environmenttech:item/env_detector_2",
"predicate": {
"minecraft:custom_model_data": 2.0
}
},
{
"model": "environmenttech:item/env_detector_3",
"predicate": {
"minecraft:custom_model_data": 3.0
}
},
{
"model": "environmenttech:item/env_detector_4",
"predicate": {
"minecraft:custom_model_data": 4.0
}
},
{
"model": "environmenttech:item/env_detector_5",
"predicate": {
"minecraft:custom_model_data": 5.0
}
},
{
"model": "environmenttech:item/env_detector_6",
"predicate": {
"minecraft:custom_model_data": 6.0
}
},
{
"model": "environmenttech:item/env_detector_7",
"predicate": {
"minecraft:custom_model_data": 7.0
}
},
{
"model": "environmenttech:item/env_detector_8",
"predicate": {
"minecraft:custom_model_data": 8.0
}
}
]
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_0"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_1"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_2"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_3"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_4"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_5"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_6"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_7"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/env_detector_8"
}
}

View File

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "environmenttech:item/environmental_essence"
}
}

View File

@ -1,9 +1,14 @@
package robaertschi.environmenttech.datagen;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.neoforge.client.model.generators.ItemModelBuilder;
import net.neoforged.neoforge.client.model.generators.ItemModelProvider;
import net.neoforged.neoforge.client.model.generators.ModelFile;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import robaertschi.environmenttech.level.block.ETBlocks;
import robaertschi.environmenttech.level.item.ETItems;
import robaertschi.environmenttech.level.item.EnvDetectorItem;
import static robaertschi.environmenttech.EnvironmentTech.MODID;
@ -15,6 +20,21 @@ public class ETItemModelProvider extends ItemModelProvider {
@Override
protected void registerModels() {
withExistingParent(ETBlocks.ENV_COLLECTOR_BLOCK.getId().getPath(), modLoc("block/" + "env_collector"));
basicItem(ETItems.ENVIRONMENTAL_ESSENCE_ITEM.get());
registerEnvDetector();
}
private void registerEnvDetector() {
ItemModelBuilder builder = getBuilder("env_detector");
builder.parent(new ModelFile.ExistingModelFile(new ResourceLocation("minecraft", "item/generated"), existingFileHelper));
for (int i = 0; i < EnvDetectorItem.STEPS; i++) {
ItemModelBuilder sub_item_builder = getBuilder("env_detector_" + i);
sub_item_builder.parent(new ModelFile.ExistingModelFile(new ResourceLocation("minecraft", "item/generated"), existingFileHelper));
sub_item_builder.texture("layer0", modLoc("item/env_detector_" + i));
builder.override().predicate(new ResourceLocation("custom_model_data"), i).model(sub_item_builder);
}
}
}

View File

@ -3,6 +3,9 @@ package robaertschi.environmenttech.level.block.entity;
import lombok.Getter;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.component.DataComponentPatch;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.core.component.DataComponents;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.Connection;
import net.minecraft.network.chat.Component;

View File

@ -11,11 +11,13 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Vec3i;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.phys.Vec3;
import robaertschi.environmenttech.level.block.EnvCollectorBlock;
import robaertschi.environmenttech.level.block.entity.EnvCollectorBlockEntity;
import robaertschi.environmenttech.level.particle.ETParticles;
@ -40,7 +42,11 @@ public class EnvCollectorRenderer implements BlockEntityRenderer<EnvCollectorBlo
ItemStack outputItem = pBlockEntity.getOutputItem();
pPoseStack.pushPose();
pPoseStack.translate(0.5, 0.125, 0.8);
Vec3i vec = pBlockEntity.getBlockState().getValue(EnvCollectorBlock.FACING).getNormal();
Vec3 vecDouble = new Vec3(vec.getX(), vec.getY(), vec.getZ());
vecDouble = vecDouble.multiply(new Vec3(0.3, 0.3, 0.3));
vecDouble = vecDouble.add(0.5, 0.125, 0.5);
pPoseStack.translate(vecDouble.x, vecDouble.y, vecDouble.z);
pPoseStack.scale(0.3f, 0.3f, 0.3f);
finishItemRender(pBlockEntity, pPoseStack, pBuffer, outputItem, itemRenderer);

View File

@ -1,11 +1,13 @@
package robaertschi.environmenttech.level.item;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.component.CustomModelData;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
@ -32,6 +34,7 @@ public class ETItems {
public static final DeferredItem<EnvDetectorItem> ENV_DETECTOR_ITEM = ITEMS.registerItem("env_detector",
EnvDetectorItem::new,
new Item.Properties()
.component(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(0))
.stacksTo(1)
.durability(10)
);

View File

@ -1,25 +1,38 @@
package robaertschi.environmenttech.level.item;
import net.minecraft.ChatFormatting;
import net.minecraft.core.component.DataComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.tooltip.TooltipComponent;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.component.CustomModelData;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.NotNull;
import robaertschi.environmenttech.data.attachments.ETAttachments;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;
import java.util.Optional;
@ParametersAreNonnullByDefault
public class EnvDetectorItem extends Item {
public static final int STEPS = 9;
public EnvDetectorItem(Properties properties) {
super(properties);
}
@Override
public void appendHoverText(ItemStack pStack, TooltipContext pContext, List<Component> pTooltipComponents, TooltipFlag pTooltipFlag) {
pTooltipComponents.add(Component.translatable("item.environmenttech.env_detector.tooltip").withStyle(ChatFormatting.GREEN));
}
@Override
public @NotNull InteractionResultHolder<ItemStack> use(Level pLevel, Player pPlayer, InteractionHand pUsedHand) {
if (pLevel.isClientSide()) return InteractionResultHolder.pass(pPlayer.getItemInHand(pUsedHand));
@ -27,7 +40,15 @@ public class EnvDetectorItem extends Item {
var chunk = pLevel.getChunk(pPlayer.blockPosition());
if (chunk.hasData(ETAttachments.ENV)) {
pPlayer.displayClientMessage(Component.literal("Chunk has " + chunk.getData(ETAttachments.ENV) + " ENV").withStyle(ChatFormatting.GREEN), true);
var env = chunk.getData(ETAttachments.ENV);
long steps = env / 2;
if (steps > STEPS) {
steps = STEPS;
}
pPlayer.getItemInHand(pUsedHand).set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData((int)steps));
// pPlayer.displayClientMessage(Component.literal("Chunk has " + chunk.getData(ETAttachments.ENV) + " ENV").withStyle(ChatFormatting.GREEN), true);
} else {
pPlayer.displayClientMessage(Component.literal("Warning: This chunk does not have the ENV attachment, please report this to the Author of the Mod.").withStyle(ChatFormatting.YELLOW), true);
}

View File

@ -6,5 +6,6 @@
"screen.environmenttech.env_collector": "ENV Collector",
"screen.environmenttech.debug": "Debug Menu",
"key.environmenttech.open_debug_menu": "Open Debug Menu",
"key.categories.environmenttech": "Environment Tech"
"key.categories.environmenttech": "Environment Tech",
"item.environmenttech.env_detector.tooltip": "The ENV Detector is a handy device that shows you how much ENV is avilable in the current chunk. It can display from 0 to 16 ENV."
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 654 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 329 B