diff --git a/README.md b/README.md index 766268d..f1f4a3a 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ Trading Station ---------------- +============= Made for modpacks. It doesn't add any recipe. Features -======== +-------- + - Basic station with no power requirements. - Powered station with RF power requirements. - Custom *Trading recipe* @@ -13,7 +14,8 @@ Features - Mechanical station available with companion mod. - Trading recipe -============== +--------------- + - `ingredients` (required). An array/list of 1 or 2 ingredients. - `result` (required). Single output item/block - `processingTime` (optional). Ticks required to process. Default to 1. Powered machine has a 5x speed. @@ -30,7 +32,7 @@ Trading recipe KubeJS 6.1 Integration -====================== +---------------------- ``` ServerEvents.recipes(event => { /** diff --git a/build.gradle b/build.gradle index a524a0a..73b0b39 100644 --- a/build.gradle +++ b/build.gradle @@ -31,8 +31,8 @@ apply plugin: 'maven-publish' jarJar.enable() group = "com.${author}.${modid}" -version = "${mod_version}" -archivesBaseName = "${modid}-${minecraft_version}" +version = "${minecraft_version}-${mod_version}" +archivesBaseName = "${modid}" java.toolchain.languageVersion = JavaLanguageVersion.of(17) @@ -260,7 +260,7 @@ tasks.jarJar { } void addLicense(jarTask) { jarTask.from('LICENSE.txt') { - rename { "${it}_${project.archivesBaseName}" } + rename { "${it}" } } } addLicense(jar) 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 1b8e3f8..8737ecd 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 @@ -10,6 +10,7 @@ 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.entity.BlockEntity; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.items.IItemHandler; @@ -28,8 +29,6 @@ public interface ITradingStationBlockEntity { ItemStack getTargetItemStack(); - Level getLevel(); - BlockPos getBlockPos(); void setPreferedItem(ItemStack itemStack); @@ -63,19 +62,11 @@ public interface ITradingStationBlockEntity { boolean canProcess(ItemStack stack); void resetProgress(); - default int getProcessingTime(){ - return getRecipe().map(TradingRecipe::getProcessingTime).orElse(1); - } + int getProcessingTime(); default int getProgressPercent() { return progress * 100 / maxProgress; } - default Optional getRecipe(){ - Level level = this.getLevel(); - SimpleContainer inputInventory = getInputInventory(); - if(!getTargetItemHandler().getStackInSlot(0).isEmpty()) - return ModRecipes.findByOutput(level,getTargetItemHandler().getStackInSlot(0)); - return ModRecipes.find(inputInventory,level, getBiome(), getTraderType()); - }; + default SimpleContainer getInputInventory(){ int containerSize = 0; for(int index = 0; index < getInputItems().getSlots(); index++) { @@ -93,28 +84,7 @@ public interface ITradingStationBlockEntity { }); return inputInventory; } - default void craftItem() { - SimpleContainer inputInventory = getInputInventory(); - - Optional recipe = getRecipe(); - - if(recipe.isPresent()){ - for (int i = 0; i < recipe.get().getIngredients().size(); i++) { - Ingredient ingredient = recipe.get().getIngredients().get(i); - - for (int slot = 0; slot < getInputItems().getSlots(); slot++) { - ItemStack itemStack = getInputItems().getStackInSlot(slot); - if(ingredient.test(itemStack)){ - getInputItems().extractItem(slot,ingredient.getItems()[0].getCount(),false); - inputInventory.setChanged(); - } - } - } - getOutputItems().insertItem(0, recipe.get().getResultItem(), false); - } - - this.resetProgress(); - } + void craftItem(); ItemStackHandler getInputItems(); ItemStackHandler getOutputItems(); @@ -122,7 +92,5 @@ public interface ITradingStationBlockEntity { byte getCurrentRedstoneMode(); boolean isPowered(); - default Biome getBiome(){ - return this.getLevel().getBiome(getBlockPos()).get(); - } + Biome getBiome(); } 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 f923cdc..443576a 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 @@ -22,6 +22,7 @@ import net.minecraft.world.inventory.ContainerData; 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.AbstractFurnaceBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -290,16 +291,9 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi isWorking = value; BlockState pState = getBlockState().setValue(AbstractFurnaceBlock.LIT, Boolean.valueOf(isWorking())); -// if(lastBlockState.getValue(BlockStateProperties.LIT) != pState.getValue(BlockStateProperties.LIT)){ - // lastBlockState = pState; getLevel().setBlock(getBlockPos(), pState, 3); setChanged(getLevel(), getBlockPos(), pState); - - //} - - } - - + } } private boolean isWorking() { @@ -386,6 +380,30 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi return this.progress * 100 / this.maxProgress; } + @Override + public void craftItem() { + SimpleContainer inputInventory = getInputInventory(); + + Optional recipe = getRecipe(); + + if(recipe.isPresent()){ + for (int i = 0; i < recipe.get().getIngredients().size(); i++) { + Ingredient ingredient = recipe.get().getIngredients().get(i); + + for (int slot = 0; slot < getInputItems().getSlots(); slot++) { + ItemStack itemStack = getInputItems().getStackInSlot(slot); + if(ingredient.test(itemStack)){ + getInputItems().extractItem(slot,ingredient.getItems()[0].getCount(),false); + inputInventory.setChanged(); + } + } + } + getOutputItems().insertItem(0, recipe.get().getResultItem(), false); + } + + this.resetProgress(); + } + @Override public ItemStackHandler getInputItems() { return inputItems; @@ -480,4 +498,19 @@ public class TradingStationBlockEntity extends BlockEntity implements MenuProvi } return targetedRecipe.get().getId().toString(); } + + @Override + public Biome getBiome() { + return this.getLevel().getBiome(getBlockPos()).get(); + } + protected Optional getRecipe(){ + SimpleContainer inputInventory = getInputInventory(); + if(!getTargetItemHandler().getStackInSlot(0).isEmpty()) + return ModRecipes.findByOutput(level,getTargetItemHandler().getStackInSlot(0)); + return ModRecipes.find(inputInventory,level, getBiome(), getTraderType()); + }; + + public int getProcessingTime(){ + return getRecipe().map(TradingRecipe::getProcessingTime).orElse(1); + } } 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 54628df..a73808b 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 @@ -63,7 +63,7 @@ public class TradingStationTargetSelectScreen extends Screen { this.blockEntity = pBlockEntity; this.blockPos = pBlockPos; //this.allPossibleRecipes = ModRecipes.getAllOutputs(pBlockEntity.getLevel(),pBlockEntity.getBiome(),pBlockEntity.getTraderType()); - this.allPossibleRecipes = ModRecipes.getAllRecipesForMachine(pBlockEntity.getLevel(),pBlockEntity.getBiome(),pBlockEntity.getTraderType()); + this.allPossibleRecipes = ModRecipes.getAllRecipesForMachine(Minecraft.getInstance().level,pBlockEntity.getBiome(),pBlockEntity.getTraderType()); resetDisplayedTargets(); } 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 72ec2c2..b3b5204 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 @@ -21,7 +21,7 @@ public class PoweredTradingStationConfig { .defineInRange("energyTransfer", 2000, 1, Integer.MAX_VALUE); ENERGY_PER_TICK = COMMON_BUILDER .comment("How much energy consumens per tick") - .defineInRange("energyPerTick", 1000, 1, Integer.MAX_VALUE); + .defineInRange("energyPerTick", 500, 1, Integer.MAX_VALUE); COMMON_BUILDER.pop(); } 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 59081d0..05562bd 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 @@ -142,4 +142,7 @@ public abstract class AbstractTradingMenu extends AbstractContainerMenu { this.addSlot(new Slot(playerInventory, i, 8 + i * 18, HOTBAR_Y)); } } + public Level getLevel(){ + return level; + } } 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 2eec83c..846aea1 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 @@ -81,7 +81,7 @@ public abstract class AbstractTradingScreen ex if(!menu.blockEntity.getTargetItemStack().isEmpty()){ - Optional recipe = ModRecipes.findByOutput(menu.blockEntity.getLevel(),menu.blockEntity.getTargetItemStack()); + Optional recipe = ModRecipes.findByOutput(menu.getLevel(),menu.blockEntity.getTargetItemStack()); if(recipe.isPresent()){ renderFakeRecipe(recipe.get(), pPoseStack); } 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 4fb4d6d..f742365 100644 --- a/src/main/java/com/oierbravo/trading_station/registrate/ModRecipes.java +++ b/src/main/java/com/oierbravo/trading_station/registrate/ModRecipes.java @@ -3,6 +3,7 @@ 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.core.NonNullList; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.SimpleContainer; import net.minecraft.world.item.ItemStack; @@ -54,6 +55,8 @@ public class ModRecipes { } public static List getAllRecipesForMachine(Level pLevel, Biome biome, String machineType) { + if(pLevel.isClientSide()) + return NonNullList.create(); return pLevel.getRecipeManager().getAllRecipesFor(TradingRecipe.Type.INSTANCE).stream() .filter((tradingRecipe -> tradingRecipe.matchesBiome(biome, pLevel))) .filter((tradingRecipe -> tradingRecipe.matchesExclusiveTo(machineType))) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index bf4cd42..542b0c0 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -8,7 +8,7 @@ modId="trading_station" version="${file.jarVersion}" displayName="Trading Station" logoFile="logo.png" -credits="Code inspirtation from the amazing Create mod" +credits="Code inspiration from the amazing Create mod, LaserIO and AlchemLib" authors="oierbravo" description=''' Trading made simple diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png index 3ccf9d6..a058c11 100644 Binary files a/src/main/resources/logo.png and b/src/main/resources/logo.png differ