From 0f11c1e0a47898646d032ceb0397fbd60b7cc9a6 Mon Sep 17 00:00:00 2001 From: yueh Date: Wed, 1 Jul 2020 14:29:43 +0200 Subject: [PATCH 1/3] Hide debug tools from JEI when disabled via config (#4439) --- src/main/java/appeng/core/AEConfig.java | 24 ++++++++++--- src/main/java/appeng/core/ApiDefinitions.java | 9 ++--- .../integration/modules/jei/JEIPlugin.java | 36 ++++++++++++++++++- 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/src/main/java/appeng/core/AEConfig.java b/src/main/java/appeng/core/AEConfig.java index 0922e7032..22288bf67 100644 --- a/src/main/java/appeng/core/AEConfig.java +++ b/src/main/java/appeng/core/AEConfig.java @@ -18,7 +18,16 @@ package appeng.core; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.function.DoubleSupplier; import java.util.stream.Collectors; @@ -36,7 +45,13 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; -import appeng.api.config.*; +import appeng.api.config.CondenserOutput; +import appeng.api.config.PowerMultiplier; +import appeng.api.config.PowerUnits; +import appeng.api.config.SearchBoxMode; +import appeng.api.config.Settings; +import appeng.api.config.TerminalStyle; +import appeng.api.config.YesNo; import appeng.api.features.AEFeature; import appeng.core.settings.TickRates; import appeng.util.EnumCycler; @@ -175,9 +190,10 @@ public final class AEConfig { this.matterCannonBattery = COMMON.matterCannonBattery.get(); this.featureFlags.clear(); + for (final AEFeature feature : AEFeature.values()) { - if (feature.isVisible()) { - if (COMMON.enabledFeatures.containsKey(feature)) { + if (feature.isVisible() && feature.isConfig()) { + if (COMMON.enabledFeatures.containsKey(feature) && COMMON.enabledFeatures.get(feature).get()) { this.featureFlags.add(feature); } } else { diff --git a/src/main/java/appeng/core/ApiDefinitions.java b/src/main/java/appeng/core/ApiDefinitions.java index 36ab4ddcd..e68e97062 100644 --- a/src/main/java/appeng/core/ApiDefinitions.java +++ b/src/main/java/appeng/core/ApiDefinitions.java @@ -19,9 +19,6 @@ package appeng.core; import appeng.api.definitions.IDefinitions; -import appeng.api.definitions.IItems; -import appeng.api.definitions.IMaterials; -import appeng.api.definitions.IParts; import appeng.bootstrap.FeatureFactory; import appeng.core.api.definitions.ApiBlocks; import appeng.core.api.definitions.ApiItems; @@ -57,17 +54,17 @@ public final class ApiDefinitions implements IDefinitions { } @Override - public IItems items() { + public ApiItems items() { return items; } @Override - public IMaterials materials() { + public ApiMaterials materials() { return materials; } @Override - public IParts parts() { + public ApiParts parts() { return parts; } } diff --git a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java index cd531bd2a..71e6282cf 100644 --- a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java +++ b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java @@ -18,6 +18,8 @@ package appeng.integration.modules.jei; +import java.util.ArrayList; +import java.util.Collection; import java.util.Optional; import com.google.common.collect.ImmutableList; @@ -32,7 +34,12 @@ import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; import mezz.jei.api.constants.VanillaRecipeCategoryUid; import mezz.jei.api.constants.VanillaTypes; -import mezz.jei.api.registration.*; +import mezz.jei.api.registration.IAdvancedRegistration; +import mezz.jei.api.registration.IRecipeCatalystRegistration; +import mezz.jei.api.registration.IRecipeCategoryRegistration; +import mezz.jei.api.registration.IRecipeRegistration; +import mezz.jei.api.registration.IRecipeTransferRegistration; +import mezz.jei.api.registration.ISubtypeRegistration; import mezz.jei.api.runtime.IJeiRuntime; import appeng.api.AEApi; @@ -44,6 +51,7 @@ import appeng.api.features.AEFeature; import appeng.container.implementations.CraftingTermContainer; import appeng.container.implementations.PatternTermContainer; import appeng.core.AEConfig; +import appeng.core.Api; import appeng.core.AppEng; import appeng.core.localization.GuiText; import appeng.integration.abstraction.JEIFacade; @@ -169,6 +177,32 @@ public class JEIPlugin implements IModPlugin { @Override public void onRuntimeAvailable(IJeiRuntime jeiRuntime) { JEIFacade.setInstance(new JeiRuntimeAdapter(jeiRuntime)); + this.hideDebugTools(jeiRuntime); + + } + + private void hideDebugTools(IJeiRuntime jeiRuntime) { + Collection toRemove = new ArrayList<>(); + + // We use the internal API here as exception as debug tools are not part of the + // public one by design. + toRemove.add(Api.INSTANCE.definitions().items().dummyFluidItem().maybeStack(1).orElse(null)); + + if (!AEConfig.instance().isFeatureEnabled(AEFeature.UNSUPPORTED_DEVELOPER_TOOLS)) { + toRemove.add(Api.INSTANCE.definitions().blocks().cubeGenerator().maybeStack(1).orElse(null)); + toRemove.add(Api.INSTANCE.definitions().blocks().chunkLoader().maybeStack(1).orElse(null)); + toRemove.add(Api.INSTANCE.definitions().blocks().energyGenerator().maybeStack(1).orElse(null)); + toRemove.add(Api.INSTANCE.definitions().blocks().itemGen().maybeStack(1).orElse(null)); + toRemove.add(Api.INSTANCE.definitions().blocks().phantomNode().maybeStack(1).orElse(null)); + + toRemove.add(Api.INSTANCE.definitions().items().toolDebugCard().maybeStack(1).orElse(null)); + toRemove.add(Api.INSTANCE.definitions().items().toolEraser().maybeStack(1).orElse(null)); + toRemove.add(Api.INSTANCE.definitions().items().toolMeteoritePlacer().maybeStack(1).orElse(null)); + toRemove.add(Api.INSTANCE.definitions().items().toolReplicatorCard().maybeStack(1).orElse(null)); + } + + jeiRuntime.getIngredientManager().removeIngredientsAtRuntime(mezz.jei.api.constants.VanillaTypes.ITEM, + toRemove); } } From a1042384e35d286371746f40bde41bcc60594bf3 Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Thu, 2 Jul 2020 01:09:17 +0200 Subject: [PATCH 2/3] Minor simplification of PartPlacement. --- src/main/java/appeng/parts/PartPlacement.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/appeng/parts/PartPlacement.java b/src/main/java/appeng/parts/PartPlacement.java index c1491de02..5c0ea7edc 100644 --- a/src/main/java/appeng/parts/PartPlacement.java +++ b/src/main/java/appeng/parts/PartPlacement.java @@ -225,24 +225,22 @@ public class PartPlacement { host = (IPartHost) tile; } - final Optional maybeMultiPartStack = multiPart.maybeStack(1); - final Optional maybeMultiPartBlock = multiPart.maybeBlock(); - final Optional maybeMultiPartBlockItem = multiPart.maybeBlockItem(); + ItemStack multiPartStack = multiPart.stack(1); + Block multiPartBlock = multiPart.block(); + BlockItem multiPartBlockItem = multiPart.blockItem(); - final boolean hostIsNotPresent = host == null; - final boolean multiPartPresent = maybeMultiPartBlock.isPresent() && maybeMultiPartStack.isPresent() - && maybeMultiPartBlockItem.isPresent(); - BlockState multiPartBlockState = maybeMultiPartBlock.get().getDefaultState(); - final boolean canMultiPartBePlaced = multiPartBlockState.isValidPosition(world, te_pos); + boolean hostIsNotPresent = host == null; + BlockState multiPartBlockState = multiPartBlock.getDefaultState(); + boolean canMultiPartBePlaced = multiPartBlockState.isValidPosition(world, te_pos); // We cannot override the item stack of normal use context, so we use this hack BlockItemUseContext mpUseCtx = new BlockItemUseContext( - new DirectionalPlaceContext(world, te_pos, side, maybeMultiPartStack.get(), side)); + new DirectionalPlaceContext(world, te_pos, side, multiPartStack, side)); // FIXME: This is super-fishy and all needs to be re-checked. what does this // even do??? - if (hostIsNotPresent && multiPartPresent && canMultiPartBePlaced - && maybeMultiPartBlockItem.get().tryPlace(mpUseCtx) == ActionResultType.SUCCESS) { + if (hostIsNotPresent && canMultiPartBePlaced + && multiPartBlockItem.tryPlace(mpUseCtx).isSuccessOrConsume()) { if (!world.isRemote) { tile = world.getTileEntity(te_pos); From f573b52b1bf94e6de356092648ee3b2faf26c9ad Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Thu, 2 Jul 2020 01:12:53 +0200 Subject: [PATCH 3/3] Be more lenient with the return value of BlockItem.tryPlace (it might be CONSUME in future versions). --- src/main/java/appeng/block/AEBaseBlockItem.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/appeng/block/AEBaseBlockItem.java b/src/main/java/appeng/block/AEBaseBlockItem.java index 93d124b3a..1e3c0220d 100644 --- a/src/main/java/appeng/block/AEBaseBlockItem.java +++ b/src/main/java/appeng/block/AEBaseBlockItem.java @@ -129,7 +129,7 @@ public class AEBaseBlockItem extends BlockItem { } ActionResultType result = super.tryPlace(context); - if (result != ActionResultType.SUCCESS) { + if (!result.isSuccessOrConsume()) { return result; } @@ -139,7 +139,7 @@ public class AEBaseBlockItem extends BlockItem { ori = tile; if (tile == null) { - return ActionResultType.SUCCESS; + return result; } if (ori.canBeRotated() && !this.blockType.hasCustomRotation()) { @@ -155,7 +155,7 @@ public class AEBaseBlockItem extends BlockItem { ori.setOrientation(forward, up); } - return ActionResultType.SUCCESS; + return result; } }