♻️ Docs, build & some refactor

This commit is contained in:
2023-08-24 00:28:57 +02:00
parent 102d244548
commit caf51f25a8
11 changed files with 65 additions and 56 deletions

View File

@@ -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 => {
/**

View File

@@ -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)

View File

@@ -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<TradingRecipe> 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<TradingRecipe> 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();
}

View File

@@ -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<TradingRecipe> 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<TradingRecipe> 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);
}
}

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -81,7 +81,7 @@ public abstract class AbstractTradingScreen<MENU extends AbstractTradingMenu> ex
if(!menu.blockEntity.getTargetItemStack().isEmpty()){
Optional<TradingRecipe> recipe = ModRecipes.findByOutput(menu.blockEntity.getLevel(),menu.blockEntity.getTargetItemStack());
Optional<TradingRecipe> recipe = ModRecipes.findByOutput(menu.getLevel(),menu.blockEntity.getTargetItemStack());
if(recipe.isPresent()){
renderFakeRecipe(recipe.get(), pPoseStack);
}

View File

@@ -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<TradingRecipe> 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)))

View File

@@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 34 KiB