Skip to content

Commit 5f5852f

Browse files
yuu1111claude
andcommitted
Port to 1.16.5 with Mixin (replacing ASM)
- Update to ForgeGradle 6.0 and Forge 1.16.5-36.2.42 - Replace ASM bytecode manipulation with Mixin injection - Use CurseMaven for dependency management (ProjectE, Building Gadgets, JEI) - Remove ProjectEX dependency, use only ProjectE API - Implement PlayerItemIndexMixin to hook Building Gadgets inventory system - Add EMC-based block placement via tryMatch/applyMatch hooks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 8f19653 commit 5f5852f

35 files changed

+422
-2007
lines changed

build.gradle

Lines changed: 73 additions & 473 deletions
Large diffs are not rendered by default.

gradle.properties

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
1-
group=net.teamfruit
2-
modid=emcgadgets
3-
modname=EMCGadgets
4-
modvendor=TeamFruit
5-
version_major=1
6-
version_minor=1
7-
version_patch=1
8-
extra_changelog_location=
9-
extra_fmlcore=net.teamfruit.emcgadgets.asm.EMCGadgetsCorePlugin
10-
extra_fmlmod=true
11-
extra_fmlat=
12-
extra_curseforge_id=366813
13-
extra_github_owner=Team-Fruit
14-
extra_github_repo=EMCGadgets
15-
org.gradle.jvmargs=-Xmx2048m
1+
# Gradle
2+
org.gradle.jvmargs=-Xmx3G
3+
org.gradle.daemon=false
4+
org.gradle.java.home=C:\\Program Files\\Java\\jdk-17
165

17-
forgegradle=net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT
18-
forgegradle_plugin=net.minecraftforge.gradle.forge
19-
version_minecraft=1.12.2
20-
version_forge=14.23.5.2847
21-
version_minforge=14.23.0.2503
22-
version_mappings=stable_39
6+
# Mod
7+
mod_version=2.0.0
8+
mod_id=emcgadgets
9+
mod_name=EMCGadgets
10+
mod_vendor=TeamFruit
11+
mod_license=MIT
12+
mod_authors=TeamFruit
13+
14+
# Minecraft
15+
mc_version=1.16.5
16+
forge_version=36.2.42

gradle/wrapper/gradle-wrapper.properties

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
#Tue Mar 10 17:51:58 JST 2020
21
distributionBase=GRADLE_USER_HOME
32
distributionPath=wrapper/dists
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
4+
networkTimeout=10000
5+
validateDistributionUrl=true
46
zipStoreBase=GRADLE_USER_HOME
57
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4.1-all.zip

libs/Place Here Library Jar File.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.

settings.gradle

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
pluginManagement {
2+
repositories {
3+
gradlePluginPortal()
4+
maven { url = 'https://maven.minecraftforge.net/' }
5+
maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
6+
}
7+
}
8+
9+
rootProject.name = 'EMCGadgets'

src/main/java/net/teamfruit/emcgadgets/CoreInvoke.java

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,26 @@
11
package net.teamfruit.emcgadgets;
22

3+
import net.minecraftforge.common.MinecraftForge;
34
import net.minecraftforge.fml.common.Mod;
4-
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
5-
import net.minecraftforge.fml.common.network.NetworkCheckHandler;
6-
import net.minecraftforge.fml.relauncher.Side;
5+
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
6+
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
7+
import org.apache.logging.log4j.LogManager;
8+
import org.apache.logging.log4j.Logger;
79

8-
import java.util.Map;
9-
10-
@Mod(
11-
modid = Reference.MOD_ID,
12-
name = Reference.MOD_NAME,
13-
version = Reference.VERSION,
14-
dependencies = Reference.DEPENDENCIES,
15-
acceptableRemoteVersions = "*",
16-
guiFactory = "net.teamfruit.emcgadgets.gui.config.ConfigGuiFactory"
17-
)
10+
@Mod(EMCGadgets.MOD_ID)
1811
public class EMCGadgets {
1912

20-
@Mod.Instance(Reference.MOD_ID)
21-
public static EMCGadgets INSTANCE;
22-
23-
@NetworkCheckHandler
24-
public boolean netCheckHandler(Map<String, String> mods, Side side) {
25-
return true;
26-
}
13+
public static final String MOD_ID = "emcgadgets";
14+
public static final Logger LOGGER = LogManager.getLogger();
2715

28-
@Mod.EventHandler
29-
public void init(FMLInitializationEvent event) {
30-
ModConfig.loadKeyItems();
31-
}
16+
public EMCGadgets() {
17+
ModConfig.register();
18+
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
19+
MinecraftForge.EVENT_BUS.register(this);
20+
}
3221

22+
private void setup(final FMLCommonSetupEvent event) {
23+
LOGGER.info("EMCGadgets initializing...");
24+
ModConfig.loadKeyItems();
25+
}
3326
}
Lines changed: 61 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,75 @@
11
package net.teamfruit.emcgadgets;
22

3-
import com.latmod.mods.projectex.integration.PersonalEMC;
3+
import moze_intel.projecte.api.ItemInfo;
4+
import moze_intel.projecte.api.ProjectEAPI;
45
import moze_intel.projecte.api.capabilities.IKnowledgeProvider;
5-
import moze_intel.projecte.utils.EMCHelper;
6-
import net.minecraft.entity.player.EntityPlayer;
6+
import net.minecraft.entity.player.PlayerEntity;
77
import net.minecraft.item.ItemStack;
88
import net.minecraft.util.NonNullList;
99

10+
import java.math.BigInteger;
11+
1012
public class EMCInventoryManipulation {
1113

12-
@CoreInvoke
13-
public static int useEmc(ItemStack target, EntityPlayer player, int amountRequired) {
14-
if (hasTablet(player.inventory.mainInventory)) {
15-
IKnowledgeProvider provider = PersonalEMC.get(player);
14+
public static int useEmc(ItemStack target, PlayerEntity player, int amountRequired) {
15+
return player.getCapability(ProjectEAPI.KNOWLEDGE_CAPABILITY).map(provider -> {
16+
if (!hasTablet(player.inventory.items)) {
17+
EMCGadgets.LOGGER.debug("useEmc: No tablet found");
18+
return 0;
19+
}
20+
if (!provider.hasKnowledge(target)) {
21+
EMCGadgets.LOGGER.debug("useEmc: No knowledge of {}", target);
22+
return 0;
23+
}
24+
long itemEmc = ProjectEAPI.getEMCProxy().getValue(ItemInfo.fromStack(target));
25+
if (itemEmc <= 0) {
26+
EMCGadgets.LOGGER.debug("useEmc: Item {} has no EMC value", target);
27+
return 0;
28+
}
29+
BigInteger playerEmcBefore = provider.getEmc();
30+
BigInteger itemEmcBig = BigInteger.valueOf(itemEmc);
31+
long placeableCount = playerEmcBefore.divide(itemEmcBig).longValueExact();
32+
if (placeableCount <= 0) {
33+
EMCGadgets.LOGGER.debug("useEmc: Not enough EMC. Have {}, need {}", playerEmcBefore, itemEmc);
34+
return 0;
35+
}
36+
// 実際に提供する数量 (要求数と購入可能数の小さい方)
37+
int actualAmount = (int) Math.min(amountRequired, placeableCount);
38+
BigInteger emcToUse = itemEmcBig.multiply(BigInteger.valueOf(actualAmount));
39+
BigInteger playerEmcAfter = playerEmcBefore.subtract(emcToUse);
40+
provider.setEmc(playerEmcAfter);
1641

17-
if (provider.hasKnowledge(target)) {
18-
long itemEmc = EMCHelper.getEmcValue(target);
19-
long placeableCount = provider.getEmc() / itemEmc;
20-
if (placeableCount > 0) {
21-
long useEmc = amountRequired * itemEmc;
22-
provider.setEmc(provider.getEmc() - useEmc);
23-
return longToInt(placeableCount);
24-
}
42+
// サーバーサイドの場合、クライアントに同期
43+
if (player instanceof net.minecraft.entity.player.ServerPlayerEntity) {
44+
provider.syncEmc((net.minecraft.entity.player.ServerPlayerEntity) player);
2545
}
26-
}
27-
return 0;
28-
}
2946

30-
@CoreInvoke
31-
public static long countEmc(ItemStack itemStack, EntityPlayer player) {
32-
if (hasTablet(player.inventory.mainInventory)) {
33-
IKnowledgeProvider provider = PersonalEMC.get(player);
47+
EMCGadgets.LOGGER.debug("useEmc: Consumed {} EMC for {} x {}. EMC: {} -> {}",
48+
emcToUse, actualAmount, target.getItem(), playerEmcBefore, playerEmcAfter);
49+
return actualAmount;
50+
}).orElse(0);
51+
}
3452

35-
if (provider.hasKnowledge(itemStack)) {
36-
long itemEmc = EMCHelper.getEmcValue(itemStack);
37-
if (itemEmc <= 0L) return 0L;
38-
long placeableCount = provider.getEmc() / itemEmc;
39-
if (placeableCount > 0)
40-
return placeableCount;
53+
public static long countEmc(ItemStack itemStack, PlayerEntity player) {
54+
return player.getCapability(ProjectEAPI.KNOWLEDGE_CAPABILITY).map(provider -> {
55+
if (!hasTablet(player.inventory.items)) {
56+
return 0L;
4157
}
42-
}
43-
return 0L;
58+
if (!provider.hasKnowledge(itemStack)) {
59+
return 0L;
60+
}
61+
long itemEmc = ProjectEAPI.getEMCProxy().getValue(ItemInfo.fromStack(itemStack));
62+
if (itemEmc <= 0) {
63+
return 0L;
64+
}
65+
BigInteger playerEmc = provider.getEmc();
66+
BigInteger itemEmcBig = BigInteger.valueOf(itemEmc);
67+
try {
68+
return playerEmc.divide(itemEmcBig).longValueExact();
69+
} catch (ArithmeticException e) {
70+
return Long.MAX_VALUE;
71+
}
72+
}).orElse(0L);
4473
}
4574

4675
private static boolean hasTablet(NonNullList<ItemStack> inventory) {
@@ -51,9 +80,8 @@ private static boolean hasTablet(NonNullList<ItemStack> inventory) {
5180
private static int longToInt(long count) {
5281
try {
5382
return Math.toIntExact(count);
54-
} catch (ArithmeticException var3) {
83+
} catch (ArithmeticException e) {
5584
return Integer.MAX_VALUE;
5685
}
5786
}
58-
59-
}
87+
}

src/main/java/net/teamfruit/emcgadgets/Log.java

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,54 @@
11
package net.teamfruit.emcgadgets;
22

3-
import com.google.common.base.Predicates;
43
import net.minecraft.item.Item;
54
import net.minecraft.util.ResourceLocation;
6-
import net.minecraftforge.common.config.Config;
7-
import net.minecraftforge.common.config.ConfigManager;
8-
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
9-
import net.minecraftforge.fml.common.Mod;
10-
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
11-
import net.minecraftforge.fml.common.registry.ForgeRegistries;
5+
import net.minecraftforge.common.ForgeConfigSpec;
6+
import net.minecraftforge.fml.ModLoadingContext;
7+
import net.minecraftforge.fml.config.ModConfig.Type;
8+
import net.minecraftforge.registries.ForgeRegistries;
129

1310
import java.util.Arrays;
11+
import java.util.HashSet;
12+
import java.util.List;
1413
import java.util.Set;
15-
import java.util.stream.Collectors;
1614

17-
@Config(modid = Reference.MOD_ID, name = Reference.MOD_NAME)
1815
public class ModConfig {
1916

20-
@Config.Name("Key Item")
21-
@Config.Comment({ "This item is required when using EMC Gadget" })
22-
public static String[] keyItemNames = {
23-
"projecte:item.pe_transmutation_tablet",
24-
"projectex:arcane_tablet",
25-
};
26-
27-
@Config.Ignore
28-
public static Set<Item> keyItems;
29-
30-
public static void loadKeyItems() {
31-
keyItems = Arrays.stream(keyItemNames)
32-
.map(e -> ForgeRegistries.ITEMS.getValue(new ResourceLocation(e)))
33-
.filter(Predicates.notNull())
34-
.collect(Collectors.toSet());
35-
}
36-
37-
@Mod.EventBusSubscriber(modid = Reference.MOD_ID)
38-
public static class Handler {
39-
40-
@SubscribeEvent
41-
public static void onConfigChanged(final ConfigChangedEvent.OnConfigChangedEvent event) {
42-
if (event.getModID().equals(Reference.MOD_ID)) {
43-
ConfigManager.load(Reference.MOD_ID, Config.Type.INSTANCE);
44-
loadKeyItems();
45-
}
46-
}
47-
}
17+
private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder();
18+
public static final ForgeConfigSpec SPEC;
19+
20+
private static final ForgeConfigSpec.ConfigValue<List<? extends String>> KEY_ITEM_NAMES;
21+
22+
public static Set<Item> keyItems = new HashSet<>();
23+
24+
static {
25+
BUILDER.comment("EMCGadgets Configuration");
26+
27+
KEY_ITEM_NAMES = BUILDER
28+
.comment("Items required to use EMC with Building Gadgets",
29+
"The player must have one of these items in their inventory")
30+
.defineList("keyItems",
31+
Arrays.asList("projecte:transmutation_tablet"),
32+
obj -> obj instanceof String);
33+
34+
SPEC = BUILDER.build();
35+
}
36+
37+
public static void register() {
38+
ModLoadingContext.get().registerConfig(Type.COMMON, SPEC);
39+
}
40+
41+
public static void loadKeyItems() {
42+
keyItems.clear();
43+
for (String name : KEY_ITEM_NAMES.get()) {
44+
ResourceLocation loc = ResourceLocation.tryParse(name);
45+
if (loc != null) {
46+
Item item = ForgeRegistries.ITEMS.getValue(loc);
47+
if (item != null) {
48+
keyItems.add(item);
49+
}
50+
}
51+
}
52+
EMCGadgets.LOGGER.info("Loaded {} key items: {}", keyItems.size(), keyItems);
53+
}
4854
}

0 commit comments

Comments
 (0)