From 954ce1442e155cd282a59039fa8b44844412e6a3 Mon Sep 17 00:00:00 2001 From: shartte Date: Mon, 17 Aug 2020 21:43:16 +0200 Subject: [PATCH 1/3] Fixes #4598: Incorrectly rotated face for determining block lightlevel in ME Chest renderer. (#4599) --- .../java/appeng/client/render/tesr/ChestTileEntityRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java b/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java index 981a3ae10..8eb9ea947 100644 --- a/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java +++ b/src/main/java/appeng/client/render/tesr/ChestTileEntityRenderer.java @@ -142,7 +142,7 @@ public class ChestTileEntityRenderer extends TileEntityRenderer public List getQuads(@Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData extraData) { if (side != null) { - side = r.rotate(side); // This fixes the incorrect lightmap position + side = r.resultingRotate(side); // This fixes the incorrect lightmap position } List quads = new ArrayList<>(super.getQuads(state, side, rand, extraData)); From 1f9707e256e2b0760be7203dbc74b242e52f92e4 Mon Sep 17 00:00:00 2001 From: shartte Date: Mon, 17 Aug 2020 21:49:37 +0200 Subject: [PATCH 2/3] Fixes #4602: Prevent encoding invalid patterns and handle corrupted patterns a little more gracefully. (#4608) --- .../java/appeng/api/crafting/ICraftingHelper.java | 4 ++++ .../implementations/PatternTermContainer.java | 8 +++++++- src/main/java/appeng/core/api/ApiCrafting.java | 7 ++++++- .../java/appeng/items/misc/EncodedPatternItem.java | 13 +++++++++++++ 4 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/api/java/appeng/api/crafting/ICraftingHelper.java b/src/api/java/appeng/api/crafting/ICraftingHelper.java index 909f26353..b55c5caf8 100644 --- a/src/api/java/appeng/api/crafting/ICraftingHelper.java +++ b/src/api/java/appeng/api/crafting/ICraftingHelper.java @@ -53,6 +53,8 @@ public interface ICraftingHelper { * @param stack If null, a new item will be created to hold the encoded pattern. * Otherwise the given item must already contains an encoded * pattern that will be overwritten. + * @throws IllegalArgumentException If either in or out contain only empty + * ItemStacks. * @return A new encoded pattern, or the given stack with the pattern encoded in * it. */ @@ -73,6 +75,8 @@ public interface ICraftingHelper { * operation by the ME system. * @param allowSubstitutes Controls whether the ME system will allow the use of * equivalent items to craft this recipe. + * @throws IllegalArgumentException If either in or out contain only empty + * ItemStacks. */ ItemStack encodeCraftingPattern(@Nullable ItemStack stack, ICraftingRecipe recipe, ItemStack[] in, ItemStack out, boolean allowSubstitutes); diff --git a/src/main/java/appeng/container/implementations/PatternTermContainer.java b/src/main/java/appeng/container/implementations/PatternTermContainer.java index 23f8d579b..0898e52bc 100644 --- a/src/main/java/appeng/container/implementations/PatternTermContainer.java +++ b/src/main/java/appeng/container/implementations/PatternTermContainer.java @@ -261,13 +261,19 @@ public class PatternTermContainer extends MEMonitorableContainer return new ItemStack[] { out }; } } else { + boolean hasValue = false; final ItemStack[] list = new ItemStack[3]; for (int i = 0; i < this.outputSlots.length; i++) { final ItemStack out = this.outputSlots[i].getStack(); list[i] = out; + if (!out.isEmpty()) { + hasValue = true; + } + } + if (hasValue) { + return list; } - return list; } return null; diff --git a/src/main/java/appeng/core/api/ApiCrafting.java b/src/main/java/appeng/core/api/ApiCrafting.java index e4f710bc2..b91888998 100644 --- a/src/main/java/appeng/core/api/ApiCrafting.java +++ b/src/main/java/appeng/core/api/ApiCrafting.java @@ -115,7 +115,12 @@ public class ApiCrafting implements ICraftingHelper { // We use the shared itemstack for an identity lookup. IAEItemStack ais = Api.instance().storage().getStorageChannel(IItemStorageChannel.class).createStack(is); - return new CraftingPatternDetails(ais, world); + try { + return new CraftingPatternDetails(ais, world); + } catch (IllegalStateException e) { + AELog.warn("Could not decode an invalid pattern %s: %s", is, e); + return null; + } } private boolean attemptRecovery(EncodedPatternItem patternItem, ItemStack itemStack, World world) { diff --git a/src/main/java/appeng/items/misc/EncodedPatternItem.java b/src/main/java/appeng/items/misc/EncodedPatternItem.java index d3e1e504e..e4734d8de 100644 --- a/src/main/java/appeng/items/misc/EncodedPatternItem.java +++ b/src/main/java/appeng/items/misc/EncodedPatternItem.java @@ -307,14 +307,27 @@ public class EncodedPatternItem extends AEBaseItem { final ListNBT tagIn = new ListNBT(); final ListNBT tagOut = new ListNBT(); + boolean hasInput = false; for (final ItemStack i : in) { tagIn.add(createItemTag(i)); + if (!i.isEmpty()) { + hasInput = true; + } } + Preconditions.checkArgument(hasInput, "cannot encode a pattern that has no inputs."); + + boolean hasNonEmptyOutput = false; for (final ItemStack i : out) { tagOut.add(createItemTag(i)); + if (!i.isEmpty()) { + hasNonEmptyOutput = true; + } } + // Patterns without any outputs are corrupt! Never encode such a pattern. + Preconditions.checkArgument(hasNonEmptyOutput, "cannot encode a pattern that has no output."); + encodedValue.put(EncodedPatternItem.NBT_INGREDIENTS, tagIn); encodedValue.put(EncodedPatternItem.NBT_PRODUCTS, tagOut); return encodedValue; From 7e1bfdb5ac44b7dbc0cdb3fa8cdf7b1cd6c0b4dd Mon Sep 17 00:00:00 2001 From: yueh Date: Mon, 17 Aug 2020 22:28:01 +0200 Subject: [PATCH 3/3] Added step to publish to modmaven (#4607) --- .github/workflows/release.yml | 10 +++++++++- build.gradle | 8 ++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f5ffe6854..820f4725d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,7 +55,15 @@ jobs: KEY_STORE_ALIAS: ${{ secrets.KEY_STORE_ALIAS }} KEY_STORE_KEY_PASS: ${{ secrets.KEY_STORE_KEY_PASS }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: ./gradlew publish --no-daemon --max-workers 1 + run: ./gradlew publishMavenPublicationToGitHubPackagesRepository --no-daemon --max-workers 1 + - name: Publish to modmaven + env: + KEY_STORE_PASS: ${{ secrets.KEY_STORE_PASS }} + KEY_STORE_ALIAS: ${{ secrets.KEY_STORE_ALIAS }} + KEY_STORE_KEY_PASS: ${{ secrets.KEY_STORE_KEY_PASS }} + MODMAVEN_USER: ${{ secrets.MODMAVEN_USER }} + MODMAVEN_PASSWORD: ${{ secrets.MODMAVEN_PASSWORD }} + run: ./gradlew publishMavenPublicationToModmavenRepository --no-daemon --max-workers 1 - name: Prepare artifact metadata id: prepare_artifact_metadata run: | diff --git a/build.gradle b/build.gradle index 5abf5b3bd..04ce36ad3 100644 --- a/build.gradle +++ b/build.gradle @@ -205,5 +205,13 @@ publishing { name = "GitHubPackages" url = "https://maven.pkg.github.com/AppliedEnergistics/Applied-Energistics-2" } + maven { + credentials { + username System.getenv("MODMAVEN_USER") + password System.getenv("MODMAVEN_PASSWORD") + } + name = "modmaven" + url = "https://modmaven.k-4u.nl/artifactory/local-releases/" + } } }