Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ bin/

# fabric

run/
run/
/src/main/generated/.cache/
8 changes: 7 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'fabric-loom' version '1.7-SNAPSHOT'
id 'fabric-loom' version '1.9-SNAPSHOT'
id 'maven-publish'
}

Expand Down Expand Up @@ -31,6 +31,12 @@ dependencies {
modLocalRuntime "com.terraformersmc:modmenu:${project.modmenu_version}"
}

fabricApi {
configureDataGeneration() {
client = true
}
}

processResources {
inputs.property "version", project.version

Expand Down
18 changes: 9 additions & 9 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,24 @@
org.gradle.jvmargs=-Xmx1G
# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_base_version=1.21
minecraft_version=1.21
yarn_mappings=1.21+build.2
loader_version=0.15.11
minecraft_base_version=1.21.4
minecraft_version=1.21.4
yarn_mappings=1.21.4+build.8
loader_version=0.16.10

# Mod Properties
mod_version=0.2.3
mod_version=0.3.0
maven_group=com.glisco
archives_base_name=interactic

# Dependencies
fabric_version=0.100.1+1.21
fabric_version=0.115.1+1.21.4

# https://maven.terraformersmc.com/releases/com/terraformersmc/modmenu
modmenu_version = 11.0.0-rc.2
modmenu_version = 13.0.1

# https://maven.wispforest.io/io/wispforest/owo-lib/
owo_version = 0.12.10+1.21
# https://maven.wispforest.io/#/releases/io/wispforest/owo-lib/
owo_version = 0.12.20+1.21.4



Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
1 change: 0 additions & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
pluginManagement {
repositories {
jcenter()
maven {
name = 'Fabric'
url = 'https://maven.fabricmc.net/'
Expand Down
14 changes: 14 additions & 0 deletions src/main/generated/assets/interactic/items/item_filter.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"model": {
"type": "minecraft:condition",
"on_false": {
"type": "minecraft:model",
"model": "interactic:item/item_filter"
},
"on_true": {
"type": "minecraft:model",
"model": "interactic:item/item_filter_enabled"
},
"property": "interactic:enabled"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "interactic:item/item_filter_disabled"
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"parent": "item/generated",
"parent": "minecraft:item/generated",
"textures": {
"layer0": "interactic:item/item_filter_enabled"
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"parent": "minecraft:recipes/root",
"criteria": {
"get_item": {
"conditions": {
"items": [
{
"items": "minecraft:crafting_table"
}
]
},
"trigger": "minecraft:inventory_changed"
},
"has_the_recipe": {
"conditions": {
"recipe": "interactic:item_filter"
},
"trigger": "minecraft:recipe_unlocked"
}
},
"requirements": [
[
"has_the_recipe",
"get_item"
]
],
"rewards": {
"recipes": [
"interactic:item_filter"
]
}
}
17 changes: 17 additions & 0 deletions src/main/generated/data/interactic/recipe/item_filter.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"key": {
"c": "minecraft:copper_ingot",
"e": "minecraft:ender_eye"
},
"pattern": [
" c ",
"cec",
" c "
],
"result": {
"count": 1,
"id": "interactic:item_filter"
}
}
18 changes: 6 additions & 12 deletions src/main/java/interactic/InteracticClientInit.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package interactic;

import interactic.data.EnabledProperty;
import interactic.itemfilter.ItemFilterScreen;
import interactic.util.InteracticNetworking;
import io.wispforest.owo.config.ui.ConfigScreen;
import io.wispforest.owo.config.ui.ConfigScreenProviders;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.gui.screen.ingame.HandledScreens;
import net.minecraft.client.item.ModelPredicateProviderRegistry;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.render.item.property.bool.BooleanProperties;
import net.minecraft.client.util.InputUtil;
import net.minecraft.util.Hand;
import net.minecraft.util.Identifier;

public class InteracticClientInit implements ClientModInitializer {

Expand All @@ -19,15 +20,8 @@ public class InteracticClientInit implements ClientModInitializer {

@Override
public void onInitializeClient() {
if (InteracticInit.getConfig().itemFilterEnabled()) {
ModelPredicateProviderRegistry.register(
InteracticInit.getItemFilter(),
Identifier.of("enabled"),
(stack, world, entity, seed) -> stack.getOrDefault(ItemFilterItem.ENABLED, false) ? 1 : 0
);
}

HandledScreens.register(InteracticInit.ITEM_FILTER_SCREEN_HANDLER, ItemFilterScreen::new);
BooleanProperties.ID_MAPPER.put(InteracticInit.id("enabled"), EnabledProperty.CODEC);

ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (PICKUP_ITEM.wasPressed()) {
Expand All @@ -36,7 +30,7 @@ public void onInitializeClient() {
}
});

ConfigScreen.registerProvider("interactic", InteracticConfigScreen::new);
ConfigScreenProviders.register("interactic", InteracticConfigScreen::new);
InteracticNetworking.initClient();
}
}
13 changes: 7 additions & 6 deletions src/main/java/interactic/InteracticInit.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
package interactic;

import interactic.mixin.ItemEntityAccessor;
import interactic.util.Helpers;
import interactic.itemfilter.ItemFilterItem;
import interactic.itemfilter.ItemFilterScreenHandler;
import interactic.util.InteracticConfig;
import interactic.util.InteracticNetworking;
import interactic.util.InteracticPlayerExtension;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.resource.featuretoggle.FeatureFlags;
import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.util.Identifier;
Expand Down Expand Up @@ -51,7 +50,9 @@ public void onInitialize() {
if (FabricLoader.getInstance().isModLoaded("iris")) itemRotationSpeedMultiplier = 0.5f;

if (CONFIG.itemFilterEnabled()) {
ITEM_FILTER = Registry.register(Registries.ITEM, id("item_filter"), new ItemFilterItem());
Identifier id = id("item_filter");
RegistryKey<Item> key = RegistryKey.of(RegistryKeys.ITEM, id);
ITEM_FILTER = Registry.register(Registries.ITEM, id, new ItemFilterItem(key));
}

InteracticNetworking.init();
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/interactic/data/EnabledProperty.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package interactic.data;

import com.mojang.serialization.MapCodec;
import interactic.itemfilter.ItemFilterItem;
import net.minecraft.client.render.item.property.bool.BooleanProperty;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ModelTransformationMode;
import org.jetbrains.annotations.Nullable;

public record EnabledProperty() implements BooleanProperty {
public static final MapCodec<EnabledProperty> CODEC = MapCodec.unit(new EnabledProperty());

@Override
public boolean getValue(ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity user, int seed, ModelTransformationMode modelTransformationMode) {
return stack.getOrDefault(ItemFilterItem.ENABLED, false);
}

@Override
public MapCodec<EnabledProperty> getCodec() {
return CODEC;
}
}
14 changes: 14 additions & 0 deletions src/main/java/interactic/data/InteracticDataGen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package interactic.data;

import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;

public class InteracticDataGen implements DataGeneratorEntrypoint {

@Override
public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
var pack = fabricDataGenerator.createPack();
pack.addProvider(ItemModelProvider::new);
pack.addProvider(ItemRecipeProvider::new);
}
}
35 changes: 35 additions & 0 deletions src/main/java/interactic/data/ItemModelProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package interactic.data;

import interactic.InteracticInit;
import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.minecraft.client.data.*;
import net.minecraft.client.render.item.model.ItemModel;
import net.minecraft.item.Item;

public class ItemModelProvider extends FabricModelProvider {

public ItemModelProvider(FabricDataOutput output) {
super(output);
}

@Override
public void generateBlockStateModels(BlockStateModelGenerator blockStateModelGenerator) {

}

@Override
public void generateItemModels(ItemModelGenerator itemModelGenerator) {
Item item = InteracticInit.getItemFilter();

TextureMap textures = TextureMap.layer0(TextureMap.getSubId(item, "_disabled"));
Models.GENERATED.upload(ModelIds.getItemModelId(item), textures, itemModelGenerator.modelCollector);
ItemModel.Unbaked unbaked = ItemModels.basic(ModelIds.getItemModelId(item));

TextureMap texturesEnabled = TextureMap.layer0(TextureMap.getSubId(item, "_enabled"));
Models.GENERATED.upload(ModelIds.getItemSubModelId(item, "_enabled"), texturesEnabled, itemModelGenerator.modelCollector);
ItemModel.Unbaked unbakedEnabled = ItemModels.basic(ModelIds.getItemSubModelId(item, "_enabled"));

itemModelGenerator.registerCondition(item, new EnabledProperty(), unbakedEnabled, unbaked);
}
}
45 changes: 45 additions & 0 deletions src/main/java/interactic/data/ItemRecipeProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package interactic.data;

import interactic.InteracticInit;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
import net.minecraft.advancement.criterion.InventoryChangedCriterion;
import net.minecraft.data.recipe.RecipeExporter;
import net.minecraft.data.recipe.RecipeGenerator;
import net.minecraft.data.recipe.ShapedRecipeJsonBuilder;
import net.minecraft.item.Items;
import net.minecraft.recipe.book.RecipeCategory;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryWrapper;

import java.util.concurrent.CompletableFuture;

public class ItemRecipeProvider extends FabricRecipeProvider {

public ItemRecipeProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
super(output, registriesFuture);
}

@Override
protected RecipeGenerator getRecipeGenerator(RegistryWrapper.WrapperLookup registryLookup, RecipeExporter exporter) {
return new RecipeGenerator(registryLookup, exporter) {
@Override
public void generate() {
var itemLookup = registryLookup.getOrThrow(RegistryKeys.ITEM);
ShapedRecipeJsonBuilder.create(itemLookup, RecipeCategory.TOOLS, InteracticInit.getItemFilter())
.criterion("get_item", InventoryChangedCriterion.Conditions.items(Items.CRAFTING_TABLE))
.pattern(" c ")
.pattern("cec")
.pattern(" c ")
.input('c', Items.COPPER_INGOT)
.input('e', Items.ENDER_EYE)
.offerTo(exporter);
}
};
}

@Override
public String getName() {
return "recipe";
}
}
Loading