Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโ€™ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds Groovyscript support for crafting #325

Merged
merged 45 commits into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from 44 commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
8dc99ae
add GS support for Crafting
yor42 Nov 15, 2023
ad607cd
add documentations
yor42 Nov 15, 2023
346d8ef
Update build.gradle
yor42 Nov 17, 2023
051fdb2
Update src/main/java/com/paneedah/mwc/groovyscript/MWC.java
yor42 Nov 17, 2023
b656827
Update src/main/java/com/paneedah/mwc/groovyscript/recipes/GSCraftingโ€ฆ
yor42 Nov 17, 2023
1f43aa2
commit changes
yor42 Nov 17, 2023
a0aa812
Merge remote-tracking branch 'origin/groovyscript' into groovyscript
yor42 Nov 17, 2023
58611cb
clean up jank and make groovyscript compile only so runtime gets tad โ€ฆ
yor42 Nov 17, 2023
4856847
messed up name here
yor42 Nov 17, 2023
ad16559
Update src/main/java/com/paneedah/mwc/groovyscript/script/CraftingStaโ€ฆ
yor42 Nov 17, 2023
9b037e0
Update src/main/java/com/paneedah/weaponlib/crafting/CraftingEntry.java
yor42 Nov 17, 2023
e5bdf99
Update src/main/java/com/paneedah/weaponlib/crafting/CraftingRegistryโ€ฆ
yor42 Nov 17, 2023
f890e4d
fixin some more
yor42 Nov 17, 2023
e4e5fe7
make javadoc a bit more detailed.
yor42 Nov 17, 2023
f4def57
more cleanup
yor42 Nov 17, 2023
c4fd040
move Recipe Registry to its own event as Brachy suggested
yor42 Nov 17, 2023
738fd6e
make IModernCrafting to output ItemStack
yor42 Nov 17, 2023
522e2bd
string formatting
yor42 Nov 17, 2023
c4cba87
Update src/main/java/com/paneedah/mwc/groovyscript/script/CraftingStaโ€ฆ
yor42 Nov 18, 2023
83c5978
Update src/main/java/com/paneedah/mwc/MWC.java
yor42 Nov 18, 2023
38ab505
Update src/main/java/com/paneedah/mwc/groovyscript/script/CraftingStaโ€ฆ
yor42 Nov 18, 2023
893af30
Update src/main/java/com/paneedah/mwc/groovyscript/script/CraftingStaโ€ฆ
yor42 Nov 18, 2023
454ea52
Update src/main/java/com/paneedah/mwc/groovyscript/script/CraftingStaโ€ฆ
yor42 Nov 18, 2023
8207056
remove space
yor42 Nov 18, 2023
41015ef
Merge remote-tracking branch 'origin/groovyscript' into groovyscript
yor42 Nov 18, 2023
04909e2
rename MWCContainer
yor42 Nov 18, 2023
ec31ae4
remove dangling javadoc
yor42 Nov 20, 2023
82bf49b
fix edgecase and empty validate
yor42 Nov 20, 2023
1e9d8f3
fix dumb mistake
yor42 Nov 20, 2023
39904b9
support GS 0.7.0
yor42 Dec 1, 2023
c08b103
cleanup
yor42 Dec 1, 2023
3d8c08e
Update src/main/java/com/paneedah/weaponlib/crafting/CraftingEntry.java
yor42 Dec 2, 2023
8e4c822
Update src/main/java/com/paneedah/weaponlib/crafting/CraftingRegistryโ€ฆ
yor42 Dec 2, 2023
dd3b1fc
non-enhanced for-loop
yor42 Dec 2, 2023
f5309e8
Merge remote-tracking branch 'origin/groovyscript' into groovyscript
yor42 Dec 2, 2023
ad94802
fix formatting
yor42 Dec 2, 2023
873001d
Not sure why this change happened but revert this to better original โ€ฆ
yor42 Dec 19, 2023
bf76dc3
change groovyscript source from curse maven to cleanroom maven
yor42 Dec 19, 2023
99db0e8
Update src/main/java/com/paneedah/mwc/MWC.java
Desoroxxx Dec 19, 2023
46107bb
fix 1 java issue and make groovyscript compileonly
yor42 Dec 19, 2023
4527d90
add a space back in
yor42 Dec 19, 2023
c54c6d0
remove spongeforge maven
yor42 Dec 19, 2023
7c7333e
rename IModernCrafting, and getItem
yor42 Dec 19, 2023
569a873
remove unnecessary comments
yor42 Dec 19, 2023
5c3af6b
update changelog
yor42 Dec 19, 2023
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: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ repositories {
dependencies {
implementation 'Red-Studio-Ragnarok:Red-Core:0.4-Dev-2'
sources 'Red-Studio-Ragnarok:Red-Core:0.4-Dev-2:sources@jar'
compileOnly('com.cleanroommc:groovyscript:0.7.2'){
transitive = false
}

jmh 'org.openjdk.jmh:jmh-core:1.36'
jmh 'org.openjdk.jmh:jmh-generator-annprocess:1.36'
Expand Down
8 changes: 2 additions & 6 deletions src/main/java/com/paneedah/mwc/MWC.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,14 @@
import com.paneedah.weaponlib.command.CraftingFileCommand;
import com.paneedah.weaponlib.command.DebugCommand;
import com.paneedah.weaponlib.config.BalancePackManager;
import com.paneedah.weaponlib.crafting.CraftingFileManager;
import io.redstudioragnarok.redcore.RedCore;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import net.minecraftforge.fml.relauncher.FMLLaunchHandler;
Expand Down Expand Up @@ -153,7 +150,6 @@ public void serverStarting(FMLServerStartingEvent serverStartingEvent) {
serverStartingEvent.registerServerCommand(new BalancePackCommand());
serverStartingEvent.registerServerCommand(new CraftingFileCommand());
BalancePackManager.loadDirectory();
CraftingFileManager.getInstance().loadDirectory();
}

public static void updateDebugHandler() {
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/com/paneedah/mwc/groovyscript/MWCGroovyPlugin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.paneedah.mwc.groovyscript;

import com.cleanroommc.groovyscript.api.GroovyPlugin;
import com.cleanroommc.groovyscript.compat.mods.GroovyContainer;
import com.paneedah.mwc.groovyscript.script.CraftingStation;

import static com.paneedah.mwc.utils.ModReference.ID;
import static com.paneedah.mwc.utils.ModReference.NAME;

public class MWCGroovyPlugin implements GroovyPlugin {

public static final CraftingStation craftingStation = new CraftingStation();

@Override
public String getModId() {
return ID;
}

@Override
public String getModName() {
return NAME;
}

@Override
public void onCompatLoaded(GroovyContainer<?> groovyContainer) {
groovyContainer.getVirtualizedRegistrar().addFieldsOf(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.paneedah.mwc.groovyscript.recipes;

import com.paneedah.weaponlib.crafting.CraftingEntry;
import com.paneedah.weaponlib.crafting.CraftingGroup;
import com.paneedah.weaponlib.crafting.IModernCraftingRecipe;
import net.minecraft.item.ItemStack;

public class GSCrafting implements IModernCraftingRecipe {

private final ItemStack output;
private CraftingEntry[] recipe;
private CraftingGroup group;

public GSCrafting(ItemStack output, CraftingGroup group, CraftingEntry... recipe){
this.output = output;
this.group = group;
this.recipe = recipe;
}

@Override
public CraftingEntry[] getModernRecipe() {
return this.recipe;
}

@Override
public ItemStack getItemStack() {
return this.output;
}

@Override
public CraftingGroup getCraftingGroup() {
return this.group;
}

@Override
public void setCraftingRecipe(CraftingEntry[] recipe) {
this.recipe = recipe;
}

@Override
public void setCraftingGroup(CraftingGroup group) {
this.group = group;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
package com.paneedah.mwc.groovyscript.script;

import com.cleanroommc.groovyscript.api.GroovyLog;
import com.cleanroommc.groovyscript.api.IIngredient;
import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient;
import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder;
import com.cleanroommc.groovyscript.registry.VirtualizedRegistry;
import com.paneedah.mwc.groovyscript.recipes.GSCrafting;
import com.paneedah.weaponlib.crafting.CraftingEntry;
import com.paneedah.weaponlib.crafting.CraftingGroup;
import com.paneedah.weaponlib.crafting.CraftingRegistry;
import com.paneedah.weaponlib.crafting.IModernCraftingRecipe;

import java.util.ArrayList;

import static com.paneedah.mwc.groovyscript.MWCGroovyPlugin.craftingStation;
import static com.paneedah.weaponlib.crafting.CraftingGroup.*;
import static com.paneedah.weaponlib.crafting.CraftingRegistry.*;

public class CraftingStation extends VirtualizedRegistry<IModernCraftingRecipe> {

@Override
public void onReload() {
this.removeScripted().forEach(CraftingRegistry::deleteRecipeRegistry);
this.restoreFromBackup().forEach(CraftingRegistry::registerRecipe);
}

/**
* Remove ALL recipes. no matter the category.
*/
public void removeAll() {
for (ArrayList<IModernCraftingRecipe> list : craftingMap.values()) {
for (IModernCraftingRecipe recipe : list) {
deleteRecipeRegistry(recipe);
this.addBackup(recipe);
}
}
}

/**
* Remove Recipe that outputs given Ingredient.
*
* @param ingredient Target Ingredient. any recipe with matching output will be removed.
*/
public void remove(IIngredient ingredient) {
for (ArrayList<IModernCraftingRecipe> list : craftingMap.values()) {
for (IModernCraftingRecipe recipe : list) {
if (ingredient.test(recipe.getItemStack())) {
deleteRecipeRegistry(recipe);
this.addBackup(recipe);
}
}
}
}

/**
* Remove ALL recipes of Given Category.
*
* @param group CraftingGroup to remove all recipes inside. valid values = "GUN", "ATTACHMENT_NORMAL", "ATTACHMENT_MODIFICATION", "BULLET", "MAGAZINE"
*/
public void removeAllinGroup(String group) {
clearGroup(CraftingGroup.valueOf(group));
}

public void removeinGroup(IIngredient ingredient, CraftingGroup group) {
for (IModernCraftingRecipe recipe : craftingMap.get(group)) {
if (ingredient.test(recipe.getItemStack())) {
deleteRecipeRegistry(recipe);
this.addBackup(recipe);
}
}
}

public void removeinGroup(IIngredient ingredient, String group) {
removeinGroup(ingredient, CraftingGroup.valueOf(group));
}

public void addRecipe(IModernCraftingRecipe crafting) {
registerRecipe(crafting);
this.addScripted(crafting);
}

/**
* Start Recipe Builder for GroovyScript.
*/
public RecipeBuilder recipeBuilder() {
return new RecipeBuilder();
}

public static class RecipeBuilder extends AbstractRecipeBuilder<GSCrafting> {

@Override
public String getErrorMsg() {
return "Error adding Modern Warefare Cubed Workbench Recipe: "+this.name;
}

@Override
public void validate(GroovyLog.Msg msg) {
//max input == container size of crafting station.
this.validateItems(msg, 1, 27,1,1);
}

private final ArrayList<Double> yields = new ArrayList<>();
private double yield = 1.0;

private CraftingGroup group = GUN;

/**
* Add Ingredient of recipe With ItemStack
*
* @param ingredient crafting ingredient
* @return AbstractRecipeBuilder
*/
@Override
public AbstractRecipeBuilder<GSCrafting> input(IIngredient ingredient) {
this.yields.add(this.yield);
return super.input(ingredient);
}

/**
* Set return Yield of upcoming Ingredient.
*
* @param yield return Yield of upcoming ingredients
* @return this RecipeBuilder
*/
public RecipeBuilder setYield(double yield) {
this.yield = yield;
return this;
}

/**
* Set Category of Recipe
*
* @param group: name of the Group. valid values = "GUN", "ATTACHMENT_NORMAL", "ATTACHMENT_MODIFICATION", "BULLET", "MAGAZINE"
* @return this RecipeBuilder
*/
public RecipeBuilder setGroup(String group) {
this.group = CraftingGroup.valueOf(group);
return this;
}

/**
* Finalize the recipe and register it
*
* @return Finished Recipe
*/
@Override
public GSCrafting register() {
if (!this.validate())
return null;

ArrayList<CraftingEntry> entries = new ArrayList<>();

for(int i = 0; i < this.input.size(); i++){
IIngredient ingredient = this.input.get(i);
if (ingredient instanceof OreDictIngredient) {
OreDictIngredient dict = (OreDictIngredient) ingredient;
entries.add(new CraftingEntry(dict.getFirst().getItem(), dict.getOreDict(), dict.getAmount(), this.yields.get(i)));
} else {
entries.add(new CraftingEntry(ingredient.getMatchingStacks()[0].getItem(), ingredient.getAmount(), this.yields.get(i)));
}
}

GSCrafting recipe = new GSCrafting(this.output.get(0), this.group, entries.toArray(new CraftingEntry[0]));
craftingStation.addRecipe(recipe);
return recipe;
}
}
}
13 changes: 13 additions & 0 deletions src/main/java/com/paneedah/mwc/init/MWCRecipes.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
package com.paneedah.mwc.init;

import com.paneedah.weaponlib.crafting.CraftingFileManager;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;

import static com.paneedah.mwc.utils.ModReference.ID;

@Mod.EventBusSubscriber(modid =ID)
public class MWCRecipes {
public static void register() {
// Smelting Recipes not supported by JSON.
Expand All @@ -16,4 +24,9 @@ public static void register() {
GameRegistry.addSmelting(MWCItems.sulfurDust, new ItemStack(Items.GUNPOWDER), 0.7f);
GameRegistry.addSmelting(Items.COAL, new ItemStack(MWCItems.graphiteChunk), 2f);
}

@SubscribeEvent
public static void registerItems(RegistryEvent.Register<IRecipe> itemRegistryEvent) {
CraftingFileManager.getInstance().loadDirectory();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import com.paneedah.weaponlib.config.BalancePackManager;
import com.paneedah.weaponlib.crafting.CraftingEntry;
import com.paneedah.weaponlib.crafting.CraftingGroup;
import com.paneedah.weaponlib.crafting.IModernCrafting;
import com.paneedah.weaponlib.crafting.IModernCraftingRecipe;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.item.Item;
Expand All @@ -21,7 +21,7 @@

import static com.paneedah.mwc.utils.ModReference.RED_LOG;

public class ItemCarryable extends Item implements IModernCrafting {
public class ItemCarryable extends Item implements IModernCraftingRecipe {

public abstract static class Builder<T extends Builder<T>> {

Expand Down Expand Up @@ -265,8 +265,8 @@ public CraftingEntry[] getModernRecipe() {
}

@Override
public Item getItem() {
return this;
public ItemStack getItemStack() {
return new ItemStack(this);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.paneedah.mwc.network.messages.WorkbenchServerMessage;
import com.paneedah.weaponlib.crafting.CraftingEntry;
import com.paneedah.weaponlib.crafting.CraftingRegistry;
import com.paneedah.weaponlib.crafting.IModernCrafting;
import com.paneedah.weaponlib.crafting.IModernCraftingRecipe;
import com.paneedah.weaponlib.crafting.ammopress.TileEntityAmmoPress;
import com.paneedah.weaponlib.crafting.base.TileEntityStation;
import com.paneedah.weaponlib.crafting.workbench.TileEntityWorkbench;
Expand Down Expand Up @@ -45,7 +45,7 @@ public IMessage onMessage(final WorkbenchServerMessage workbenchServerMessage, f
if (tileEntity instanceof TileEntityAmmoPress) {
// Since it's based on a queue, you can add whatever you'd like, and it will merely refuse to craft it until you have the resources available.
final TileEntityAmmoPress press = (TileEntityAmmoPress) station;
final ItemStack newStack = new ItemStack(CraftingRegistry.getModernCrafting(workbenchServerMessage.getCraftingGroup(), workbenchServerMessage.getCraftingName()).getItem(), workbenchServerMessage.getQuantity());
final ItemStack newStack = new ItemStack(CraftingRegistry.getModernCrafting(workbenchServerMessage.getCraftingGroup(), workbenchServerMessage.getCraftingName()).getItemStack().getItem(), workbenchServerMessage.getQuantity());

if (press.hasStack()) {
final ItemStack topQueue = press.getCraftingQueue().getLast();
Expand Down Expand Up @@ -116,9 +116,9 @@ public IMessage onMessage(final WorkbenchServerMessage workbenchServerMessage, f
continue;

final ItemStack stack = station.mainInventory.getStackInSlot(i);
if (stack.getItem() instanceof IModernCrafting && ((IModernCrafting) stack.getItem()).getModernRecipe() != null && (station.dismantleStatus[i - 9] == -1 || station.dismantleStatus[i - 9] > station.dismantleDuration[i - 9])) {
if (stack.getItem() instanceof IModernCraftingRecipe && ((IModernCraftingRecipe) stack.getItem()).getModernRecipe() != null && (station.dismantleStatus[i - 9] == -1 || station.dismantleStatus[i - 9] > station.dismantleDuration[i - 9])) {
station.dismantleStatus[i - 9] = 0;
station.dismantleDuration[i - 9] = ((TileEntityStation) tileEntity).getDismantlingTime(((IModernCrafting) stack.getItem()));
station.dismantleDuration[i - 9] = ((TileEntityStation) tileEntity).getDismantlingTime(((IModernCraftingRecipe) stack.getItem()));
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/main/java/com/paneedah/weaponlib/CustomArmor.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.paneedah.weaponlib.crafting.CraftingEntry;
import com.paneedah.weaponlib.crafting.CraftingGroup;
import com.paneedah.weaponlib.crafting.CraftingRegistry;
import com.paneedah.weaponlib.crafting.IModernCrafting;
import com.paneedah.weaponlib.crafting.IModernCraftingRecipe;
import com.paneedah.weaponlib.model.ModelBaseRendererWrapper;
import com.paneedah.weaponlib.model.WrappableModel;
import net.minecraft.client.entity.AbstractClientPlayer;
Expand Down Expand Up @@ -35,7 +35,7 @@
import static com.paneedah.mwc.proxies.ClientProxy.MC;
import static com.paneedah.mwc.utils.ModReference.ID;

public class CustomArmor extends ItemArmor implements ExposureProtection , ISpecialArmor, IModernCrafting {
public class CustomArmor extends ItemArmor implements ExposureProtection , ISpecialArmor, IModernCraftingRecipe {

private static final String ACTIVE_ATTACHMENT_TAG = "ActiveAttachments";

Expand Down Expand Up @@ -782,8 +782,8 @@ public CraftingEntry[] getModernRecipe() {
}

@Override
public Item getItem() {
return this;
public ItemStack getItemStack() {
return new ItemStack(this);
}

@Override
Expand Down
Loading