diff --git a/build.gradle b/build.gradle index d1d0f08..a524a0a 100644 --- a/build.gradle +++ b/build.gradle @@ -200,10 +200,10 @@ dependencies { } - //if (create_enabled.toBoolean()) { + if (create_enabled.toBoolean()) { implementation fg.deobf("com.simibubi.create:create-${create_minecraft_version}:${create_version}:slim") { transitive = false } implementation fg.deobf("com.jozufozu.flywheel:flywheel-forge-${flywheel_minecraft_version}:${flywheel_version}") - //} + } if (ct_enabled.toBoolean()) { def minecraftVersion= "net.minecraftforge:forge:${minecraft_version}-${forge_version}" diff --git a/gradle.properties b/gradle.properties index 1ec0cdb..b6bb04c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=0.0.1 +mod_version=0.0.2 modid=trading_station author=oierbravo display_name=Trading Station @@ -28,7 +28,7 @@ registrate_version = MC1.19-1.1.5 jei_minecraft_version = 1.19.2 jei_version = 11.4.0.290 -create_enabled = true; +create_enabled = false; create_minecraft_version = 1.19.2 flywheel_minecraft_version = 1.19.2 create_version = 0.5.1.c-36 diff --git a/src/generated/resources/.cache/4d2cf289d7163ae9b4170972f21a12a309c005b8 b/src/generated/resources/.cache/4d2cf289d7163ae9b4170972f21a12a309c005b8 index bfaa751..aa258c7 100644 --- a/src/generated/resources/.cache/4d2cf289d7163ae9b4170972f21a12a309c005b8 +++ b/src/generated/resources/.cache/4d2cf289d7163ae9b4170972f21a12a309c005b8 @@ -1,9 +1,15 @@ -// 1.19.2 2023-08-19T22:34:02.349925986 Registrate Provider for trading_station [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] -d529016ef556a0231f5da8dd90e7b84a30aad7f7 assets/trading_station/blockstates/powered_trading_station.json +// 1.19.2 2023-08-20T05:34:06.144973297 Registrate Provider for trading_station [Recipes, Advancements, Loot tables, Tags (blocks), Tags (items), Tags (fluids), Tags (entity_types), Blockstates, Item models, Lang (en_us/en_ud)] +76015b2093284d49b4645a032a1401ad54416aed assets/trading_station/blockstates/powered_trading_station.json +76015b2093284d49b4645a032a1401ad54416aed assets/trading_station/blockstates/powered_trading_station_unbreakable.json d529016ef556a0231f5da8dd90e7b84a30aad7f7 assets/trading_station/blockstates/trading_station.json -72f9bf61c9db46a4fefece27497879b91d0290e3 assets/trading_station/lang/en_ud.json -b39694f8daf13daba09feddb32de6f23e9bf20ad assets/trading_station/lang/en_us.json +d529016ef556a0231f5da8dd90e7b84a30aad7f7 assets/trading_station/blockstates/trading_station_unbreakable.json +4a698dd4a98169d92e2307f2f3ecc9276eaa56bd assets/trading_station/lang/en_ud.json +be713c678361dbc9c9f0a45112214a71cf5faae4 assets/trading_station/lang/en_us.json 373be6ce42eee460888161c967f098e5943e3778 assets/trading_station/models/item/powered_trading_station.json +77bf5b94b46ff3ecdfec5e8edff0676571d9ed1b assets/trading_station/models/item/powered_trading_station_unbreakable.json 7ddda578b6d6072db924599a9959579470354897 assets/trading_station/models/item/trading_station.json +84ad64215c6c13c1dbe223941a19b03fbf5dd5e6 assets/trading_station/models/item/trading_station_unbreakable.json c3b4c04c1cecdc5001fcddda7b30b11b15f0b2b2 data/trading_station/loot_tables/blocks/powered_trading_station.json +305e10b5cc680c810cea1e8e1cc8987fa6957c68 data/trading_station/loot_tables/blocks/powered_trading_station_unbreakable.json 4c82f05fb35c8b26972d5fd3abf4bb5da6cba466 data/trading_station/loot_tables/blocks/trading_station.json +e29db90ad205b2a74c29ed50e8ae52792d9670fe data/trading_station/loot_tables/blocks/trading_station_unbreakable.json diff --git a/src/generated/resources/assets/trading_station/blockstates/powered_trading_station.json b/src/generated/resources/assets/trading_station/blockstates/powered_trading_station.json index 0676602..4e52edb 100644 --- a/src/generated/resources/assets/trading_station/blockstates/powered_trading_station.json +++ b/src/generated/resources/assets/trading_station/blockstates/powered_trading_station.json @@ -1,63 +1,63 @@ { "variants": { "facing=east,lit=false,powered=false": { - "model": "trading_station:block/trading_station", + "model": "trading_station:block/powered_trading_station", "y": 90 }, "facing=east,lit=false,powered=true": { - "model": "trading_station:block/trading_station_powered", + "model": "trading_station:block/powered_trading_station_powered", "y": 90 }, "facing=east,lit=true,powered=false": { - "model": "trading_station:block/trading_station_lit", + "model": "trading_station:block/powered_trading_station_lit", "y": 90 }, "facing=east,lit=true,powered=true": { - "model": "trading_station:block/trading_station_powered_lit", + "model": "trading_station:block/powered_trading_station_powered_lit", "y": 90 }, "facing=north,lit=false,powered=false": { - "model": "trading_station:block/trading_station" + "model": "trading_station:block/powered_trading_station" }, "facing=north,lit=false,powered=true": { - "model": "trading_station:block/trading_station_powered" + "model": "trading_station:block/powered_trading_station_powered" }, "facing=north,lit=true,powered=false": { - "model": "trading_station:block/trading_station_lit" + "model": "trading_station:block/powered_trading_station_lit" }, "facing=north,lit=true,powered=true": { - "model": "trading_station:block/trading_station_powered_lit" + "model": "trading_station:block/powered_trading_station_powered_lit" }, "facing=south,lit=false,powered=false": { - "model": "trading_station:block/trading_station", + "model": "trading_station:block/powered_trading_station", "y": 180 }, "facing=south,lit=false,powered=true": { - "model": "trading_station:block/trading_station_powered", + "model": "trading_station:block/powered_trading_station_powered", "y": 180 }, "facing=south,lit=true,powered=false": { - "model": "trading_station:block/trading_station_lit", + "model": "trading_station:block/powered_trading_station_lit", "y": 180 }, "facing=south,lit=true,powered=true": { - "model": "trading_station:block/trading_station_powered_lit", + "model": "trading_station:block/powered_trading_station_powered_lit", "y": 180 }, "facing=west,lit=false,powered=false": { - "model": "trading_station:block/trading_station", + "model": "trading_station:block/powered_trading_station", "y": 270 }, "facing=west,lit=false,powered=true": { - "model": "trading_station:block/trading_station_powered", + "model": "trading_station:block/powered_trading_station_powered", "y": 270 }, "facing=west,lit=true,powered=false": { - "model": "trading_station:block/trading_station_lit", + "model": "trading_station:block/powered_trading_station_lit", "y": 270 }, "facing=west,lit=true,powered=true": { - "model": "trading_station:block/trading_station_powered_lit", + "model": "trading_station:block/powered_trading_station_powered_lit", "y": 270 } } diff --git a/src/generated/resources/assets/trading_station/blockstates/powered_trading_station_unbreakable.json b/src/generated/resources/assets/trading_station/blockstates/powered_trading_station_unbreakable.json new file mode 100644 index 0000000..4e52edb --- /dev/null +++ b/src/generated/resources/assets/trading_station/blockstates/powered_trading_station_unbreakable.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=east,lit=false,powered=false": { + "model": "trading_station:block/powered_trading_station", + "y": 90 + }, + "facing=east,lit=false,powered=true": { + "model": "trading_station:block/powered_trading_station_powered", + "y": 90 + }, + "facing=east,lit=true,powered=false": { + "model": "trading_station:block/powered_trading_station_lit", + "y": 90 + }, + "facing=east,lit=true,powered=true": { + "model": "trading_station:block/powered_trading_station_powered_lit", + "y": 90 + }, + "facing=north,lit=false,powered=false": { + "model": "trading_station:block/powered_trading_station" + }, + "facing=north,lit=false,powered=true": { + "model": "trading_station:block/powered_trading_station_powered" + }, + "facing=north,lit=true,powered=false": { + "model": "trading_station:block/powered_trading_station_lit" + }, + "facing=north,lit=true,powered=true": { + "model": "trading_station:block/powered_trading_station_powered_lit" + }, + "facing=south,lit=false,powered=false": { + "model": "trading_station:block/powered_trading_station", + "y": 180 + }, + "facing=south,lit=false,powered=true": { + "model": "trading_station:block/powered_trading_station_powered", + "y": 180 + }, + "facing=south,lit=true,powered=false": { + "model": "trading_station:block/powered_trading_station_lit", + "y": 180 + }, + "facing=south,lit=true,powered=true": { + "model": "trading_station:block/powered_trading_station_powered_lit", + "y": 180 + }, + "facing=west,lit=false,powered=false": { + "model": "trading_station:block/powered_trading_station", + "y": 270 + }, + "facing=west,lit=false,powered=true": { + "model": "trading_station:block/powered_trading_station_powered", + "y": 270 + }, + "facing=west,lit=true,powered=false": { + "model": "trading_station:block/powered_trading_station_lit", + "y": 270 + }, + "facing=west,lit=true,powered=true": { + "model": "trading_station:block/powered_trading_station_powered_lit", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/trading_station/blockstates/trading_station_unbreakable.json b/src/generated/resources/assets/trading_station/blockstates/trading_station_unbreakable.json new file mode 100644 index 0000000..0676602 --- /dev/null +++ b/src/generated/resources/assets/trading_station/blockstates/trading_station_unbreakable.json @@ -0,0 +1,64 @@ +{ + "variants": { + "facing=east,lit=false,powered=false": { + "model": "trading_station:block/trading_station", + "y": 90 + }, + "facing=east,lit=false,powered=true": { + "model": "trading_station:block/trading_station_powered", + "y": 90 + }, + "facing=east,lit=true,powered=false": { + "model": "trading_station:block/trading_station_lit", + "y": 90 + }, + "facing=east,lit=true,powered=true": { + "model": "trading_station:block/trading_station_powered_lit", + "y": 90 + }, + "facing=north,lit=false,powered=false": { + "model": "trading_station:block/trading_station" + }, + "facing=north,lit=false,powered=true": { + "model": "trading_station:block/trading_station_powered" + }, + "facing=north,lit=true,powered=false": { + "model": "trading_station:block/trading_station_lit" + }, + "facing=north,lit=true,powered=true": { + "model": "trading_station:block/trading_station_powered_lit" + }, + "facing=south,lit=false,powered=false": { + "model": "trading_station:block/trading_station", + "y": 180 + }, + "facing=south,lit=false,powered=true": { + "model": "trading_station:block/trading_station_powered", + "y": 180 + }, + "facing=south,lit=true,powered=false": { + "model": "trading_station:block/trading_station_lit", + "y": 180 + }, + "facing=south,lit=true,powered=true": { + "model": "trading_station:block/trading_station_powered_lit", + "y": 180 + }, + "facing=west,lit=false,powered=false": { + "model": "trading_station:block/trading_station", + "y": 270 + }, + "facing=west,lit=false,powered=true": { + "model": "trading_station:block/trading_station_powered", + "y": 270 + }, + "facing=west,lit=true,powered=false": { + "model": "trading_station:block/trading_station_lit", + "y": 270 + }, + "facing=west,lit=true,powered=true": { + "model": "trading_station:block/trading_station_powered_lit", + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/trading_station/lang/en_ud.json b/src/generated/resources/assets/trading_station/lang/en_ud.json index b2423c5..5b8622e 100644 --- a/src/generated/resources/assets/trading_station/lang/en_ud.json +++ b/src/generated/resources/assets/trading_station/lang/en_ud.json @@ -1,6 +1,8 @@ { "block.trading_station.powered_trading_station": "uoıʇɐʇS buıpɐɹ⟘ pǝɹǝʍoԀ", + "block.trading_station.powered_trading_station_unbreakable": "uoıʇɐʇS buıpɐɹ⟘ pǝɹǝʍoԀ ǝןqɐʞɐǝɹqu∩", "block.trading_station.trading_station": "uoıʇɐʇS buıpɐɹ⟘", + "block.trading_station.trading_station_unbreakable": "uoıʇɐʇS buıpɐɹ⟘", "config.jade.plugin_trading_station.trading_station_data": "ɐʇɐp uoıʇɐʇS buıpɐɹ⟘", "itemGroup.trading_station": "uoıʇɐʇS buıpɐɹ⟘", "trading_station.screen.redstone.high": "ɥbıH", diff --git a/src/generated/resources/assets/trading_station/lang/en_us.json b/src/generated/resources/assets/trading_station/lang/en_us.json index 22b9210..5ef9d44 100644 --- a/src/generated/resources/assets/trading_station/lang/en_us.json +++ b/src/generated/resources/assets/trading_station/lang/en_us.json @@ -1,6 +1,8 @@ { "block.trading_station.powered_trading_station": "Powered Trading Station", + "block.trading_station.powered_trading_station_unbreakable": "Unbreakable Powered Trading Station", "block.trading_station.trading_station": "Trading Station", + "block.trading_station.trading_station_unbreakable": "Trading Station", "config.jade.plugin_trading_station.trading_station_data": "Trading Station data", "itemGroup.trading_station": "Trading Station", "trading_station.screen.redstone.high": "High", diff --git a/src/generated/resources/assets/trading_station/models/item/powered_trading_station_unbreakable.json b/src/generated/resources/assets/trading_station/models/item/powered_trading_station_unbreakable.json new file mode 100644 index 0000000..515827f --- /dev/null +++ b/src/generated/resources/assets/trading_station/models/item/powered_trading_station_unbreakable.json @@ -0,0 +1,3 @@ +{ + "parent": "trading_station:block/powered_trading_station_unbreakable" +} \ No newline at end of file diff --git a/src/generated/resources/assets/trading_station/models/item/trading_station_unbreakable.json b/src/generated/resources/assets/trading_station/models/item/trading_station_unbreakable.json new file mode 100644 index 0000000..e27d2a7 --- /dev/null +++ b/src/generated/resources/assets/trading_station/models/item/trading_station_unbreakable.json @@ -0,0 +1,3 @@ +{ + "parent": "trading_station:block/trading_station_unbreakable" +} \ No newline at end of file diff --git a/src/generated/resources/data/trading_station/loot_tables/blocks/powered_trading_station_unbreakable.json b/src/generated/resources/data/trading_station/loot_tables/blocks/powered_trading_station_unbreakable.json new file mode 100644 index 0000000..d9f133d --- /dev/null +++ b/src/generated/resources/data/trading_station/loot_tables/blocks/powered_trading_station_unbreakable.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "trading_station:powered_trading_station_unbreakable" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/trading_station/loot_tables/blocks/trading_station_unbreakable.json b/src/generated/resources/data/trading_station/loot_tables/blocks/trading_station_unbreakable.json new file mode 100644 index 0000000..2ce94b5 --- /dev/null +++ b/src/generated/resources/data/trading_station/loot_tables/blocks/trading_station_unbreakable.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "trading_station:trading_station_unbreakable" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/java/com/oierbravo/trading_station/TradingStation.java b/src/main/java/com/oierbravo/trading_station/TradingStation.java index 894ab58..5946708 100644 --- a/src/main/java/com/oierbravo/trading_station/TradingStation.java +++ b/src/main/java/com/oierbravo/trading_station/TradingStation.java @@ -57,7 +57,6 @@ public class TradingStation modEventBus.addListener(EventPriority.LOWEST, TradingStation::gatherData); - Mods.CREATE.executeIfInstalled(() -> MechanicalTradingStationRegistrate::register); } public static void gatherData(GatherDataEvent event) { DataGenerator gen = event.getGenerator(); diff --git a/src/main/java/com/oierbravo/trading_station/compat/jei/JEIPlugin.java b/src/main/java/com/oierbravo/trading_station/compat/jei/JEIPlugin.java index 03b0d97..699d8f3 100644 --- a/src/main/java/com/oierbravo/trading_station/compat/jei/JEIPlugin.java +++ b/src/main/java/com/oierbravo/trading_station/compat/jei/JEIPlugin.java @@ -43,7 +43,9 @@ public class JEIPlugin implements IModPlugin { @Override public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) { registration.addRecipeCatalyst(new ItemStack(TradingStationRegistrate.BLOCK.get()),new RecipeType<>(TradingRecipeCategory.UID, TradingRecipe.class)); + registration.addRecipeCatalyst(new ItemStack(TradingStationRegistrate.BLOCK_UNBREAKABLE.get()),new RecipeType<>(TradingRecipeCategory.UID, TradingRecipe.class)); registration.addRecipeCatalyst(new ItemStack(PoweredTradingStationRegistrate.BLOCK.get()),new RecipeType<>(TradingRecipeCategory.UID, TradingRecipe.class)); + registration.addRecipeCatalyst(new ItemStack(PoweredTradingStationRegistrate.BLOCK_UNBREAKABLE.get()),new RecipeType<>(TradingRecipeCategory.UID, TradingRecipe.class)); } @Override @@ -57,7 +59,7 @@ public class JEIPlugin implements IModPlugin { @Override public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) { - registration.addRecipeTransferHandler(new TradingRecipeHandler(), TRAING_RECIPE); + //registration.addRecipeTransferHandler(new TradingRecipeHandler(), TRAING_RECIPE); //registration.addRecipeTransferHandler(TradingStationMenu.class, TradingStationRegistrate.MENU.get(), new RecipeType<>(TradingRecipeCategory.UID, TradingRecipe.class), 36, 2, 0, 36); } diff --git a/src/main/java/com/oierbravo/trading_station/content/trading_recipe/TradingRecipe.java b/src/main/java/com/oierbravo/trading_station/content/trading_recipe/TradingRecipe.java index fe87546..98aa2b2 100644 --- a/src/main/java/com/oierbravo/trading_station/content/trading_recipe/TradingRecipe.java +++ b/src/main/java/com/oierbravo/trading_station/content/trading_recipe/TradingRecipe.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; import javax.annotation.Nullable; +import java.util.ServiceLoader; public class TradingRecipe implements Recipe { private final ResourceLocation id; @@ -38,7 +39,7 @@ public class TradingRecipe implements Recipe { } @Override public boolean matches(SimpleContainer pContainer, Level pLevel) { - return matches(pContainer, pLevel, (Biome) null); + return matches(pContainer, pLevel, (Biome) null, ""); } public boolean matchesBiome(Biome biome, Level pLevel){ @@ -49,7 +50,7 @@ public class TradingRecipe implements Recipe { return exclusiveToCondition.test(targetedMachine); } - public boolean matches(SimpleContainer pContainer, Level pLevel, @Nullable Biome biome) { + public boolean matches(SimpleContainer pContainer, Level pLevel, @Nullable Biome biome, String traderType) { if(pLevel.isClientSide) return false; if(pContainer.getContainerSize() != itemIngredients.size()) @@ -57,6 +58,8 @@ public class TradingRecipe implements Recipe { if(!getBiomeCondition().test(biome,pLevel)) return false; + if(!getExclusiveToCondition().test(traderType)) + return false; int matchedIngredients = 0; for (int i = 0; i < itemIngredients.size(); i++) { @@ -69,10 +72,10 @@ public class TradingRecipe implements Recipe { } } - return matchedIngredients == itemIngredients.size(); + } - return false; + return matchedIngredients == itemIngredients.size(); } public boolean matches(SimpleContainer pContainer, Level pLevel, ItemStack preferedOutput){ @@ -133,6 +136,11 @@ public class TradingRecipe implements Recipe { public RecipeType getType() { return Type.INSTANCE; } + + public boolean matchesId(ResourceLocation pId) { + return id.equals(pId); + } + public static class Type implements RecipeType { private Type() { } public static final Type INSTANCE = new Type(); diff --git a/src/main/java/com/oierbravo/trading_station/content/trading_station/ITradingStationBlockEntity.java b/src/main/java/com/oierbravo/trading_station/content/trading_station/ITradingStationBlockEntity.java index 9090364..1b8e3f8 100644 --- a/src/main/java/com/oierbravo/trading_station/content/trading_station/ITradingStationBlockEntity.java +++ b/src/main/java/com/oierbravo/trading_station/content/trading_station/ITradingStationBlockEntity.java @@ -4,12 +4,12 @@ import com.oierbravo.trading_station.content.trading_recipe.TradingRecipe; import com.oierbravo.trading_station.network.packets.ItemStackSyncS2CPacket; import com.oierbravo.trading_station.registrate.ModRecipes; import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.SimpleContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.items.IItemHandler; @@ -45,6 +45,11 @@ public interface ITradingStationBlockEntity { String getTraderType(); + + String getTargetedRecipeId(); + + void setTargetedRecipeById(ResourceLocation recipeId); + enum REDSTONE_MODES { IGNORE, LOW, @@ -69,7 +74,7 @@ public interface ITradingStationBlockEntity { SimpleContainer inputInventory = getInputInventory(); if(!getTargetItemHandler().getStackInSlot(0).isEmpty()) return ModRecipes.findByOutput(level,getTargetItemHandler().getStackInSlot(0)); - return ModRecipes.find(inputInventory,level, getBiome()); + return ModRecipes.find(inputInventory,level, getBiome(), getTraderType()); }; default SimpleContainer getInputInventory(){ int containerSize = 0; diff --git a/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationBlockEntity.java b/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationBlockEntity.java index bb5b825..f923cdc 100644 --- a/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationBlockEntity.java +++ b/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationBlockEntity.java @@ -1,7 +1,6 @@ package com.oierbravo.trading_station.content.trading_station; import com.oierbravo.trading_station.content.trading_recipe.TradingRecipe; -import com.oierbravo.trading_station.foundation.util.ModLang; import com.oierbravo.trading_station.network.packets.ItemStackSyncS2CPacket; import com.oierbravo.trading_station.registrate.ModMessages; import com.oierbravo.trading_station.registrate.ModRecipes; @@ -20,7 +19,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.ContainerData; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; @@ -64,11 +62,14 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi byte currentRedstoneMode = 0; + Optional targetedRecipe; + public TradingStationBlockEntity(BlockEntityType pType, BlockPos pWorldPosition, BlockState pBlockState) { super(pType, pWorldPosition, pBlockState); updateTag = getPersistentData(); lastBlockState = this.getBlockState(); containerData = createContainerData(); + targetedRecipe = Optional.empty(); } public ContainerData createContainerData(){ return new ContainerData(){ @@ -223,6 +224,11 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi tag.putInt("trading_station.progress", progress); tag.putInt("trading_station.maxProgress", maxProgress); tag.putByte("redstoneMode", currentRedstoneMode); + String targetedRecipeId = ""; + if(targetedRecipe.isPresent()){ + targetedRecipeId = targetedRecipe.get().getId().toString(); + } + tag.putString("targetedRecipeId", targetedRecipeId); } @Override @@ -234,6 +240,7 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi progress = tag.getInt("trading_station.progress"); maxProgress = tag.getInt("trading_station.maxProgress"); currentRedstoneMode = tag.getByte("redstoneMode"); + setTargetedRecipeById(tag.getString("targetedRecipeId")); } public void drops() { @@ -421,6 +428,8 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi return "basic"; } + + @Override public Component getDisplayName() { return Component.translatable("block.trading_station.trading_station"); @@ -441,4 +450,34 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi return targetItemHandler.getStackInSlot(0); } public ItemStackHandler getTargetItemHandler(){ return targetItemHandler;} + + @Override + public void setTargetedRecipeById(ResourceLocation recipeId){ + Optional recipe = ModRecipes.findById(this.getLevel(),recipeId); + targetedRecipe = recipe; + if(recipe.isPresent()) { + targetItemHandler.setStackInSlot(0,recipe.get().getResultItem()); + } + + } + public void setTargetedRecipeById(String recipeId){ + Optional recipe = ModRecipes.findById(this.getLevel(), recipeId); + targetedRecipe = recipe; + if(recipe.isPresent()) { + targetItemHandler.setStackInSlot(0,recipe.get().getResultItem()); + } + setChanged(); + + } + @Nullable + public Optional getTargetedRecipe(){ + return targetedRecipe; + } + @Override + public String getTargetedRecipeId() { + if(!targetedRecipe.isPresent()){ + return ""; + } + return targetedRecipe.get().getId().toString(); + } } diff --git a/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationMenu.java b/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationMenu.java index 11c1e26..5aa1bca 100644 --- a/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationMenu.java +++ b/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationMenu.java @@ -27,7 +27,11 @@ public class TradingStationMenu extends AbstractTradingMenu { } @Override public boolean stillValid(Player pPlayer) { - return stillValid(ContainerLevelAccess.create(level, getBlockPos()), pPlayer, TradingStationRegistrate.BLOCK.get()); + if(stillValid(ContainerLevelAccess.create(level, getBlockPos()), pPlayer, TradingStationRegistrate.BLOCK.get())) + return true; + if(stillValid(ContainerLevelAccess.create(level, getBlockPos()), pPlayer, TradingStationRegistrate.BLOCK_UNBREAKABLE.get())) + return true; + return false; } @Override public Coords2D[] getInputSlotCoords() { @@ -37,6 +41,13 @@ public class TradingStationMenu extends AbstractTradingMenu { }; } @Override + public Coords2D[] getInputRecipeCoords() { + return new Coords2D[]{ + Coords2D.of(19,25), + Coords2D.of(42,25) + }; + } + @Override public Coords2D getOutputSlotCoords() { return Coords2D.of(131,49); } diff --git a/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationTargetSelectScreen.java b/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationTargetSelectScreen.java index 4d4b8a2..54628df 100644 --- a/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationTargetSelectScreen.java +++ b/src/main/java/com/oierbravo/trading_station/content/trading_station/TradingStationTargetSelectScreen.java @@ -3,11 +3,12 @@ package com.oierbravo.trading_station.content.trading_station; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.oierbravo.trading_station.TradingStation; +import com.oierbravo.trading_station.content.trading_recipe.TradingRecipe; import com.oierbravo.trading_station.foundation.util.ModLang; import com.oierbravo.trading_station.network.packets.GhostItemSyncC2SPacket; +import com.oierbravo.trading_station.network.packets.RecipeSelectC2SPacket; import com.oierbravo.trading_station.registrate.ModMessages; import com.oierbravo.trading_station.registrate.ModRecipes; -import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; @@ -29,8 +30,8 @@ import java.util.List; public class TradingStationTargetSelectScreen extends Screen { private static final ResourceLocation TEXTURE = TradingStation.asResource("textures/gui/trade_select.png"); private ITradingStationBlockEntity blockEntity; - private List allPossibleOutputs; - private LinkedList displayedItemStacks = new LinkedList<>(); + private List allPossibleRecipes; + private LinkedList displayedRecipes = new LinkedList<>(); private float scrollOffset; @@ -61,7 +62,8 @@ public class TradingStationTargetSelectScreen extends Screen { this(ModLang.translate("select_target.title")); this.blockEntity = pBlockEntity; this.blockPos = pBlockPos; - this.allPossibleOutputs = ModRecipes.getAllOutputs(pBlockEntity.getLevel(),pBlockEntity.getBiome(),pBlockEntity.getTraderType()); + //this.allPossibleRecipes = ModRecipes.getAllOutputs(pBlockEntity.getLevel(),pBlockEntity.getBiome(),pBlockEntity.getTraderType()); + this.allPossibleRecipes = ModRecipes.getAllRecipesForMachine(pBlockEntity.getLevel(),pBlockEntity.getBiome(),pBlockEntity.getTraderType()); resetDisplayedTargets(); } @@ -91,11 +93,11 @@ public class TradingStationTargetSelectScreen extends Screen { public int getGuiTop() { return topPos; } @Override public void tick() { - if (displayedItemStacks.size() < MAX_DISPLAYED_RECIPES) { + if (displayedRecipes.size() < MAX_DISPLAYED_RECIPES) { mouseScrolled(0, 0, 0); scrollOffset = 0.0f; } - if (displayedItemStacks.size() <= MAX_DISPLAYED_RECIPES) { + if (displayedRecipes.size() <= MAX_DISPLAYED_RECIPES) { startIndex = 0; scrollOffset = 0; } @@ -109,8 +111,8 @@ public class TradingStationTargetSelectScreen extends Screen { int lastDisplayedIndex = startIndex + MAX_DISPLAYED_RECIPES; renderScrollbar(pPoseStack); - renderSelectedTarget(pPoseStack, pMouseX, pMouseY, lastDisplayedIndex); - renderTargetItems(pPoseStack, pMouseX, pMouseY, lastDisplayedIndex); + renderSelectedRecipe(pPoseStack, pMouseX, pMouseY, lastDisplayedIndex); + renderRecipe(pPoseStack, pMouseX, pMouseY, lastDisplayedIndex); renderLabels(pPoseStack, pMouseX, pMouseY); super.render(pPoseStack, pMouseX, pMouseY, pPartialTick); @@ -118,39 +120,40 @@ public class TradingStationTargetSelectScreen extends Screen { protected void renderLabels(PoseStack pPoseStack, int pMouseX, int pMouseY) { this.font.draw(pPoseStack, this.title, (float)this.titleLabelX + getGuiLeft(), (float)this.titleLabelY + getGuiTop(), 4210752); } - private void renderSelectedTarget(PoseStack pPoseStack, int pMouseX, int pMouseY, int pLastDisplayedIndex) { - LinkedList displayedRecipes = getDisplayedItemStacks(); - ItemStack selectedTarget = this.blockEntity.getTargetItemHandler().getStackInSlot(0); + private void renderSelectedRecipe(PoseStack pPoseStack, int pMouseX, int pMouseY, int pLastDisplayedIndex) { + LinkedList displayedRecipes = getDisplayedRecipes(); for (int index = startIndex; index >= 0 && index < pLastDisplayedIndex && index < displayedRecipes.size(); index++) { int firstDisplayedIndex = index - startIndex; - ItemStack target = allPossibleOutputs.get(index); + TradingRecipe target = allPossibleRecipes.get(index); int xStart = getGuiLeft() + targetBoxLeftPosOffset + firstDisplayedIndex % COLUMNS * TARGET_BOX_SIZE + 1; int yStart = getGuiTop() + targetBoxTopPosOffset + (firstDisplayedIndex / COLUMNS) * TARGET_BOX_SIZE + 3; - if(ItemStack.isSameItemSameTags(selectedTarget, target )) + if(target.getId().toString().equals(this.blockEntity.getTargetedRecipeId())) blit(pPoseStack, xStart, yStart, 0, imageHeight + 19, TARGET_BOX_SIZE, TARGET_BOX_SIZE); } } - private void renderTargetItems(PoseStack pPoseStack, int pMouseX, int pMouseY, int pLastDisplayedIndex) { - LinkedList displayedRecipes = getDisplayedItemStacks(); + private void renderRecipe(PoseStack pPoseStack, int pMouseX, int pMouseY, int pLastDisplayedIndex) { + LinkedList displayedRecipes = getDisplayedRecipes(); for (int index = startIndex; index >= 0 && index < pLastDisplayedIndex && index < displayedRecipes.size(); index++) { int firstDisplayedIndex = index - startIndex; - ItemStack target = allPossibleOutputs.get(index); + TradingRecipe target = allPossibleRecipes.get(index); int xStart = getGuiLeft() + targetBoxLeftPosOffset + firstDisplayedIndex % COLUMNS * TARGET_BOX_SIZE + 1; int yStart = getGuiTop() + targetBoxTopPosOffset + (firstDisplayedIndex / COLUMNS) * TARGET_BOX_SIZE + 3; - - renderFloatingItem(target, xStart, yStart ); + // if(target.getId().toString().equals(this.blockEntity.getTargetedRecipeId())){ + // blit(pPoseStack, xStart, yStart, 0, imageHeight + 19, TARGET_BOX_SIZE, TARGET_BOX_SIZE); + // } + renderFloatingItem(target.getResultItem(), xStart, yStart ); if (pMouseX >= xStart - 1 && pMouseX <= xStart + 16 && pMouseY >= yStart - 1 && pMouseY <= yStart + 16) { - renderTooltip(pPoseStack, target, pMouseX, pMouseY); + renderTooltip(pPoseStack, target.getResultItem(), pMouseX, pMouseY); } } } - private LinkedList getDisplayedItemStacks() { - return displayedItemStacks; + private LinkedList getDisplayedRecipes() { + return displayedRecipes; } private void renderFloatingItem(ItemStack pItemStack, int pX, int pY) { @@ -192,8 +195,9 @@ public class TradingStationTargetSelectScreen extends Screen { double boxY = pMouseY - (double)(getGuiTop() + targetBoxTopPosOffset + currentIndex / COLUMNS * TARGET_BOX_SIZE); if (boxX > 0 && boxX <= TARGET_BOX_SIZE + 1 && boxY > 0 && boxY <= TARGET_BOX_SIZE + 1 && isValidRecipeIndex(index)) { - ItemStack itemStack = getDisplayedItemStacks().get(index); - ModMessages.sendToServer(new GhostItemSyncC2SPacket(itemStack,getBlockPos())); + TradingRecipe recipe = getDisplayedRecipes().get(index); + //ModMessages.sendToServer(new GhostItemSyncC2SPacket(itemStack,getBlockPos())); + ModMessages.sendToServer(new RecipeSelectC2SPacket(recipe.getId(),getBlockPos())); Minecraft.getInstance().getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_STONECUTTER_SELECT_RECIPE, 1.0f)); Minecraft.getInstance().popGuiLayer(); return true; @@ -211,15 +215,15 @@ public class TradingStationTargetSelectScreen extends Screen { return super.mouseClicked(pMouseX, pMouseY, pButton); } private boolean isValidRecipeIndex(int pSlot) { - return pSlot >= 0 && pSlot < getDisplayedItemStacks().size(); + return pSlot >= 0 && pSlot < getDisplayedRecipes().size(); } @Override public boolean isPauseScreen() { return false; } public void resetDisplayedTargets() { - this.displayedItemStacks.clear(); - this.displayedItemStacks.addAll(allPossibleOutputs); + this.displayedRecipes.clear(); + this.displayedRecipes.addAll(allPossibleRecipes); } @Override @@ -245,10 +249,10 @@ public class TradingStationTargetSelectScreen extends Screen { return true; } private int getOffscreenRows() { - return (displayedItemStacks.size() + 6 - 1) / 6 - 3; + return (displayedRecipes.size() + 6 - 1) / 6 - 3; } private boolean isScrollBarActive() { - return displayedItemStacks.size() > MAX_DISPLAYED_RECIPES; + return displayedRecipes.size() > MAX_DISPLAYED_RECIPES; } } diff --git a/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationConfig.java b/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationConfig.java index b4016c1..72ec2c2 100644 --- a/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationConfig.java +++ b/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationConfig.java @@ -18,9 +18,9 @@ public class PoweredTradingStationConfig { .defineInRange("energyCapacity", 64000, 1, Integer.MAX_VALUE); ENERGY_TRANSFER = COMMON_BUILDER .comment("How much energy can transfer") - .defineInRange("energyTransfer", 200, 1, Integer.MAX_VALUE); + .defineInRange("energyTransfer", 2000, 1, Integer.MAX_VALUE); ENERGY_PER_TICK = COMMON_BUILDER - .comment("How much energy can transfer") + .comment("How much energy consumens per tick") .defineInRange("energyPerTick", 1000, 1, Integer.MAX_VALUE); COMMON_BUILDER.pop(); } diff --git a/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationMenu.java b/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationMenu.java index dd1f594..60f75c5 100644 --- a/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationMenu.java +++ b/src/main/java/com/oierbravo/trading_station/content/trading_station/powered/PoweredTradingStationMenu.java @@ -26,7 +26,11 @@ public class PoweredTradingStationMenu extends AbstractTradingMenu { } @Override public boolean stillValid(Player pPlayer) { - return stillValid(ContainerLevelAccess.create(level, getBlockPos()), pPlayer, PoweredTradingStationRegistrate.BLOCK.get()); + if(stillValid(ContainerLevelAccess.create(level, getBlockPos()), pPlayer, PoweredTradingStationRegistrate.BLOCK.get())) + return true; + if(stillValid(ContainerLevelAccess.create(level, getBlockPos()), pPlayer, PoweredTradingStationRegistrate.BLOCK_UNBREAKABLE.get())) + return true; + return false; } @Override public Coords2D[] getInputSlotCoords() { @@ -35,6 +39,14 @@ public class PoweredTradingStationMenu extends AbstractTradingMenu { Coords2D.of(51,47) }; } + + @Override + public Coords2D[] getInputRecipeCoords() { + return new Coords2D[]{ + Coords2D.of(28,20), + Coords2D.of(51,20) + }; + } @Override public Coords2D getOutputSlotCoords() { return Coords2D.of(131,47); diff --git a/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingMenu.java b/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingMenu.java index 4b4ef69..59081d0 100644 --- a/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingMenu.java +++ b/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingMenu.java @@ -55,6 +55,7 @@ public abstract class AbstractTradingMenu extends AbstractContainerMenu { public abstract Coords2D getOutputSlotCoords(); public abstract Coords2D getTargetSlotCoords(); + public abstract Coords2D[] getInputRecipeCoords(); @Override public abstract boolean stillValid(Player pPlayer); diff --git a/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingScreen.java b/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingScreen.java index 7cbb045..2eec83c 100644 --- a/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingScreen.java +++ b/src/main/java/com/oierbravo/trading_station/foundation/gui/AbstractTradingScreen.java @@ -4,30 +4,24 @@ import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.oierbravo.trading_station.TradingStation; import com.oierbravo.trading_station.content.trading_recipe.TradingRecipe; -import com.oierbravo.trading_station.content.trading_station.TradingStationScreen; import com.oierbravo.trading_station.content.trading_station.TradingStationTargetSelectScreen; import com.oierbravo.trading_station.foundation.render.FakeItemRenderer; -import com.oierbravo.trading_station.foundation.render.LaserIOItemRenderer; import com.oierbravo.trading_station.foundation.util.MiscTools; import com.oierbravo.trading_station.foundation.util.ModLang; import com.oierbravo.trading_station.foundation.util.MouseUtil; -import com.oierbravo.trading_station.network.packets.GhostItemSyncC2SPacket; import com.oierbravo.trading_station.network.packets.RedstoneModeSyncC2SPacket; import com.oierbravo.trading_station.registrate.ModMessages; import com.oierbravo.trading_station.registrate.ModRecipes; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.level.Level; import net.minecraftforge.client.gui.widget.ExtendedButton; import java.util.HashMap; @@ -100,15 +94,21 @@ public abstract class AbstractTradingScreen ex private void renderSlotPlaceholder(PoseStack pPoseStack, int pX, int pY){ this.blit(pPoseStack, pX , pY , 0, 164,18, 18); + } + + private void renderInputRecipePlaceholder(PoseStack pPoseStack, int pX, int pY){ + this.blit(pPoseStack, pX , pY , 18, 146,18, 23); + } private void renderFakeRecipe(TradingRecipe recipe, PoseStack pPoseStack){ for(int index = 0; index < recipe.getIngredients().size(); index++){ Ingredient ingredient = recipe.getIngredients().get(index); if(!ingredient.isEmpty()) - renderItem(ingredient.getItems()[0],getGuiLeft() + this.menu.getInputSlotCoords()[index].x,getGuiTop() + this.menu.getInputSlotCoords()[index].y); + renderInputRecipePlaceholder(pPoseStack, getGuiLeft() + this.menu.getInputRecipeCoords()[index].x, getGuiTop() + this.menu.getInputRecipeCoords()[index].y); + renderItem(ingredient.getItems()[0],getGuiLeft() + this.menu.getInputRecipeCoords()[index].x + 1,getGuiTop() + this.menu.getInputRecipeCoords()[index].y + 1); } - renderItem(recipe.getResultItem(),getGuiLeft() + this.menu.getOutputSlotCoords().x,getGuiTop() + this.menu.getOutputSlotCoords().y); + //renderItem(recipe.getResultItem(),getGuiLeft() + this.menu.getOutputSlotCoords().x,getGuiTop() + this.menu.getOutputSlotCoords().y); } diff --git a/src/main/java/com/oierbravo/trading_station/foundation/gui/RecipeRenderer.java b/src/main/java/com/oierbravo/trading_station/foundation/gui/RecipeRenderer.java new file mode 100644 index 0000000..8633606 --- /dev/null +++ b/src/main/java/com/oierbravo/trading_station/foundation/gui/RecipeRenderer.java @@ -0,0 +1,4 @@ +package com.oierbravo.trading_station.foundation.gui; + +public class RecipeRenderer { +} diff --git a/src/main/java/com/oierbravo/trading_station/foundation/render/FakeItemRenderer.java b/src/main/java/com/oierbravo/trading_station/foundation/render/FakeItemRenderer.java index 42edd48..b177ba1 100644 --- a/src/main/java/com/oierbravo/trading_station/foundation/render/FakeItemRenderer.java +++ b/src/main/java/com/oierbravo/trading_station/foundation/render/FakeItemRenderer.java @@ -84,7 +84,7 @@ public class FakeItemRenderer { } } - private static MultiBufferSource getWrappedBuffer(MultiBufferSource pBufferSource, float pAlpha) { + public static MultiBufferSource getWrappedBuffer(MultiBufferSource pBufferSource, float pAlpha) { return pRenderType -> new WrappedVertexConsumer(pBufferSource.getBuffer(RenderType.entityTranslucentCull(InventoryMenu.BLOCK_ATLAS)), 1F, 1F, 1F, pAlpha); } diff --git a/src/main/java/com/oierbravo/trading_station/foundation/util/ModLang.java b/src/main/java/com/oierbravo/trading_station/foundation/util/ModLang.java index 6e94b7d..fff26f7 100644 --- a/src/main/java/com/oierbravo/trading_station/foundation/util/ModLang.java +++ b/src/main/java/com/oierbravo/trading_station/foundation/util/ModLang.java @@ -1,7 +1,6 @@ package com.oierbravo.trading_station.foundation.util; import com.oierbravo.trading_station.TradingStation; -import com.simibubi.create.foundation.utility.LangBuilder; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -19,9 +18,9 @@ public class ModLang { } public static Object[] resolveBuilders(Object[] args) { - for (int i = 0; i < args.length; i++) - if (args[i]instanceof LangBuilder cb) - args[i] = cb.component(); + // for (int i = 0; i < args.length; i++) + // if (args[i]instanceof LangBuilder cb) + // args[i] = cb.component(); return args; } } diff --git a/src/main/java/com/oierbravo/trading_station/network/packets/RecipeSelectC2SPacket.java b/src/main/java/com/oierbravo/trading_station/network/packets/RecipeSelectC2SPacket.java new file mode 100644 index 0000000..b3434b8 --- /dev/null +++ b/src/main/java/com/oierbravo/trading_station/network/packets/RecipeSelectC2SPacket.java @@ -0,0 +1,53 @@ +package com.oierbravo.trading_station.network.packets; + +import com.oierbravo.trading_station.content.trading_station.ITradingStationBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class RecipeSelectC2SPacket { + + private final ResourceLocation recipeId; + private final BlockPos pos; + + + public RecipeSelectC2SPacket(ResourceLocation recipeId, BlockPos pos) { + this.recipeId = recipeId; + this.pos = pos; + } + + public RecipeSelectC2SPacket(FriendlyByteBuf buf) { + this.recipeId = buf.readResourceLocation(); + this.pos = buf.readBlockPos(); + } + public void toBytes(FriendlyByteBuf buf) { + buf.writeResourceLocation(recipeId); + buf.writeBlockPos(pos); + + } + public static void handle(RecipeSelectC2SPacket message, Supplier supplier) { + NetworkEvent.Context context = supplier.get(); + + context.enqueueWork(() -> { + ServerPlayer sender = context.getSender(); + if (sender == null) + return; + + AbstractContainerMenu container = sender.containerMenu; + if (container == null) + return; + + if(sender.getLevel().getBlockEntity(message.pos) instanceof ITradingStationBlockEntity blockEntity) { + blockEntity.setTargetedRecipeById(message.recipeId); + //blockEntity.setChanged(); + + } + }); + context.setPacketHandled(true); + } +} diff --git a/src/main/java/com/oierbravo/trading_station/registrate/MechanicalTradingStationRegistrate.java b/src/main/java/com/oierbravo/trading_station/registrate/MechanicalTradingStationRegistrate.java deleted file mode 100644 index 638ac7c..0000000 --- a/src/main/java/com/oierbravo/trading_station/registrate/MechanicalTradingStationRegistrate.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.oierbravo.trading_station.registrate; - -import com.oierbravo.trading_station.TradingStation; -import com.oierbravo.trading_station.content.trading_station.TradingStationBlockRenderer; -import com.oierbravo.trading_station.content.trading_station.powered.PoweredTradingStationBlock; -import com.oierbravo.trading_station.content.trading_station.powered.PoweredTradingStationBlockEntity; -import com.oierbravo.trading_station.content.trading_station.powered.PoweredTradingStationMenu; -import com.oierbravo.trading_station.content.trading_station.powered.PoweredTradingStationScreen; -import com.tterrag.registrate.util.entry.BlockEntityEntry; -import com.tterrag.registrate.util.entry.BlockEntry; -import com.tterrag.registrate.util.entry.MenuEntry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraftforge.client.model.generators.ConfiguredModel; - -public class MechanicalTradingStationRegistrate { - /*public static final BlockEntry POWERED_TRADING_STATION_BLOCK = TradingStation.registrate() - .block("powered_trading_station", PoweredTradingStationBlock::new) - .lang("Powered Trading Station") - .blockstate((ctx, prov) -> - prov.getVariantBuilder(ctx.getEntry()).forAllStates(state -> { - String modelFileName = "trading_station:block/powered_trading_station"; - if(state.getValue(BlockStateProperties.POWERED)) - modelFileName += "_powered"; - return ConfiguredModel.builder().modelFile(prov.models().getExistingFile(ResourceLocation.tryParse(modelFileName))) - .rotationY(((int) state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() + 180) % 360).build(); - - }) - ) - .simpleItem() - .blockEntity(PoweredTradingStationBlockEntity::new) - .build() - .register(); - - public static final BlockEntityEntry POWERED_TRADING_STATION_BLOCK_ENTITY = TradingStation.registrate() - .blockEntity("powered_trading_station", PoweredTradingStationBlockEntity::new) - .validBlocks(POWERED_TRADING_STATION_BLOCK) - .renderer(() -> TradingStationBlockRenderer::new) - .register(); - - public static final MenuEntry POWERED_TRADING_STATION_MENU = TradingStation.registrate() - .menu("powered_trading_station", PoweredTradingStationMenu::factory, () -> PoweredTradingStationScreen::new) - .register();*/ - public static void register() { - - } -} diff --git a/src/main/java/com/oierbravo/trading_station/registrate/ModMessages.java b/src/main/java/com/oierbravo/trading_station/registrate/ModMessages.java index e5e271c..7763b28 100644 --- a/src/main/java/com/oierbravo/trading_station/registrate/ModMessages.java +++ b/src/main/java/com/oierbravo/trading_station/registrate/ModMessages.java @@ -3,6 +3,7 @@ package com.oierbravo.trading_station.registrate; import com.oierbravo.trading_station.TradingStation; import com.oierbravo.trading_station.network.packets.GhostItemSyncC2SPacket; import com.oierbravo.trading_station.network.packets.ItemStackSyncS2CPacket; +import com.oierbravo.trading_station.network.packets.RecipeSelectC2SPacket; import com.oierbravo.trading_station.network.packets.RedstoneModeSyncC2SPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; @@ -48,6 +49,12 @@ public class ModMessages { .consumerMainThread(RedstoneModeSyncC2SPacket::handle) .add(); + net.messageBuilder(RecipeSelectC2SPacket.class, id(), NetworkDirection.PLAY_TO_SERVER) + .decoder(RecipeSelectC2SPacket::new) + .encoder(RecipeSelectC2SPacket::toBytes) + .consumerMainThread(RecipeSelectC2SPacket::handle) + .add(); + } public static void sendToServer(MSG message) { diff --git a/src/main/java/com/oierbravo/trading_station/registrate/ModRecipes.java b/src/main/java/com/oierbravo/trading_station/registrate/ModRecipes.java index 633db7e..4fb4d6d 100644 --- a/src/main/java/com/oierbravo/trading_station/registrate/ModRecipes.java +++ b/src/main/java/com/oierbravo/trading_station/registrate/ModRecipes.java @@ -2,6 +2,8 @@ package com.oierbravo.trading_station.registrate; import com.oierbravo.trading_station.TradingStation; import com.oierbravo.trading_station.content.trading_recipe.TradingRecipe; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.SimpleContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeSerializer; @@ -15,6 +17,7 @@ import net.minecraftforge.registries.RegistryObject; import javax.annotation.Nullable; import java.util.List; +import java.util.Objects; import java.util.Optional; public class ModRecipes { @@ -39,10 +42,24 @@ public class ModRecipes { return Optional.empty(); return pLevel.getRecipeManager().getAllRecipesFor(TradingRecipe.Type.INSTANCE).stream() .filter((tradingRecipe -> tradingRecipe.matchesBiome(biome, pLevel))) - .findAny(); + .findFirst(); } + public static Optional find(SimpleContainer pInv, Level pLevel,@Nullable Biome biome, String traderType) { + if(pLevel.isClientSide()) + return Optional.empty(); + return pLevel.getRecipeManager().getAllRecipesFor(TradingRecipe.Type.INSTANCE).stream() + .filter((tradingRecipe -> tradingRecipe.matches(pInv, pLevel, biome, traderType))) + .findFirst(); + } + public static List getAllRecipesForMachine(Level pLevel, Biome biome, String machineType) { + return pLevel.getRecipeManager().getAllRecipesFor(TradingRecipe.Type.INSTANCE).stream() + .filter((tradingRecipe -> tradingRecipe.matchesBiome(biome, pLevel))) + .filter((tradingRecipe -> tradingRecipe.matchesExclusiveTo(machineType))) + .sorted((recipe1, recipe2) -> recipe1.getId().compareNamespaced(recipe2.getId())) + .toList(); + } public static List getAllOutputs(Level pLevel,@Nullable Biome biome, String machineType){ return pLevel.getRecipeManager().getAllRecipesFor(TradingRecipe.Type.INSTANCE).stream() .filter((tradingRecipe -> tradingRecipe.matchesBiome(biome, pLevel))) @@ -63,4 +80,23 @@ public class ModRecipes { RECIPE_TYPES.register(eventBus); } + + + public static Optional findById(Level pLevel, ResourceLocation recipeId) { + if(pLevel.isClientSide()) + return Optional.empty(); + return Minecraft.getInstance().level.getRecipeManager(). getAllRecipesFor(TradingRecipe.Type.INSTANCE).stream() + .filter(tradingRecipe -> tradingRecipe.matchesId(recipeId)) + .findFirst(); + } + public static Optional findById(Level pLevel,String pRecipeId) { + if(pLevel == null) + return Optional.empty(); + if(pLevel.isClientSide()) + return Optional.empty(); + if(Objects.equals(pRecipeId, "")) + return Optional.empty(); + ResourceLocation recipeId = ResourceLocation.tryParse(pRecipeId); + return findById(pLevel, recipeId); + } } diff --git a/src/main/java/com/oierbravo/trading_station/registrate/PoweredTradingStationRegistrate.java b/src/main/java/com/oierbravo/trading_station/registrate/PoweredTradingStationRegistrate.java index 52fd67b..43ee37f 100644 --- a/src/main/java/com/oierbravo/trading_station/registrate/PoweredTradingStationRegistrate.java +++ b/src/main/java/com/oierbravo/trading_station/registrate/PoweredTradingStationRegistrate.java @@ -33,10 +33,30 @@ public class PoweredTradingStationRegistrate { .blockEntity(PoweredTradingStationBlockEntity::new) .build() .register(); + public static final BlockEntry BLOCK_UNBREAKABLE = TradingStation.registrate() + .block("powered_trading_station_unbreakable", PoweredTradingStationBlock::new) + .lang("Powered Trading Station (Unbreakable)") + .properties((ctx)-> ctx.strength(-1.0f, 3_600_000.0f)) + .blockstate((ctx, prov) -> + prov.getVariantBuilder(ctx.getEntry()).forAllStates(state -> { + String modelFileName = "trading_station:block/powered_trading_station"; + if(state.getValue(BlockStateProperties.POWERED)) + modelFileName += "_powered"; + if(state.getValue(BlockStateProperties.LIT)) + modelFileName += "_lit"; + return ConfiguredModel.builder().modelFile(prov.models().getExistingFile(ResourceLocation.tryParse(modelFileName))) + .rotationY(((int) state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() + 180) % 360).build(); + + }) + ) + .simpleItem() + .blockEntity(PoweredTradingStationBlockEntity::new) + .build() + .register(); public static final BlockEntityEntry BLOCK_ENTITY = TradingStation.registrate() .blockEntity("powered_trading_station", PoweredTradingStationBlockEntity::new) - .validBlocks(BLOCK) + .validBlocks(BLOCK, BLOCK_UNBREAKABLE) .renderer(() -> TradingStationBlockRenderer::new) .register(); diff --git a/src/main/java/com/oierbravo/trading_station/registrate/TradingStationRegistrate.java b/src/main/java/com/oierbravo/trading_station/registrate/TradingStationRegistrate.java index 0537788..985bb1e 100644 --- a/src/main/java/com/oierbravo/trading_station/registrate/TradingStationRegistrate.java +++ b/src/main/java/com/oierbravo/trading_station/registrate/TradingStationRegistrate.java @@ -33,9 +33,29 @@ public class TradingStationRegistrate { .blockEntity(TradingStationBlockEntity::new) .build() .register(); + public static final BlockEntry BLOCK_UNBREAKABLE = TradingStation.registrate() + .block("trading_station_unbreakable", TradingStationBlock::new) + .lang("Trading Station (Unbreakable)") + .properties((ctx)-> ctx.strength(-1.0f, 3_600_000.0f)) + .blockstate((ctx, prov) -> + prov.getVariantBuilder(ctx.getEntry()).forAllStates(state -> { + String modelFileName = "trading_station:block/trading_station"; + if(state.getValue(BlockStateProperties.POWERED)) + modelFileName += "_powered"; + if(state.getValue(BlockStateProperties.LIT)) + modelFileName += "_lit"; + return ConfiguredModel.builder().modelFile(prov.models().getExistingFile(ResourceLocation.tryParse(modelFileName))) + .rotationY(((int) state.getValue(BlockStateProperties.HORIZONTAL_FACING).toYRot() + 180) % 360).build(); + + }) + ) + .simpleItem() + .blockEntity(TradingStationBlockEntity::new) + .build() + .register(); public static final BlockEntityEntry BLOCK_ENTITY = REGISTRATE .blockEntity("trading_station", TradingStationBlockEntity::new) - .validBlocks(BLOCK) + .validBlocks(BLOCK, BLOCK_UNBREAKABLE) .renderer(() -> TradingStationBlockRenderer::new) .register(); diff --git a/src/main/resources/assets/trading_station/models/block/powered_trading_station.json b/src/main/resources/assets/trading_station/models/block/powered_trading_station.json index 2f6b92c..eb9cf69 100644 --- a/src/main/resources/assets/trading_station/models/block/powered_trading_station.json +++ b/src/main/resources/assets/trading_station/models/block/powered_trading_station.json @@ -3,7 +3,7 @@ "parent": "trading_station:block/trading_station", "textures": { "base": "trading_station:block/powered_trading_station", - "back": "trading_station:block/powered_trading_station_base", + "back": "trading_station:block/powered_trading_station_back", "particle": "trading_station:block/powered_trading_station_base" } } \ No newline at end of file diff --git a/src/main/resources/assets/trading_station/models/block/powered_trading_station_unbreakable.json b/src/main/resources/assets/trading_station/models/block/powered_trading_station_unbreakable.json new file mode 100644 index 0000000..2d0216f --- /dev/null +++ b/src/main/resources/assets/trading_station/models/block/powered_trading_station_unbreakable.json @@ -0,0 +1,4 @@ +{ + "credit": "Made with Blockbench", + "parent": "trading_station:block/powered_trading_station" +} \ No newline at end of file diff --git a/src/main/resources/assets/trading_station/models/block/trading_station_unbreakable.json b/src/main/resources/assets/trading_station/models/block/trading_station_unbreakable.json new file mode 100644 index 0000000..cd17d1f --- /dev/null +++ b/src/main/resources/assets/trading_station/models/block/trading_station_unbreakable.json @@ -0,0 +1,4 @@ +{ + "credit": "Made with Blockbench", + "parent": "trading_station:block/trading_station" +} \ No newline at end of file diff --git a/src/main/resources/assets/trading_station/textures/block/mechanical_trading_station_back..png b/src/main/resources/assets/trading_station/textures/block/mechanical_trading_station_back..png new file mode 100644 index 0000000..87a242d Binary files /dev/null and b/src/main/resources/assets/trading_station/textures/block/mechanical_trading_station_back..png differ diff --git a/src/main/resources/assets/trading_station/textures/gui/trading_station.png b/src/main/resources/assets/trading_station/textures/gui/trading_station.png index 60b7791..ced1b10 100644 Binary files a/src/main/resources/assets/trading_station/textures/gui/trading_station.png and b/src/main/resources/assets/trading_station/textures/gui/trading_station.png differ