ENV Detector and Environmental Essence textures, models and functionality
@ -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.
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_0"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_1"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_2"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_3"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_4"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_5"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_6"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_7"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/env_detector_8"
|
||||
}
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "environmenttech:item/environmental_essence"
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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."
|
||||
}
|
After Width: | Height: | Size: 628 B |
After Width: | Height: | Size: 665 B |
After Width: | Height: | Size: 651 B |
After Width: | Height: | Size: 675 B |
After Width: | Height: | Size: 681 B |
After Width: | Height: | Size: 654 B |
After Width: | Height: | Size: 639 B |
After Width: | Height: | Size: 655 B |
After Width: | Height: | Size: 658 B |
After Width: | Height: | Size: 329 B |