mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-04-25 12:13:18 +00:00
Add EMI compatibility
This just adds stack comparisons, so that upgrades are considered (much like JEI and REI). No dynamic recipes, as EMI doesn't support those :(.
This commit is contained in:
parent
ec0765ead1
commit
c2988366d8
@ -33,6 +33,7 @@ nightConfig = "3.6.5"
|
|||||||
slf4j = "1.7.36"
|
slf4j = "1.7.36"
|
||||||
|
|
||||||
# Minecraft mods
|
# Minecraft mods
|
||||||
|
emi = "1.0.8+1.19.4"
|
||||||
iris = "1.5.2+1.19.4"
|
iris = "1.5.2+1.19.4"
|
||||||
jei = "13.1.0.11"
|
jei = "13.1.0.11"
|
||||||
modmenu = "6.1.0-rc.1"
|
modmenu = "6.1.0-rc.1"
|
||||||
@ -92,6 +93,7 @@ slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
|
|||||||
# Minecraft mods
|
# Minecraft mods
|
||||||
fabric-api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabric-api" }
|
fabric-api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabric-api" }
|
||||||
fabric-loader = { module = "net.fabricmc:fabric-loader", version.ref = "fabric-loader" }
|
fabric-loader = { module = "net.fabricmc:fabric-loader", version.ref = "fabric-loader" }
|
||||||
|
emi = { module = "dev.emi:emi-xplat-mojmap", version.ref = "emi" }
|
||||||
iris = { module = "maven.modrinth:iris", version.ref = "iris" }
|
iris = { module = "maven.modrinth:iris", version.ref = "iris" }
|
||||||
jei-api = { module = "mezz.jei:jei-1.19.4-common-api", version.ref = "jei" }
|
jei-api = { module = "mezz.jei:jei-1.19.4-common-api", version.ref = "jei" }
|
||||||
jei-fabric = { module = "mezz.jei:jei-1.19.4-fabric", version.ref = "jei" }
|
jei-fabric = { module = "mezz.jei:jei-1.19.4-fabric", version.ref = "jei" }
|
||||||
|
@ -26,6 +26,7 @@ dependencies {
|
|||||||
clientImplementation(clientClasses(project(":common-api")))
|
clientImplementation(clientClasses(project(":common-api")))
|
||||||
|
|
||||||
compileOnly(libs.bundles.externalMods.common)
|
compileOnly(libs.bundles.externalMods.common)
|
||||||
|
clientCompileOnly(variantOf(libs.emi) { classifier("api") })
|
||||||
|
|
||||||
compileOnly(libs.mixin)
|
compileOnly(libs.mixin)
|
||||||
annotationProcessorEverywhere(libs.autoService)
|
annotationProcessorEverywhere(libs.autoService)
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2023 The CC: Tweaked Developers
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
|
package dan200.computercraft.client.integration.emi;
|
||||||
|
|
||||||
|
import dan200.computercraft.api.turtle.TurtleSide;
|
||||||
|
import dan200.computercraft.shared.ModRegistry;
|
||||||
|
import dan200.computercraft.shared.pocket.items.PocketComputerItem;
|
||||||
|
import dan200.computercraft.shared.turtle.items.TurtleItem;
|
||||||
|
import dev.emi.emi.api.EmiEntrypoint;
|
||||||
|
import dev.emi.emi.api.EmiPlugin;
|
||||||
|
import dev.emi.emi.api.EmiRegistry;
|
||||||
|
import dev.emi.emi.api.stack.Comparison;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
|
import java.util.function.BiPredicate;
|
||||||
|
|
||||||
|
@EmiEntrypoint
|
||||||
|
public class EMIComputerCraft implements EmiPlugin {
|
||||||
|
@Override
|
||||||
|
public void register(EmiRegistry registry) {
|
||||||
|
registry.setDefaultComparison(ModRegistry.Items.TURTLE_NORMAL.get(), turtleComparison);
|
||||||
|
registry.setDefaultComparison(ModRegistry.Items.TURTLE_ADVANCED.get(), turtleComparison);
|
||||||
|
|
||||||
|
registry.setDefaultComparison(ModRegistry.Items.POCKET_COMPUTER_NORMAL.get(), pocketComparison);
|
||||||
|
registry.setDefaultComparison(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get(), pocketComparison);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final Comparison turtleComparison = compareStacks((left, right) ->
|
||||||
|
left.getItem() instanceof TurtleItem turtle
|
||||||
|
&& turtle.getUpgrade(left, TurtleSide.LEFT) == turtle.getUpgrade(right, TurtleSide.LEFT)
|
||||||
|
&& turtle.getUpgrade(left, TurtleSide.RIGHT) == turtle.getUpgrade(right, TurtleSide.RIGHT));
|
||||||
|
|
||||||
|
private static final Comparison pocketComparison = compareStacks((left, right) ->
|
||||||
|
left.getItem() instanceof PocketComputerItem && PocketComputerItem.getUpgrade(left) == PocketComputerItem.getUpgrade(right));
|
||||||
|
|
||||||
|
private static <T extends Item> Comparison compareStacks(BiPredicate<ItemStack, ItemStack> test) {
|
||||||
|
return Comparison.of((left, right) -> {
|
||||||
|
ItemStack leftStack = left.getItemStack(), rightStack = right.getItemStack();
|
||||||
|
return leftStack.getItem() == rightStack.getItem() && test.test(leftStack, rightStack);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -6,6 +6,7 @@ package dan200.computercraft.data;
|
|||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import dan200.computercraft.api.ComputerCraftAPI;
|
import dan200.computercraft.api.ComputerCraftAPI;
|
||||||
|
import dan200.computercraft.api.ComputerCraftTags;
|
||||||
import dan200.computercraft.api.pocket.PocketUpgradeDataProvider;
|
import dan200.computercraft.api.pocket.PocketUpgradeDataProvider;
|
||||||
import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider;
|
import dan200.computercraft.api.turtle.TurtleUpgradeDataProvider;
|
||||||
import dan200.computercraft.api.upgrades.UpgradeBase;
|
import dan200.computercraft.api.upgrades.UpgradeBase;
|
||||||
@ -20,6 +21,7 @@ import dan200.computercraft.shared.platform.RegistryWrappers;
|
|||||||
import net.minecraft.data.CachedOutput;
|
import net.minecraft.data.CachedOutput;
|
||||||
import net.minecraft.data.DataProvider;
|
import net.minecraft.data.DataProvider;
|
||||||
import net.minecraft.data.PackOutput;
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
|
|
||||||
@ -97,6 +99,12 @@ public final class LanguageProvider implements DataProvider {
|
|||||||
add(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get(), "Advanced Pocket Computer");
|
add(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get(), "Advanced Pocket Computer");
|
||||||
add(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get().getDescriptionId() + ".upgraded", "Advanced %s Pocket Computer");
|
add(ModRegistry.Items.POCKET_COMPUTER_ADVANCED.get().getDescriptionId() + ".upgraded", "Advanced %s Pocket Computer");
|
||||||
|
|
||||||
|
// Tags (for EMI)
|
||||||
|
add(ComputerCraftTags.Items.COMPUTER, "Computers");
|
||||||
|
add(ComputerCraftTags.Items.TURTLE, "Turtles");
|
||||||
|
add(ComputerCraftTags.Items.WIRED_MODEM, "Wired modems");
|
||||||
|
add(ComputerCraftTags.Items.MONITOR, "Monitors");
|
||||||
|
|
||||||
// Turtle/pocket upgrades
|
// Turtle/pocket upgrades
|
||||||
add("upgrade.minecraft.diamond_sword.adjective", "Melee");
|
add("upgrade.minecraft.diamond_sword.adjective", "Melee");
|
||||||
add("upgrade.minecraft.diamond_shovel.adjective", "Digging");
|
add("upgrade.minecraft.diamond_shovel.adjective", "Digging");
|
||||||
@ -299,6 +307,10 @@ public final class LanguageProvider implements DataProvider {
|
|||||||
add(AggregatedMetric.TRANSLATION_PREFIX + metric.name() + ".name", text);
|
add(AggregatedMetric.TRANSLATION_PREFIX + metric.name() + ".name", text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void add(TagKey<Item> tag, String text) {
|
||||||
|
add("tag.item." + tag.location().getNamespace() + "." + tag.location().getPath(), text);
|
||||||
|
}
|
||||||
|
|
||||||
private void addConfigGroup(ConfigFile spec, String path, String text) {
|
private void addConfigGroup(ConfigFile spec, String path, String text) {
|
||||||
var entry = spec.getEntry(path);
|
var entry = spec.getEntry(path);
|
||||||
if (!(entry instanceof ConfigFile.Group)) throw new IllegalArgumentException("Cannot find group " + path);
|
if (!(entry instanceof ConfigFile.Group)) throw new IllegalArgumentException("Cannot find group " + path);
|
||||||
|
@ -321,8 +321,7 @@ public class TurtleTool extends AbstractTurtleUpgrade {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isTriviallyBreakable(BlockGetter reader, BlockPos pos, BlockState state) {
|
private static boolean isTriviallyBreakable(BlockGetter reader, BlockPos pos, BlockState state) {
|
||||||
return
|
return state.is(ComputerCraftTags.Blocks.TURTLE_ALWAYS_BREAKABLE)
|
||||||
state.is(ComputerCraftTags.Blocks.TURTLE_ALWAYS_BREAKABLE)
|
|
||||||
// Allow breaking any "instabreak" block.
|
// Allow breaking any "instabreak" block.
|
||||||
|| state.getDestroySpeed(reader, pos) == 0;
|
|| state.getDestroySpeed(reader, pos) == 0;
|
||||||
}
|
}
|
||||||
|
@ -119,8 +119,7 @@ interface AddressPredicate {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(InetAddress socketAddress) {
|
public boolean matches(InetAddress socketAddress) {
|
||||||
return
|
return socketAddress.isAnyLocalAddress() // 0.0.0.0, ::0
|
||||||
socketAddress.isAnyLocalAddress() // 0.0.0.0, ::0
|
|
||||||
|| socketAddress.isLoopbackAddress() // 127.0.0.0/8, ::1
|
|| socketAddress.isLoopbackAddress() // 127.0.0.0/8, ::1
|
||||||
|| socketAddress.isLinkLocalAddress() // 169.254.0.0/16, fe80::/10
|
|| socketAddress.isLinkLocalAddress() // 169.254.0.0/16, fe80::/10
|
||||||
|| socketAddress.isSiteLocalAddress() // 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fec0::/10
|
|| socketAddress.isSiteLocalAddress() // 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fec0::/10
|
||||||
|
@ -47,6 +47,7 @@ addRemappedConfiguration("testWithSodium")
|
|||||||
addRemappedConfiguration("testWithIris")
|
addRemappedConfiguration("testWithIris")
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
clientCompileOnly(variantOf(libs.emi) { classifier("api") })
|
||||||
modImplementation(libs.bundles.externalMods.fabric)
|
modImplementation(libs.bundles.externalMods.fabric)
|
||||||
modCompileOnly(libs.bundles.externalMods.fabric.compile) {
|
modCompileOnly(libs.bundles.externalMods.fabric.compile) {
|
||||||
exclude("net.fabricmc", "fabric-loader")
|
exclude("net.fabricmc", "fabric-loader")
|
||||||
|
@ -206,6 +206,10 @@
|
|||||||
"item.computercraft.printed_pages": "Printed Pages",
|
"item.computercraft.printed_pages": "Printed Pages",
|
||||||
"item.computercraft.treasure_disk": "Floppy Disk",
|
"item.computercraft.treasure_disk": "Floppy Disk",
|
||||||
"itemGroup.computercraft": "ComputerCraft",
|
"itemGroup.computercraft": "ComputerCraft",
|
||||||
|
"tag.item.computercraft.computer": "Computers",
|
||||||
|
"tag.item.computercraft.monitor": "Monitors",
|
||||||
|
"tag.item.computercraft.turtle": "Turtles",
|
||||||
|
"tag.item.computercraft.wired_modem": "Wired modems",
|
||||||
"tracking_field.computercraft.avg": "%s (avg)",
|
"tracking_field.computercraft.avg": "%s (avg)",
|
||||||
"tracking_field.computercraft.computer_tasks.name": "Tasks",
|
"tracking_field.computercraft.computer_tasks.name": "Tasks",
|
||||||
"tracking_field.computercraft.count": "%s (count)",
|
"tracking_field.computercraft.count": "%s (count)",
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
],
|
],
|
||||||
"rei_client": [
|
"rei_client": [
|
||||||
"dan200.computercraft.client.integration.rei.REIComputerCraft"
|
"dan200.computercraft.client.integration.rei.REIComputerCraft"
|
||||||
|
],
|
||||||
|
"emi": [
|
||||||
|
"dan200.computercraft.client.integration.emi.EMIComputerCraft"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"mixins": [
|
"mixins": [
|
||||||
|
@ -127,6 +127,7 @@ dependencies {
|
|||||||
compileOnly(libs.jetbrainsAnnotations)
|
compileOnly(libs.jetbrainsAnnotations)
|
||||||
annotationProcessorEverywhere(libs.autoService)
|
annotationProcessorEverywhere(libs.autoService)
|
||||||
|
|
||||||
|
clientCompileOnly(variantOf(libs.emi) { classifier("api") })
|
||||||
libs.bundles.externalMods.forge.compile.get().map { compileOnly(fg.deobf(it)) }
|
libs.bundles.externalMods.forge.compile.get().map { compileOnly(fg.deobf(it)) }
|
||||||
libs.bundles.externalMods.forge.runtime.get().map { runtimeOnly(fg.deobf(it)) }
|
libs.bundles.externalMods.forge.runtime.get().map { runtimeOnly(fg.deobf(it)) }
|
||||||
|
|
||||||
|
@ -206,6 +206,10 @@
|
|||||||
"item.computercraft.printed_pages": "Printed Pages",
|
"item.computercraft.printed_pages": "Printed Pages",
|
||||||
"item.computercraft.treasure_disk": "Floppy Disk",
|
"item.computercraft.treasure_disk": "Floppy Disk",
|
||||||
"itemGroup.computercraft": "ComputerCraft",
|
"itemGroup.computercraft": "ComputerCraft",
|
||||||
|
"tag.item.computercraft.computer": "Computers",
|
||||||
|
"tag.item.computercraft.monitor": "Monitors",
|
||||||
|
"tag.item.computercraft.turtle": "Turtles",
|
||||||
|
"tag.item.computercraft.wired_modem": "Wired modems",
|
||||||
"tracking_field.computercraft.avg": "%s (avg)",
|
"tracking_field.computercraft.avg": "%s (avg)",
|
||||||
"tracking_field.computercraft.computer_tasks.name": "Tasks",
|
"tracking_field.computercraft.computer_tasks.name": "Tasks",
|
||||||
"tracking_field.computercraft.count": "%s (count)",
|
"tracking_field.computercraft.count": "%s (count)",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user