Glass Tank, env detector move to custom component

This commit is contained in:
Robin 2024-06-09 18:02:55 +02:00
parent 58befd34b3
commit 1d4de7d85e
41 changed files with 361 additions and 154 deletions

View File

@ -96,7 +96,7 @@ runs {
// applies to all the run configs below
configureEach {
// Recommended logging data for a userdev environment
// Recommended logging data for an userdev environment
// The markers can be added/remove as needed separated by commas.
// "SCAN": For mods scan.
// "REGISTRIES": For firing of registry events.

View File

@ -1,6 +1,6 @@
// 1.20.6 2024-06-09T12:43:39.789774136 Item Models: environmenttech
// 1.20.6 2024-06-09T17:17:47.56778268 Item Models: environmenttech
ee3837b261f3dbe2001ba1192716f0fdf144b663 assets/environmenttech/models/item/env_collector.json
aa962e881326461668467281df08b7b82fcc3fd6 assets/environmenttech/models/item/env_detector.json
719f96ed0245a9dc7c32294d66055e76fc594e30 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
@ -11,3 +11,4 @@ b7bfd8c3f18761814a2c3562bba8aa5da4d6e553 assets/environmenttech/models/item/env_
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
a7c7074a907b7e00d0d320bd7bc4d7245eb58f19 assets/environmenttech/models/item/glass_tank.json

View File

@ -1,3 +1,9 @@
// 1.20.6 2024-06-08T10:31:27.329089788 Recipes
// 1.20.6 2024-06-09T15:31:42.389888152 Recipes
375ee3cb8eaf222bd0d5576061d1741b5b3d5cff data/environmenttech/advancements/recipes/environmental_essence.json
99b83974e5a7a570c2111cab62a292d126c36524 data/environmenttech/advancements/recipes/misc/env_collector_block_item.json
6962e07757d0b7087542bf51dddde36d4beb3ee4 data/environmenttech/advancements/recipes/misc/glass_tank.json
76b6b2850a79c80b2f2969b93b26bc3832a77ab4 data/environmenttech/advancements/recipes/tools/env_detector_item.json
23bb508829cafa270f61c06c8cc5aa3ad58e54e1 data/environmenttech/recipes/env_collector_block_item.json
17b9bb86d970f10b3784048b790ba541ed3bf8fd data/environmenttech/recipes/env_detector_item.json
d462a41d1b0fda35660ed3e4c807f83f6dc0e0cd data/environmenttech/recipes/environmental_essence.json
935db7eeeeb437ba83909ba578f14109f62485ef data/environmenttech/recipes/glass_tank.json

View File

@ -4,55 +4,55 @@
{
"model": "environmenttech:item/env_detector_0",
"predicate": {
"minecraft:custom_model_data": 0.0
"environmenttech:filled": 0.0
}
},
{
"model": "environmenttech:item/env_detector_1",
"predicate": {
"minecraft:custom_model_data": 1.0
"environmenttech:filled": 1.0
}
},
{
"model": "environmenttech:item/env_detector_2",
"predicate": {
"minecraft:custom_model_data": 2.0
"environmenttech:filled": 2.0
}
},
{
"model": "environmenttech:item/env_detector_3",
"predicate": {
"minecraft:custom_model_data": 3.0
"environmenttech:filled": 3.0
}
},
{
"model": "environmenttech:item/env_detector_4",
"predicate": {
"minecraft:custom_model_data": 4.0
"environmenttech:filled": 4.0
}
},
{
"model": "environmenttech:item/env_detector_5",
"predicate": {
"minecraft:custom_model_data": 5.0
"environmenttech:filled": 5.0
}
},
{
"model": "environmenttech:item/env_detector_6",
"predicate": {
"minecraft:custom_model_data": 6.0
"environmenttech:filled": 6.0
}
},
{
"model": "environmenttech:item/env_detector_7",
"predicate": {
"minecraft:custom_model_data": 7.0
"environmenttech:filled": 7.0
}
},
{
"model": "environmenttech:item/env_detector_8",
"predicate": {
"minecraft:custom_model_data": 8.0
"environmenttech:filled": 8.0
}
}
]

View File

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

View File

@ -0,0 +1,54 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"has_the_recipe": {
"conditions": {
"recipe": "environmenttech:env_collector_block_item"
},
"trigger": "minecraft:recipe_unlocked"
},
"hopper": {
"conditions": {
"items": [
{
"items": "minecraft:hopper"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"oak_log": {
"conditions": {
"items": [
{
"items": "minecraft:oak_log"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"oak_plank": {
"conditions": {
"items": [
{
"items": "minecraft:oak_planks"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_the_recipe",
"oak_plank",
"oak_log",
"hopper"
]
],
"rewards": {
"recipes": [
"environmenttech:env_collector_block_item"
]
}
}

View File

@ -0,0 +1,43 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"glass_pain": {
"conditions": {
"items": [
{
"items": "#c:glass_panes"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "environmenttech:glass_tank"
},
"trigger": "minecraft:recipe_unlocked"
},
"iron_ingot": {
"conditions": {
"items": [
{
"items": "#c:ingots/iron"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_the_recipe",
"iron_ingot",
"glass_pain"
]
],
"rewards": {
"recipes": [
"environmenttech:glass_tank"
]
}
}

View File

@ -0,0 +1,54 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"glass_tank": {
"conditions": {
"items": [
{
"items": "environmenttech:glass_tank"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "environmenttech:env_detector_item"
},
"trigger": "minecraft:recipe_unlocked"
},
"hopper": {
"conditions": {
"items": [
{
"items": "minecraft:hopper"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"stick": {
"conditions": {
"items": [
{
"items": "#c:rods/wooden"
}
]
},
"trigger": "minecraft:inventory_changed"
}
},
"requirements": [
[
"has_the_recipe",
"glass_tank",
"hopper",
"stick"
]
],
"rewards": {
"recipes": [
"environmenttech:env_detector_item"
]
}
}

View File

@ -0,0 +1,24 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"h": {
"item": "minecraft:hopper"
},
"l": {
"item": "minecraft:oak_log"
},
"p": {
"item": "minecraft:oak_planks"
}
},
"pattern": [
"lhl",
"l l",
"ppp"
],
"result": {
"count": 1,
"id": "environmenttech:env_collector"
}
}

View File

@ -0,0 +1,24 @@
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"h": {
"item": "minecraft:hopper"
},
"s": {
"tag": "c:rods/wooden"
},
"t": {
"item": "environmenttech:glass_tank"
}
},
"pattern": [
"h",
"t",
"s"
],
"result": {
"count": 1,
"id": "environmenttech:env_detector"
}
}

View File

@ -0,0 +1,21 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"key": {
"g": {
"tag": "c:glass_panes"
},
"i": {
"tag": "c:ingots/iron"
}
},
"pattern": [
"ggg",
"gig",
"ggg"
],
"result": {
"count": 1,
"id": "environmenttech:glass_tank"
}
}

View File

@ -3,6 +3,7 @@ package robaertschi.environmenttech.unittest;
import net.neoforged.fml.common.Mod;
@SuppressWarnings("unused")
@Mod(value = TestMod.MOD_ID)
public class TestMod {
public static final String MOD_ID = "environmenttech_tests";

View File

@ -1,7 +1,5 @@
package robaertschi.environmenttech;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.event.config.ModConfigEvent;
@ -28,11 +26,6 @@ public class Config
public static int maxEnvForNewChunk;
public static int minEnvForNewChunk;
private static boolean validateItemName(final Object obj)
{
return obj instanceof String itemName && BuiltInRegistries.ITEM.containsKey(new ResourceLocation(itemName));
}
@SubscribeEvent
static void onLoad(final ModConfigEvent event)
{

View File

@ -1,29 +1,21 @@
package robaertschi.environmenttech;
import com.mojang.logging.LogUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.fml.loading.FMLEnvironment;
import net.neoforged.fml.loading.FMLLoader;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.RegisterCommandsEvent;
import net.neoforged.neoforge.event.server.ServerStartingEvent;
import net.neoforged.neoforge.event.tick.PlayerTickEvent;
import net.neoforged.neoforge.gametest.GameTestHooks;
import org.slf4j.Logger;
import robaertschi.environmenttech.client.ETClient;
import robaertschi.environmenttech.command.EnvironmenttechCommand;
import robaertschi.environmenttech.data.attachments.ETAttachments;
import robaertschi.environmenttech.data.capabilities.ETCapabilities;
import robaertschi.environmenttech.data.components.ETComponents;
import robaertschi.environmenttech.data.recipes.ETRecipes;
import robaertschi.environmenttech.level.block.ETBlocks;
import robaertschi.environmenttech.level.block.entity.ETBlockEntities;
@ -31,6 +23,7 @@ import robaertschi.environmenttech.level.item.ETItems;
import robaertschi.environmenttech.level.particle.ETParticles;
import robaertschi.environmenttech.menu.ETMenus;
@SuppressWarnings("unused")
@Mod(EnvironmentTech.MODID)
public class EnvironmentTech
{
@ -55,8 +48,6 @@ public class EnvironmentTech
// FML will recognize some parameter types like IEventBus or ModContainer and pass them in automatically.
public EnvironmentTech(IEventBus modEventBus, ModContainer modContainer)
{
modEventBus.addListener(this::commonSetup);
NeoForge.EVENT_BUS.addListener(ETClient::onClientTickEnd);
modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC);
@ -68,26 +59,18 @@ public class EnvironmentTech
ETCapabilities.init(modEventBus);
ETMenus.init(modEventBus);
ETParticles.init(modEventBus);
ETComponents.DATA_COMPONENTS.register(modEventBus);
NeoForge.EVENT_BUS.register(this);
}
private void commonSetup(final FMLCommonSetupEvent event)
{
}
@SubscribeEvent
private void registerCommands(RegisterCommandsEvent event) {
new EnvironmenttechCommand(event.getDispatcher());
}
@SubscribeEvent
public void onServerStarting(ServerStartingEvent event)
{
}
@SubscribeEvent()
public void onPlayerTick(PlayerTickEvent.Post event) {
var level = event.getEntity().level();

View File

@ -2,7 +2,7 @@ package robaertschi.environmenttech.client;
import com.mojang.blaze3d.platform.InputConstants;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.item.ItemProperties;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
@ -12,8 +12,11 @@ import org.lwjgl.glfw.GLFW;
import robaertschi.environmenttech.EnvironmentTech;
import robaertschi.environmenttech.client.particle.EnvParticleProvider;
import robaertschi.environmenttech.client.screen.EnvCollectorScreen;
import robaertschi.environmenttech.data.components.ETComponents;
import robaertschi.environmenttech.data.components.FilledComponent;
import robaertschi.environmenttech.level.block.entity.ETBlockEntities;
import robaertschi.environmenttech.level.block.entity.renderer.EnvCollectorRenderer;
import robaertschi.environmenttech.level.item.ETItems;
import robaertschi.environmenttech.level.particle.ETParticles;
import robaertschi.environmenttech.menu.ETMenus;
@ -28,8 +31,12 @@ public class ETClient {
));
@SubscribeEvent
public static void setup(FMLClientSetupEvent event) {
public static void clientSetup(FMLClientSetupEvent event) {
event.enqueueWork(() -> ItemProperties.register(
ETItems.ENV_DETECTOR_ITEM.get(),
EnvironmentTech.id("filled"),
(pStack, pLevel, pEntity, pSeed) -> pStack.getOrDefault(ETComponents.FILLED_COMPONENT, new FilledComponent(0)).filled()
));
}
@SubscribeEvent
@ -53,7 +60,4 @@ public class ETClient {
event.register(OPEN_DEBUG_MENU.get());
}
}
public static void onClientTickEnd(ClientTickEvent.Post event) {
}
}

View File

@ -12,7 +12,6 @@ import robaertschi.environmenttech.level.particle.EnvParticle;
@AllArgsConstructor()
public class EnvParticleProvider implements ParticleProvider<SimpleParticleType> {
private final double SPEED_FACTOR = 0.25;
private final SpriteSet spriteSet;

View File

@ -1,9 +1,5 @@
package robaertschi.environmenttech.client.renderer;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Lombok;
import lombok.RequiredArgsConstructor;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;

View File

@ -1,18 +1,11 @@
package robaertschi.environmenttech.client.screen;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import robaertschi.environmenttech.EnvironmentTech;
public class ProgressArrowUtils {
public static final ResourceLocation SPRITE = EnvironmentTech.id("textures/gui/sprites/component/progress_arrow.png");
public static void draw(GuiGraphics guiGraphics, int x, int y, int progress) {
int j1 = Mth.ceil(progress * 22.0F);
guiGraphics.blit(SPRITE, x, y, 1, 0, 0, 0, 0, 22, 16);
}
public static int getScaledProgress(int progress, int maxProgress) {
int progressArrowSize = 24; // This is the height in pixels of your arrow

View File

@ -16,6 +16,7 @@ public class ETAttachments {
"env", () -> AttachmentType.builder(() -> 0L).serialize(Codec.LONG).build()
);
public static void init(IEventBus eventBus) {
ATTACHMENT_TYPES.register(eventBus);
}

View File

@ -1,6 +0,0 @@
package robaertschi.environmenttech.data.capabilities;
public record EnvCapabilityContext(EnvType type) {
}

View File

@ -2,11 +2,12 @@ package robaertschi.environmenttech.data.capabilities;
import net.minecraft.util.Mth;
@SuppressWarnings("unused")
public class EnvStorage implements IEnvStorage {
private final EnvType[] acceptedEnvTypes;
private final long maxEnv;
private long env;
private long maxTransfer;
private final long maxTransfer;
public EnvStorage(EnvType acceptedEnvType, long maxEnv, long env, long maxTransfer) {
this.acceptedEnvTypes = new EnvType[1];

View File

@ -4,10 +4,10 @@ package robaertschi.environmenttech.data.capabilities;
* ENV is pushed based, so you should not be able to extract ENV from anything.
* This is the reason for the nonexistent extract method.
*/
@SuppressWarnings("unused")
public interface IEnvStorage {
/**
* Receive ENV.
* The type is provided in {@link EnvCapabilityContext}
* @param amount The Amount of ENV to receive.
* @param simulate If the operation is to only be simulated and not affect the storage amount
* @return How much energy was accepted.

View File

@ -0,0 +1,14 @@
package robaertschi.environmenttech.data.components;
import net.minecraft.core.component.DataComponentType;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import robaertschi.environmenttech.EnvironmentTech;
public class ETComponents {
public static final DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister.createDataComponents(EnvironmentTech.MODID);
public static final DeferredHolder<DataComponentType<?>, DataComponentType<FilledComponent>> FILLED_COMPONENT = DATA_COMPONENTS.registerComponentType("filled_component",
filledComponentBuilder -> filledComponentBuilder.persistent(FilledComponent.CODEC).networkSynchronized(FilledComponent.STREAM_CODEC)
);
}

View File

@ -0,0 +1,16 @@
package robaertschi.environmenttech.data.components;
import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;
import io.netty.buffer.ByteBuf;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
public record FilledComponent(int filled) {
public static final Codec<FilledComponent> CODEC = RecordCodecBuilder.create(filledComponentInstance ->
filledComponentInstance.group(
Codec.INT.fieldOf("filled").forGetter(FilledComponent::filled)
).apply(filledComponentInstance, FilledComponent::new)
);
public static final StreamCodec<ByteBuf, FilledComponent> STREAM_CODEC = StreamCodec.composite(ByteBufCodecs.INT, FilledComponent::filled, FilledComponent::new);
}

View File

@ -18,7 +18,6 @@ import net.minecraft.world.item.crafting.Recipe;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.Level;
import net.neoforged.neoforge.items.IItemHandler;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@ -31,10 +30,6 @@ public record EnvCollectorRecipe(Ingredient input, ItemStack output, int envUsed
return this.input.test(pContainer.getItem(0));
}
public boolean matches(@NotNull IItemHandler iItemHandler, @NotNull Level level) {
return this.input.test(iItemHandler.getStackInSlot(0));
}
@Override
public @NotNull ItemStack assemble(@NotNull Container pCraftingContainer, HolderLookup.@NotNull Provider pRegistries) {
return this.output.copy();
@ -68,7 +63,7 @@ public record EnvCollectorRecipe(Ingredient input, ItemStack output, int envUsed
private final Map<String, Criterion<?>> criteria = new LinkedHashMap<>();
// Currently we just ignore the warning, maybe we will use it later, maybe never.
@SuppressWarnings("FieldCanBeLocal")
@SuppressWarnings({"FieldCanBeLocal", "unused"})
@Nullable
private String group;

View File

@ -1,11 +1,8 @@
package robaertschi.environmenttech.datagen;
import net.minecraft.data.PackOutput;
import net.minecraft.world.level.block.Block;
import net.neoforged.neoforge.client.model.generators.BlockModelBuilder;
import net.neoforged.neoforge.client.model.generators.BlockStateProvider;
import net.neoforged.neoforge.client.model.generators.ModelFile;
import net.neoforged.neoforge.client.model.generators.MultiPartBlockStateBuilder;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import robaertschi.environmenttech.level.block.ETBlocks;
@ -21,31 +18,4 @@ public class ETBlockStateProvider extends BlockStateProvider {
// registerEnvCollector();
horizontalBlock(ETBlocks.ENV_COLLECTOR_BLOCK.get(), new ModelFile.UncheckedModelFile(modLoc("block/env_collector")));
}
private void registerEnvCollector() {
var envCollector = ETBlocks.ENV_COLLECTOR_BLOCK;
String path = "env_collector";
BlockModelBuilder base = models().getBuilder("block/" + path + "_main");
base.parent(models().getExistingFile(mcLoc("cube")));
base.element()
.from(0f, 0f, 0f)
.to(16f, 16f, 16f)
.allFaces((direction, faceBuilder) -> faceBuilder.texture("#txt"))
.end();
base.texture("txt", modLoc("block/env_collector_main"));
base.texture("particle", modLoc("block/env_collector_main"));
base.renderType("solid");
createEnvCollectorModel(envCollector.get(), path, base);
}
private void createEnvCollectorModel(Block block, String path, BlockModelBuilder frame) {
MultiPartBlockStateBuilder bld = getMultipartBuilder(block);
bld.part().modelFile(frame).addModel().end();
}
}

View File

@ -6,6 +6,7 @@ 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.EnvironmentTech;
import robaertschi.environmenttech.level.block.ETBlocks;
import robaertschi.environmenttech.level.item.ETItems;
import robaertschi.environmenttech.level.item.EnvDetectorItem;
@ -21,6 +22,7 @@ public class ETItemModelProvider extends ItemModelProvider {
protected void registerModels() {
withExistingParent(ETBlocks.ENV_COLLECTOR_BLOCK.getId().getPath(), modLoc("block/" + "env_collector"));
basicItem(ETItems.ENVIRONMENTAL_ESSENCE_ITEM.get());
basicItem(ETItems.GLASS_TANK.get());
registerEnvDetector();
}
@ -33,7 +35,7 @@ public class ETItemModelProvider extends ItemModelProvider {
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);
builder.override().predicate(EnvironmentTech.id("filled"), i).model(sub_item_builder);
}
}

View File

@ -1,14 +1,19 @@
package robaertschi.environmenttech.datagen;
import net.minecraft.advancements.critereon.InventoryChangeTrigger;
import net.minecraft.advancements.critereon.ItemPredicate;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.data.recipes.RecipeProvider;
import net.minecraft.data.recipes.ShapedRecipeBuilder;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.crafting.Ingredient;
import net.neoforged.neoforge.common.Tags;
import org.jetbrains.annotations.NotNull;
import robaertschi.environmenttech.EnvironmentTech;
import robaertschi.environmenttech.data.recipes.EnvCollectorRecipe;
import robaertschi.environmenttech.level.item.ETItems;
@ -30,5 +35,39 @@ public class ETRecipeProvider extends RecipeProvider {
InventoryChangeTrigger.TriggerInstance.hasItems(Items.IRON_INGOT)
).unlockedBy("env_collector", InventoryChangeTrigger.TriggerInstance.hasItems(ETItems.ENV_COLLECTOR_BLOCK_ITEM))
.save(recipeOutput);
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ETItems.GLASS_TANK)
.define('g', Tags.Items.GLASS_PANES)
.define('i', Tags.Items.INGOTS_IRON)
.pattern("ggg")
.pattern("gig")
.pattern("ggg")
.unlockedBy("iron_ingot", InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(Tags.Items.INGOTS_IRON).build()))
.unlockedBy("glass_pain", InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(Tags.Items.GLASS_PANES).build()))
.save(recipeOutput, EnvironmentTech.id("glass_tank"));
ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ETItems.ENV_COLLECTOR_BLOCK_ITEM)
.define('p', Items.OAK_PLANKS)
.define('l', Items.OAK_LOG)
.define('h', Items.HOPPER)
.pattern("lhl")
.pattern("l l")
.pattern("ppp")
.unlockedBy("oak_plank", InventoryChangeTrigger.TriggerInstance.hasItems(Items.OAK_PLANKS))
.unlockedBy("oak_log", InventoryChangeTrigger.TriggerInstance.hasItems(Items.OAK_LOG))
.unlockedBy("hopper", InventoryChangeTrigger.TriggerInstance.hasItems(Items.HOPPER))
.save(recipeOutput, EnvironmentTech.id("env_collector_block_item"));
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, ETItems.ENV_DETECTOR_ITEM)
.define('t', ETItems.GLASS_TANK)
.define('s', Tags.Items.RODS_WOODEN)
.define('h', Items.HOPPER)
.pattern("h")
.pattern("t")
.pattern("s")
.unlockedBy("glass_tank", InventoryChangeTrigger.TriggerInstance.hasItems(ETItems.GLASS_TANK))
.unlockedBy("hopper", InventoryChangeTrigger.TriggerInstance.hasItems(Items.HOPPER))
.unlockedBy("stick", InventoryChangeTrigger.TriggerInstance.hasItems(ItemPredicate.Builder.item().of(Tags.Items.RODS_WOODEN).build()))
.save(recipeOutput, EnvironmentTech.id("env_detector_item"));
}
}

View File

@ -1,8 +1,6 @@
package robaertschi.environmenttech.level.block;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.MapColor;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredRegister;

View File

@ -3,16 +3,12 @@ package robaertschi.environmenttech.level.block;
import com.mojang.serialization.MapCodec;
import lombok.extern.slf4j.Slf4j;
import net.minecraft.core.BlockPos;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.ItemInteractionResult;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
@ -35,12 +31,9 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import robaertschi.environmenttech.level.block.entity.ETBlockEntities;
import robaertschi.environmenttech.level.block.entity.EnvCollectorBlockEntity;
import robaertschi.environmenttech.menu.EnvCollectorMenu;
import javax.annotation.ParametersAreNonnullByDefault;
import static robaertschi.environmenttech.EnvironmentTech.MODID;
@ParametersAreNonnullByDefault()
@Slf4j
public class EnvCollectorBlock extends BaseEntityBlock {
@ -69,7 +62,7 @@ public class EnvCollectorBlock extends BaseEntityBlock {
return shape;
}
public static VoxelShape SHAPE = makeShape();
public static final VoxelShape SHAPE = makeShape();
@Override
protected @NotNull MapCodec<? extends BaseEntityBlock> codec() {
@ -92,6 +85,7 @@ public class EnvCollectorBlock extends BaseEntityBlock {
return state.setValue(FACING, direction.rotate(state.getValue(FACING)));
}
@SuppressWarnings("deprecation")
@Override
protected @NotNull BlockState mirror(BlockState pState, Mirror pMirror) {
return pState.rotate(pMirror.getRotation(pState.getValue(FACING)));
@ -125,6 +119,7 @@ public class EnvCollectorBlock extends BaseEntityBlock {
return openMenu(pLevel, pPos, pPlayer);
}
@SuppressWarnings("SameReturnValue")
private InteractionResult openMenu(Level pLevel, BlockPos pPos, Player pPlayer) {
if (!pLevel.isClientSide) {
BlockEntity be = pLevel.getBlockEntity(pPos);
@ -139,7 +134,7 @@ public class EnvCollectorBlock extends BaseEntityBlock {
@Override
protected @NotNull ItemInteractionResult useItemOn(ItemStack pStack, BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHitResult) {
InteractionResult result = openMenu(pLevel, pPos, pPlayer);
openMenu(pLevel, pPos, pPlayer);
return ItemInteractionResult.SUCCESS;
}

View File

@ -1,11 +0,0 @@
package robaertschi.environmenttech.level.block.entity;
import net.minecraft.world.Container;
import net.neoforged.neoforge.items.IItemHandlerModifiable;
import net.neoforged.neoforge.items.wrapper.RecipeWrapper;
public class ContainerUtils {
public static Container itemHandlerToContainer(IItemHandlerModifiable itemHandler) {
return new RecipeWrapper(itemHandler);
}
}

View File

@ -12,6 +12,7 @@ import static robaertschi.environmenttech.EnvironmentTech.MODID;
public class ETBlockEntities {
public static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITIES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, MODID);
@SuppressWarnings("DataFlowIssue")
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<EnvCollectorBlockEntity>> ENV_COLLECTOR_BLOCK_ENTITY =
BLOCK_ENTITIES.register("env_collector",
() -> BlockEntityType.Builder.of(EnvCollectorBlockEntity::new,

View File

@ -3,9 +3,6 @@ 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;
@ -40,6 +37,7 @@ public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider
public static final int SLOT_INPUT = 0;
public static final int SLOT_INPUT_COUNT = 1;
@SuppressWarnings("unused")
public static final int SLOT_OUTPUT = 0;
public static final int SLOT_OUTPUT_COUNT = 1;
@ -47,7 +45,6 @@ public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider
public static final String INVENTORY_KEY = "Inventory";
public static final String ENV_KEY = "ENV";
public static final String PROGRESS_KEY = "Progress";
public static final String MAX_PROGRESS_KEY = "MaxProgress";
@Getter
private final ItemStackHandler inventory = new ItemStackHandler(2) {
@ -153,6 +150,7 @@ public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider
return this.inventory.getStackInSlot(1);
}
@SuppressWarnings("unused")
public void setInputItem(ItemStack itemStack) {
this.inventory.setStackInSlot(0, itemStack);
}
@ -163,7 +161,7 @@ public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider
}
public void serverTick(ServerLevel level, BlockPos blockPos, BlockState blockState) {
public void serverTick(ServerLevel level, BlockPos blockPos, @SuppressWarnings("unused") BlockState blockState) {
if (takeEnv <= 0) {
ChunkAccess currentChunk = level.getChunkAt(blockPos);
@ -179,8 +177,6 @@ public class EnvCollectorBlockEntity extends BlockEntity implements MenuProvider
if (hasRecipe(level)) {
if (progress > 0 && progress < getMaxProgress()) {
progress++;
// setChanged();
// level.sendBlockUpdated(getBlockPos(), blockState, blockState, Block.UPDATE_CLIENTS);
} else if (progress > 0) {
produce(level);
progress = 0;

View File

@ -3,7 +3,6 @@ package robaertschi.environmenttech.level.block.entity.renderer;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
@ -12,7 +11,6 @@ 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;
@ -27,6 +25,7 @@ import java.util.Objects;
@ParametersAreNonnullByDefault
public class EnvCollectorRenderer implements BlockEntityRenderer<EnvCollectorBlockEntity> {
@SuppressWarnings("unused")
public EnvCollectorRenderer(BlockEntityRendererProvider.Context context) {}
public int spawnParticle = 0;

View File

@ -9,9 +9,6 @@ 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;
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;
@ -19,7 +16,6 @@ import robaertschi.environmenttech.level.block.ETBlocks;
import static robaertschi.environmenttech.EnvironmentTech.MODID;
@EventBusSubscriber(bus = EventBusSubscriber.Bus.MOD)
public class ETItems {
public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MODID);
@ -40,6 +36,7 @@ public class ETItems {
);
public static final DeferredItem<Item> ENVIRONMENTAL_ESSENCE_ITEM = ITEMS.registerSimpleItem("environmental_essence");
public static final DeferredItem<Item> GLASS_TANK = ITEMS.registerSimpleItem("glass_tank");
@SuppressWarnings("unused")
@ -52,6 +49,7 @@ public class ETItems {
output.accept(ENV_DETECTOR_ITEM.get());
// output.accept(EXAMPLE_BLOCK_ITEM.get());
output.accept(ENVIRONMENTAL_ESSENCE_ITEM.get());
output.accept(GLASS_TANK);
}).build());
@ -62,10 +60,4 @@ public class ETItems {
}
@SuppressWarnings("unused")
@SubscribeEvent()
// Add the example block item to the building blocks tab
public static void addCreative(BuildCreativeModeTabContentsEvent event)
{
}
}

View File

@ -1,23 +1,21 @@
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 robaertschi.environmenttech.data.components.ETComponents;
import robaertschi.environmenttech.data.components.FilledComponent;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;
import java.util.Optional;
@ParametersAreNonnullByDefault
public class EnvDetectorItem extends Item {
@ -27,7 +25,6 @@ public class EnvDetectorItem extends Item {
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));
@ -46,7 +43,7 @@ public class EnvDetectorItem extends Item {
steps = STEPS;
}
pPlayer.getItemInHand(pUsedHand).set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData((int)steps));
pPlayer.getItemInHand(pUsedHand).set(ETComponents.FILLED_COMPONENT.get(), new FilledComponent((int)steps));
// pPlayer.displayClientMessage(Component.literal("Chunk has " + chunk.getData(ETAttachments.ENV) + " ENV").withStyle(ChatFormatting.GREEN), true);
} else {

View File

@ -15,6 +15,7 @@ import robaertschi.environmenttech.level.block.entity.EnvCollectorBlockEntity;
import static robaertschi.environmenttech.level.block.entity.EnvCollectorBlockEntity.SLOT_COUNT;
import static robaertschi.environmenttech.level.block.entity.EnvCollectorBlockEntity.SLOT_INPUT;
@SuppressWarnings("SameParameterValue")
public class EnvCollectorMenu extends AbstractContainerMenu {
@Getter
@ -53,6 +54,7 @@ public class EnvCollectorMenu extends AbstractContainerMenu {
return index;
}
@SuppressWarnings("UnusedReturnValue")
private int addSlotBox(Container playerInventory, int index, int x, int y, int horAmount, int dx, int verAmount, int dy) {
for (int j = 0 ; j < verAmount ; j++) {
index = addSlotRange(playerInventory, index, x, y, horAmount, dx);

View File

@ -1,6 +1,7 @@
package robaertschi.environmenttech.utils;
public class MouseUtils {
@SuppressWarnings("unused")
public static boolean isMouseOver(double mouseX, double mouseY, int x, int y) {
return isMouseOver(mouseX, mouseY, x, y, 16);
}

View File

@ -5,7 +5,7 @@
# Find more information on toml format here: https://github.com/toml-lang/toml
# The name of the mod loader type to load - for regular FML @Mod mods it should be javafml
modLoader="javafml" #mandatory
# A version range to match for said mod loader - for regular FML @Mod it will be the the FML version. This is currently 47.
# A version range to match for said mod loader - for regular FML @Mod it will be the FML version. This is currently 47.
loaderVersion="${loader_version_range}" #mandatory
# The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties.
# Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here.
@ -56,7 +56,7 @@ config="environmenttech.mixins.json"
[[dependencies."${mod_id}"]] #optional
# the modid of the dependency
modId="neoforge" #mandatory
# The type of the dependency. Can be one of "required", "optional", "incompatible" or "discouraged" (case insensitive).
# The type of the dependency. Can be one of "required", "optional", "incompatible" or "discouraged" (case-insensitive).
# 'required' requires the mod to exist, 'optional' does not
# 'incompatible' will prevent the game from loading when the mod exists, and 'discouraged' will show a warning
type="required" #mandatory

View File

@ -1,11 +1,14 @@
{
"item.environmenttech.env_detector": "ENV Detector",
"item.environmenttech.environmental_essence": "Environmental Essence",
"item.environmenttech.env_detector.tooltip": "The ENV Detector is a handy device that shows you how much ENV is available in the current chunk. It can display from 0 to 16 ENV.",
"block.environmenttech.env_collector": "ENV Collector",
"itemGroup.environmenttech": "Environment Tech",
"screen.environmenttech.env_collector": "ENV Collector",
"screen.environmenttech.debug": "Debug Menu",
"key.environmenttech.open_debug_menu": "Open Debug Menu",
"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."
"key.categories.environmenttech": "Environment Tech"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B