Skip to content

Commit 2d9ca5c

Browse files
authored
Merge pull request #16 from ABKQPO/master
修复反射变量找不到
2 parents 452ff76 + f5f9892 commit 2d9ca5c

10 files changed

Lines changed: 127 additions & 53 deletions

File tree

dependencies.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
*/
3131
dependencies {
3232
api('com.github.GTNewHorizons:Galaxy-Space-GTNH:1.1.121-GTNH:dev')
33-
api('com.github.GTNewHorizons:GT5-Unofficial:5.09.51.459:dev')
33+
api('com.github.GTNewHorizons:GT5-Unofficial:5.09.51.470:dev')
3434
api('com.github.GTNewHorizons:CodeChickenCore:1.4.7:dev')
35-
implementation('com.github.GTNewHorizons:NewHorizonsCoreMod:2.7.256:dev')
35+
implementation('com.github.GTNewHorizons:NewHorizonsCoreMod:2.7.260:dev')
3636
implementation('com.github.GTNewHorizons:Avaritia:1.75:dev')
3737
runtimeOnlyNonPublishable('com.github.GTNewHorizons:ServerUtilities:2.1.61:dev')
3838
runtimeOnlyNonPublishable('com.github.GTNewHorizons:BlockRenderer6343:1.3.16:dev')

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ apiPackage =
8383
accessTransformersFile =
8484

8585
# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled!
86-
usesMixins = false
86+
usesMixins = true
8787

8888
# Set to a non-empty string to configure mixins in a separate source set under src/VALUE, instead of src/main.
8989
# This can speed up compile times thanks to not running the mixin annotation processor on all input sources.
@@ -97,7 +97,7 @@ usesMixinDebug = true
9797
mixinPlugin =
9898

9999
# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail!
100-
mixinsPackage =
100+
mixinsPackage = mixins
101101

102102
# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin!
103103
# This parameter is for legacy compatibility only

src/main/java/com/silvermoon/boxplusplus/client/BoxNEIHandler.java

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
package com.silvermoon.boxplusplus.client;
22

3-
import java.lang.reflect.InvocationTargetException;
4-
import java.lang.reflect.Method;
53
import java.util.*;
64

75
import net.minecraft.client.gui.GuiButton;
8-
import net.minecraft.client.gui.GuiScreen;
9-
import net.minecraft.client.gui.inventory.GuiContainer;
106
import net.minecraft.entity.player.EntityPlayer;
117
import net.minecraftforge.client.event.GuiScreenEvent;
128

139
import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui;
1410
import com.silvermoon.boxplusplus.common.tileentities.GTMachineBox;
11+
import com.silvermoon.boxplusplus.mixins.AccessorGuiContainer;
12+
import com.silvermoon.boxplusplus.mixins.AccessorGuiRecipe;
13+
import com.silvermoon.boxplusplus.mixins.AccessorGuiScreen;
1514
import com.silvermoon.boxplusplus.util.BoxRoutings;
1615
import com.silvermoon.boxplusplus.util.Util;
1716

1817
import codechicken.nei.GuiNEIButton;
1918
import codechicken.nei.recipe.*;
20-
import cpw.mods.fml.common.ObfuscationReflectionHelper;
2119
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
2220
import gregtech.nei.GTNEIDefaultHandler;
2321

@@ -29,32 +27,25 @@ public class BoxNEIHandler {
2927

3028
@SubscribeEvent
3129
public void onDrawScreen(GuiScreenEvent.DrawScreenEvent.Post event) {
32-
if (event.gui instanceof GuiRecipe gui && gui.firstGui instanceof ModularGui mui
30+
if (event.gui instanceof GuiRecipe<?>gui && gui.firstGui instanceof ModularGui mui
3331
&& mui.getContext()
3432
.isWindowOpen(10)) {
35-
EntityPlayer player = ((ModularGui) gui.firstGui).getContext()
33+
EntityPlayer player = mui.getContext()
3634
.getPlayer();
3735
GTMachineBox box = Util.boxMap.get(player);
3836
if (box == null || box.getBaseMetaTileEntity()
3937
.isDead() || box.recipe.islocked) return;
40-
List buttonList = ObfuscationReflectionHelper
41-
.getPrivateValue(GuiScreen.class, gui, "field_146292_n", "buttonList");
38+
List<GuiButton> buttonList = ((AccessorGuiScreen) gui).getButtonList();
4239
if (buttons != null) {
4340
buttonList.removeIf(Arrays.asList(buttons)::contains);
4441
}
45-
Method getRecipesPerPage;
46-
try {
47-
getRecipesPerPage = GuiRecipe.class.getDeclaredMethod("getRecipesPerPage");
48-
getRecipesPerPage.setAccessible(true);
49-
recipesPerPage = (int) getRecipesPerPage.invoke(gui);
50-
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ignored) {}
42+
recipesPerPage = ((AccessorGuiRecipe) gui).invokeGetRecipesPerPage();
5143
buttons = new GuiButton[recipesPerPage];
5244
int OVERLAY_BUTTON_ID_START = 4;
53-
int guiTop = ObfuscationReflectionHelper
54-
.getPrivateValue(GuiContainer.class, gui, "field_147009_r", "guiTop");
55-
int buttonWidth = ObfuscationReflectionHelper.getPrivateValue(GuiRecipe.class, gui, "buttonWidth");
56-
int buttonHeight = ObfuscationReflectionHelper.getPrivateValue(GuiRecipe.class, gui, "buttonHeight");
57-
HandlerInfo handlerInfo = ObfuscationReflectionHelper.getPrivateValue(GuiRecipe.class, gui, "handlerInfo");
45+
int guiTop = ((AccessorGuiContainer) gui).getGuiTop();
46+
int buttonWidth = ((AccessorGuiRecipe) gui).getButtonWidth();
47+
int buttonHeight = ((AccessorGuiRecipe) gui).getButtonHeight();
48+
HandlerInfo handlerInfo = ((AccessorGuiRecipe) gui).getHandlerInfo();
5849
for (int i = 0; i < recipesPerPage; i++) {
5950
buttons[i] = new GuiNEIButton(
6051
OVERLAY_BUTTON_ID_START + i,
@@ -81,17 +72,17 @@ public void onDrawScreen(GuiScreenEvent.DrawScreenEvent.Post event) {
8172

8273
@SubscribeEvent
8374
public void onActionPerformedEventPre(GuiScreenEvent.ActionPerformedEvent.Pre event) {
84-
if (event.gui instanceof GuiRecipe gui && gui.firstGui instanceof ModularGui mui
75+
if (event.gui instanceof GuiRecipe<?>gui && gui.firstGui instanceof ModularGui mui
8576
&& mui.getContext()
8677
.isWindowOpen(10)) {
87-
EntityPlayer player = ((ModularGui) gui.firstGui).getContext()
78+
EntityPlayer player = mui.getContext()
8879
.getPlayer();
8980
List<GuiButton> overlayButtons = new ArrayList<>(
90-
Arrays.asList(ObfuscationReflectionHelper.getPrivateValue(GuiRecipe.class, gui, "overlayButtons")));
81+
Arrays.asList(((AccessorGuiRecipe) gui).getOverlayButtons()));
9182
int OVERLAY_BUTTON_ID_START = 4;
9283
if (event.button.id >= OVERLAY_BUTTON_ID_START
9384
&& event.button.id < OVERLAY_BUTTON_ID_START + overlayButtons.size()) {
94-
IRecipeHandler handler = (IRecipeHandler) gui.currenthandlers.get(gui.recipetype);
85+
IRecipeHandler handler = gui.currenthandlers.get(gui.recipetype);
9586
if (recipesPerPage >= 0 && handler != null) {
9687
int recipe = gui.page * recipesPerPage + event.button.id - OVERLAY_BUTTON_ID_START;
9788
BoxRoutings

src/main/java/com/silvermoon/boxplusplus/common/render/RenderBoxRing.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,26 @@ public class RenderBoxRing extends TileEntitySpecialRenderer {
2626
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float partialTicks) {
2727
if (!(tile instanceof TEBoxRing ring)) return;
2828

29+
float rotation = ring.getInterpolatedRotation(partialTicks);
30+
2931
GL11.glPushMatrix();
3032
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
3133

32-
double rotation = ring.getInterpolatedRotation(partialTicks);
33-
3434
if (ring.teRingSwitch && ring.renderStatus) {
35-
GL11.glRotated(rotation, 1, 1, 1);
36-
renderRing((float) (1.1f * ring.scale));
37-
GL11.glRotated(rotation, 0, 0, 1);
38-
renderRing((float) (1.4f * ring.scale));
35+
GL11.glRotatef(rotation, 1, 1, 1);
36+
renderRing(1.1f * ring.scale);
37+
if (ring.count > 1) {
38+
GL11.glRotatef(rotation, 0, 0, 1);
39+
renderRing(1.4f * ring.scale);
40+
}
41+
if (ring.count > 2) {
42+
GL11.glRotatef(rotation, 1, 0, 0);
43+
renderRing(1.8f * ring.scale);
44+
}
3945
}
4046

41-
GL11.glRotated(rotation, 0, -1, 1);
47+
GL11.glRotatef(rotation, 0, -1, 1);
4248
renderRing(0.0118f);
43-
4449
GL11.glPopMatrix();
4550
}
4651

src/main/java/com/silvermoon/boxplusplus/common/tileentities/GTMachineBox.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,7 +1297,10 @@ && checkPiece(STRUCTURE_PIECE_Final, 23, 5, 20)) {
12971297
return false;
12981298
}
12991299
}
1300-
if (teBoxRing != null && ringCount == 3) teBoxRing.renderStatus = true;
1300+
if (teBoxRing != null) {
1301+
teBoxRing.renderStatus = true;
1302+
teBoxRing.count = ringCount;
1303+
}
13011304
return true;
13021305
}
13031306

src/main/java/com/silvermoon/boxplusplus/common/tileentities/TEBoxRing.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.minecraft.nbt.NBTTagCompound;
44
import net.minecraft.util.AxisAlignedBB;
5+
import net.minecraft.util.MathHelper;
56

67
import cpw.mods.fml.relauncher.Side;
78
import micdoodle8.mods.galacticraft.core.tile.TileEntityAdvanced;
@@ -10,21 +11,24 @@
1011
public class TEBoxRing extends TileEntityAdvanced {
1112

1213
@Annotations.NetworkedField(targetSide = Side.CLIENT)
13-
public double scale = 1;
14+
public float scale = 1;
1415

1516
@Annotations.NetworkedField(targetSide = Side.CLIENT)
16-
public double rotation = 0;
17+
public float rotation = 0;
1718

1819
@Annotations.NetworkedField(targetSide = Side.CLIENT)
19-
public double prevRotation = 0;
20+
public float prevRotation = 0;
2021

2122
@Annotations.NetworkedField(targetSide = Side.CLIENT)
2223
public boolean renderStatus = false;
2324

2425
@Annotations.NetworkedField(targetSide = Side.CLIENT)
2526
public boolean teRingSwitch = true;
2627

27-
private static final double ROTATION_SPEED = 1.2;
28+
@Annotations.NetworkedField(targetSide = Side.CLIENT)
29+
public int count = 1;
30+
31+
private static float ROTATION_SPEED = 1.2f;
2832

2933
@Override
3034
public AxisAlignedBB getRenderBoundingBox() {
@@ -40,18 +44,20 @@ public double getMaxRenderDistanceSquared() {
4044
public void writeToNBT(NBTTagCompound nbt) {
4145
super.writeToNBT(nbt);
4246
nbt.setBoolean("renderStatus", renderStatus);
43-
nbt.setDouble("scale", scale);
44-
nbt.setDouble("rotation", rotation);
47+
nbt.setFloat("scale", scale);
48+
nbt.setFloat("rotation", rotation);
4549
nbt.setBoolean("switch", teRingSwitch);
50+
nbt.setInteger("count", count);
4651
}
4752

4853
@Override
4954
public void readFromNBT(NBTTagCompound nbt) {
5055
super.readFromNBT(nbt);
5156
renderStatus = nbt.getBoolean("renderStatus");
52-
rotation = nbt.getDouble("rotation");
53-
scale = nbt.getDouble("scale");
57+
rotation = nbt.getFloat("rotation");
58+
scale = nbt.getFloat("scale");
5459
teRingSwitch = nbt.getBoolean("switch");
60+
count = nbt.getInteger("count");
5561
}
5662

5763
@Override
@@ -73,15 +79,12 @@ public boolean isNetworkedTile() {
7379
public void updateEntity() {
7480
super.updateEntity();
7581
prevRotation = rotation;
76-
rotation = (rotation + ROTATION_SPEED) % 360d;
82+
rotation = (rotation + ROTATION_SPEED) % 360f;
7783
}
7884

79-
public double getInterpolatedRotation(float partialTicks) {
80-
double delta = rotation - prevRotation;
81-
82-
if (delta < -180.0) delta += 360.0;
83-
if (delta > 180.0) delta -= 360.0;
84-
85-
return (prevRotation + delta * partialTicks) % 360.0;
85+
public float getInterpolatedRotation(float partialTicks) {
86+
float delta = MathHelper.wrapAngleTo180_float(rotation - prevRotation);
87+
return prevRotation + delta * partialTicks;
8688
}
89+
8790
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.silvermoon.boxplusplus.mixins;
2+
3+
import net.minecraft.client.gui.inventory.GuiContainer;
4+
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.gen.Accessor;
7+
8+
@Mixin(value = GuiContainer.class)
9+
public interface AccessorGuiContainer {
10+
11+
@Accessor("guiTop")
12+
int getGuiTop();
13+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.silvermoon.boxplusplus.mixins;
2+
3+
import org.spongepowered.asm.mixin.Mixin;
4+
import org.spongepowered.asm.mixin.gen.Accessor;
5+
import org.spongepowered.asm.mixin.gen.Invoker;
6+
7+
import codechicken.nei.recipe.GuiOverlayButton;
8+
import codechicken.nei.recipe.GuiRecipe;
9+
import codechicken.nei.recipe.HandlerInfo;
10+
11+
@Mixin(value = GuiRecipe.class, remap = false)
12+
public interface AccessorGuiRecipe {
13+
14+
@Invoker("getRecipesPerPage")
15+
int invokeGetRecipesPerPage();
16+
17+
@Accessor("BUTTON_HEIGHT")
18+
int getButtonHeight();
19+
20+
@Accessor("BUTTON_WIDTH")
21+
int getButtonWidth();
22+
23+
@Accessor("handlerInfo")
24+
HandlerInfo getHandlerInfo();
25+
26+
@Accessor("overlayButtons")
27+
GuiOverlayButton[] getOverlayButtons();
28+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.silvermoon.boxplusplus.mixins;
2+
3+
import java.util.List;
4+
5+
import net.minecraft.client.gui.GuiButton;
6+
import net.minecraft.client.gui.GuiScreen;
7+
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.gen.Accessor;
10+
11+
@Mixin(value = GuiScreen.class)
12+
public interface AccessorGuiScreen {
13+
14+
@Accessor("buttonList")
15+
List<GuiButton> getButtonList();
16+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"required": true,
3+
"minVersion": "0.8.5-GTNH",
4+
"package": "com.silvermoon.boxplusplus.mixins",
5+
"refmap": "mixins.boxplusplus.refmap.json",
6+
"target": "@env(DEFAULT)",
7+
"compatibilityLevel": "JAVA_8",
8+
"mixins": [],
9+
"client": [
10+
"AccessorGuiContainer",
11+
"AccessorGuiRecipe",
12+
"AccessorGuiScreen"
13+
],
14+
"server": []
15+
}

0 commit comments

Comments
 (0)