Skip to content

Commit 852bbd4

Browse files
Add GTBBWands (#4)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 769a1be commit 852bbd4

21 files changed

Lines changed: 681 additions & 11 deletions

File tree

buildscript.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ debug_eio = false
3838
debug_deda = false
3939
debug_avaritia = false
4040
debug_chisel = false
41+
debug_bbw = false
4142

4243
# Select a username for testing your mod with breakpoints. You may leave this empty for a random username each time you
4344
# restart Minecraft in development. Choose this dependent on your mod:

dependencies.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ dependencies {
5555
}
5656

5757
// Debug AE2UEL 0.56.7
58-
compileOnly rfg.deobf("curse.maven:ae2-extended-life-570458:6302098")
5958
if (project.debug_all.toBoolean() || project.debug_chisel.toBoolean()) {
6059
runtimeOnly rfg.deobf("curse.maven:ae2-extended-life-570458:6302098")
6160
}
@@ -93,6 +92,12 @@ dependencies {
9392
runtimeOnly rfg.deobf("curse.maven:ctm-267602:2915363") // CTM 1.0.2.31
9493
}
9594

95+
// Debug Better Builder's Wands: 0.13.2
96+
compileOnly rfg.deobf("curse.maven:better-builders-wands-238403:2691084")
97+
if (project.debug_all.toBoolean() || project.debug_bbw.toBoolean()) {
98+
runtimeOnly rfg.deobf("curse.maven:better-builders-wands-238403:2691084")
99+
}
100+
96101
// Boot error fix
97102
if (project.debug_all.toBoolean() || project.debug_eio.toBoolean()) {
98103
runtimeOnly files("libs/EnderCore-1.12.2-0.5.78-core.jar")

src/main/java/com/github/gtexpert/gtmoretools/api/util/Mods.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public enum Mods {
3131
Avaritia(Names.AVARITIA),
3232
Avaritiaaddons(Names.AVARITIAADDONS),
3333
Baubles(Names.BAUBLES),
34+
BetterBuildersWands(Names.BETTER_BUILDERS_WANDS),
3435
Chisel(Names.CHISEL),
3536
CTM(Names.CONNECTED_TEXTURES_MOD),
3637
CraftTweaker(Names.CRAFT_TWEAKER),
@@ -102,6 +103,7 @@ public static class Names {
102103
public static final String AVARITIAADDONS = "avaritiaddons";
103104
public static final String BAUBLES = "baubles";
104105
public static final String BOTANY = "botany";
106+
public static final String BETTER_BUILDERS_WANDS = "betterbuilderswands";
105107
public static final String CHISEL = "chisel";
106108
public static final String CONNECTED_TEXTURES_MOD = "ctm";
107109
public static final String CRAFT_TWEAKER = "crafttweaker";
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.github.gtexpert.gtmoretools.integration.bbw;
2+
3+
import java.util.Collections;
4+
import java.util.List;
5+
6+
import net.minecraft.item.Item;
7+
import net.minecraft.item.crafting.IRecipe;
8+
import net.minecraftforge.client.event.ColorHandlerEvent;
9+
import net.minecraftforge.client.event.ModelRegistryEvent;
10+
import net.minecraftforge.event.RegistryEvent;
11+
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
12+
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
13+
import net.minecraftforge.fml.relauncher.Side;
14+
import net.minecraftforge.fml.relauncher.SideOnly;
15+
import net.minecraftforge.registries.IForgeRegistry;
16+
17+
import org.jetbrains.annotations.NotNull;
18+
19+
import gregtech.api.items.toolitem.IGTTool;
20+
21+
import com.github.gtexpert.gtmoretools.api.ModValues;
22+
import com.github.gtexpert.gtmoretools.api.modules.TModule;
23+
import com.github.gtexpert.gtmoretools.api.util.Mods;
24+
import com.github.gtexpert.gtmoretools.integration.IntegrationSubmodule;
25+
import com.github.gtexpert.gtmoretools.integration.bbw.recipes.BBWToolsRecipe;
26+
import com.github.gtexpert.gtmoretools.integration.bbw.tools.BBWToolItems;
27+
import com.github.gtexpert.gtmoretools.integration.bbw.tools.BBWToolRecipeHandler;
28+
import com.github.gtexpert.gtmoretools.modules.Modules;
29+
30+
@TModule(
31+
moduleID = Modules.MODULE_BBW,
32+
containerID = ModValues.MODID,
33+
modDependencies = Mods.Names.BETTER_BUILDERS_WANDS,
34+
name = "GTMoreTools Better Builder's Wands Integration",
35+
description = "Better Builder's Wands Integration Module")
36+
public class BBWModule extends IntegrationSubmodule {
37+
38+
@NotNull
39+
@Override
40+
public List<Class<?>> getEventBusSubscribers() {
41+
return Collections.singletonList(BBWModule.class);
42+
}
43+
44+
@Override
45+
public void preInit(FMLPreInitializationEvent event) {
46+
BBWToolItems.init();
47+
}
48+
49+
@SubscribeEvent
50+
public static void onRegisterItems(RegistryEvent.Register<Item> event) {
51+
IForgeRegistry<Item> registry = event.getRegistry();
52+
for (IGTTool tool : BBWToolItems.getAllTools()) {
53+
registry.register(tool.get());
54+
}
55+
}
56+
57+
@SubscribeEvent
58+
@SideOnly(Side.CLIENT)
59+
public static void onRegisterModels(ModelRegistryEvent event) {
60+
BBWToolItems.registerModels();
61+
}
62+
63+
@SubscribeEvent
64+
@SideOnly(Side.CLIENT)
65+
public static void onRegisterColors(ColorHandlerEvent.Item event) {
66+
BBWToolItems.registerColors(event.getItemColors());
67+
}
68+
69+
@Override
70+
public void registerRecipesNormal(RegistryEvent.Register<IRecipe> event) {
71+
BBWToolItems.registerOreDict();
72+
}
73+
74+
@Override
75+
public void registerRecipesLowest(RegistryEvent.Register<IRecipe> event) {
76+
BBWToolsRecipe.init();
77+
BBWToolRecipeHandler.registerRecipes();
78+
}
79+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.github.gtexpert.gtmoretools.integration.bbw.recipes;
2+
3+
import gregtech.api.recipes.ModHandler;
4+
import gregtech.common.ConfigHolder;
5+
6+
import com.github.gtexpert.gtmoretools.api.util.Mods;
7+
8+
public class BBWToolsRecipe {
9+
10+
public static void init() {
11+
if (ConfigHolder.recipes.hardToolArmorRecipes) {
12+
// Remove original BBW mod recipes
13+
ModHandler.removeRecipeByName(Mods.BetterBuildersWands.getResource("recipewandstone"));
14+
ModHandler.removeRecipeByName(Mods.BetterBuildersWands.getResource("recipewandiron"));
15+
ModHandler.removeRecipeByName(Mods.BetterBuildersWands.getResource("recipewanddiamond"));
16+
}
17+
}
18+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.github.gtexpert.gtmoretools.integration.bbw.tools;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
import net.minecraft.client.renderer.color.ItemColors;
7+
import net.minecraft.item.ItemStack;
8+
import net.minecraftforge.client.model.ModelLoader;
9+
import net.minecraftforge.fml.relauncher.Side;
10+
import net.minecraftforge.fml.relauncher.SideOnly;
11+
12+
import gregtech.api.GTValues;
13+
import gregtech.api.items.toolitem.IGTTool;
14+
import gregtech.api.items.toolitem.ItemGTTool;
15+
import gregtech.api.unification.OreDictUnifier;
16+
17+
import com.github.gtexpert.gtmoretools.api.ModValues;
18+
19+
public final class BBWToolItems {
20+
21+
private static final List<IGTTool> TOOLS = new ArrayList<>();
22+
23+
public static IGTTool WAND;
24+
25+
private BBWToolItems() {}
26+
27+
public static List<IGTTool> getAllTools() {
28+
return TOOLS;
29+
}
30+
31+
public static void init() {
32+
WAND = register(ItemGTTool.Builder.of(ModValues.MODID, "wand")
33+
.toolStats(b -> b.behaviors(WandBehavior.INSTANCE)
34+
.cannotAttack().attackSpeed(-1.0F))
35+
.oreDict("toolWand")
36+
.toolClasses("wand")
37+
.build());
38+
}
39+
40+
public static IGTTool register(IGTTool tool) {
41+
TOOLS.add(tool);
42+
return tool;
43+
}
44+
45+
@SideOnly(Side.CLIENT)
46+
public static void registerModels() {
47+
TOOLS.forEach(tool -> ModelLoader.setCustomModelResourceLocation(tool.get(), 0, tool.getModelLocation()));
48+
}
49+
50+
@SideOnly(Side.CLIENT)
51+
public static void registerColors(ItemColors itemColors) {
52+
TOOLS.forEach(tool -> itemColors.registerItemColorHandler(tool::getColor, tool.get()));
53+
}
54+
55+
public static void registerOreDict() {
56+
TOOLS.forEach(tool -> {
57+
final ItemStack stack = new ItemStack(tool.get(), 1, GTValues.W);
58+
if (tool.getOreDictName() != null) {
59+
OreDictUnifier.registerOre(stack, tool.getOreDictName());
60+
}
61+
tool.getSecondaryOreDicts().forEach(oreDict -> OreDictUnifier.registerOre(stack, oreDict));
62+
});
63+
}
64+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.github.gtexpert.gtmoretools.integration.bbw.tools;
2+
3+
import static gregtech.api.unification.material.info.MaterialFlags.*;
4+
5+
import gregtech.api.GregTechAPI;
6+
import gregtech.api.recipes.ModHandler;
7+
import gregtech.api.unification.material.Material;
8+
import gregtech.api.unification.material.Materials;
9+
import gregtech.api.unification.material.properties.PropertyKey;
10+
import gregtech.api.unification.ore.OrePrefix;
11+
import gregtech.api.unification.stack.UnificationEntry;
12+
import gregtech.common.ConfigHolder;
13+
14+
public class BBWToolRecipeHandler {
15+
16+
public static void registerRecipes() {
17+
for (Material material : GregTechAPI.materialManager.getRegisteredMaterials()) {
18+
if (!material.hasProperty(PropertyKey.TOOL)) continue;
19+
20+
// Flint uses gem instead of plate/ingot
21+
if (material == Materials.Flint) {
22+
processFlintWandRecipe();
23+
continue;
24+
}
25+
26+
if (!material.hasFlag(GENERATE_PLATE)) continue;
27+
28+
processWandRecipe(material);
29+
}
30+
}
31+
32+
private static void processWandRecipe(Material material) {
33+
if (ConfigHolder.recipes.hardToolArmorRecipes) {
34+
ModHandler.addShapedRecipe(String.format("wand_%s", material.getName()),
35+
BBWToolItems.WAND.get(material),
36+
" fP", " Sh", "S ",
37+
'P', new UnificationEntry(OrePrefix.plate, material),
38+
'S', new UnificationEntry(OrePrefix.stick, Materials.Wood));
39+
} else {
40+
ModHandler.addShapedRecipe(String.format("wand_%s", material.getName()),
41+
BBWToolItems.WAND.get(material),
42+
" I", " S ", "S ",
43+
'I', new UnificationEntry(OrePrefix.ingot, material),
44+
'S', new UnificationEntry(OrePrefix.stick, Materials.Wood));
45+
}
46+
}
47+
48+
private static void processFlintWandRecipe() {
49+
if (ConfigHolder.recipes.hardToolArmorRecipes) {
50+
ModHandler.addShapedRecipe("wand_flint",
51+
BBWToolItems.WAND.get(Materials.Flint),
52+
" fF", " Sh", "S ",
53+
'F', new UnificationEntry(OrePrefix.gem, Materials.Flint),
54+
'S', new UnificationEntry(OrePrefix.stick, Materials.Wood));
55+
} else {
56+
ModHandler.addShapedRecipe("wand_flint",
57+
BBWToolItems.WAND.get(Materials.Flint),
58+
" F", " S ", "S ",
59+
'F', new UnificationEntry(OrePrefix.gem, Materials.Flint),
60+
'S', new UnificationEntry(OrePrefix.stick, Materials.Wood));
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)