Skip to content

Commit 6631249

Browse files
committed
Removed own event bus and fully migrated into event-based system.
1 parent 7047bed commit 6631249

25 files changed

+233
-335
lines changed

src/main/java/stellarapi/ClientProxy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void preInit(FMLPreInitializationEvent event) {
3232

3333
this.overlay = new OverlayHandler();
3434

35-
MinecraftForge.EVENT_BUS.register(new SAPIClientForgeEventHook(this.overlay));
35+
MinecraftForge.EVENT_BUS.register(new SAPIClientEventHook(this.overlay));
3636

3737
this.guiConfig = new ConfigManager(
3838
StellarAPI.getConfiguration(event.getModConfigurationDirectory(), "GuiConfig.cfg"));

src/main/java/stellarapi/SAPIClientForgeEventHook.java renamed to src/main/java/stellarapi/SAPIClientEventHook.java

Lines changed: 59 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,41 @@
55

66
import org.lwjgl.input.Keyboard;
77

8+
import net.minecraft.block.state.IBlockState;
89
import net.minecraft.client.Minecraft;
910
import net.minecraft.client.renderer.EntityRenderer;
1011
import net.minecraft.client.renderer.texture.DynamicTexture;
1112
import net.minecraft.client.settings.KeyBinding;
13+
import net.minecraft.entity.Entity;
14+
import net.minecraft.entity.EntityLivingBase;
15+
import net.minecraft.item.ItemStack;
1216
import net.minecraft.world.World;
1317
import net.minecraftforge.client.IRenderHandler;
1418
import net.minecraftforge.client.event.EntityViewRenderEvent;
1519
import net.minecraftforge.client.event.RenderGameOverlayEvent;
1620
import net.minecraftforge.client.event.RenderWorldLastEvent;
21+
import net.minecraftforge.common.MinecraftForge;
1722
import net.minecraftforge.fml.client.registry.ClientRegistry;
23+
import net.minecraftforge.fml.common.Mod;
1824
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
1925
import net.minecraftforge.fml.common.eventhandler.EventPriority;
2026
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
2127
import net.minecraftforge.fml.common.gameevent.InputEvent.KeyInputEvent;
2228
import net.minecraftforge.fml.common.gameevent.TickEvent;
2329
import net.minecraftforge.fml.relauncher.ReflectionHelper;
30+
import net.minecraftforge.fml.relauncher.Side;
2431
import stellarapi.api.ICelestialWorld;
2532
import stellarapi.api.SAPICapabilities;
26-
import stellarapi.api.SAPIReferences;
27-
import stellarapi.api.optics.EyeDetector;
28-
import stellarapi.api.optics.IOpticalProp;
29-
import stellarapi.api.optics.NakedFilter;
33+
import stellarapi.api.event.FilterQEEvent;
34+
import stellarapi.api.interact.IFilter;
35+
import stellarapi.api.interact.IScope;
36+
import stellarapi.api.optics.EnumRGBA;
37+
import stellarapi.api.optics.Wavelength;
3038
import stellarapi.api.render.IAdaptiveRenderer;
3139
import stellarapi.feature.gui.overlay.OverlayHandler;
3240
import stellarapi.reference.CelestialPackManager;
3341

34-
public class SAPIClientForgeEventHook {
42+
public class SAPIClientEventHook {
3543

3644
private static final Field lightMapField = ReflectionHelper.findField(EntityRenderer.class,
3745
ObfuscationReflectionHelper.remapFieldNames(EntityRenderer.class.getName(), "lightmapTexture",
@@ -55,9 +63,8 @@ public class SAPIClientForgeEventHook {
5563
private KeyBinding focusGuiKey = new KeyBinding("key.stellarapi.focusgui.description", Keyboard.KEY_U,
5664
"key.stellarapi");
5765

58-
public SAPIClientForgeEventHook(OverlayHandler overlay) {
66+
public SAPIClientEventHook(OverlayHandler overlay) {
5967
ClientRegistry.registerKeyBinding(this.focusGuiKey);
60-
6168
this.overlay = overlay;
6269
}
6370

@@ -76,21 +83,54 @@ public void onRenderWorldLast(RenderWorldLastEvent event) {
7683
}
7784

7885
@SubscribeEvent(priority = EventPriority.LOWEST)
79-
public void onUpdateFOV(EntityViewRenderEvent.FOVModifier event) {
80-
// TODO AA FOV change - manual?
86+
public void onDecideFOV(EntityViewRenderEvent.FOVModifier event) {
87+
if(event.getEntity() instanceof EntityLivingBase) {
88+
EntityLivingBase viewer = (EntityLivingBase) event.getEntity();
89+
ItemStack active = viewer.getActiveItemStack();
90+
if(active != null) {
91+
IScope scope = active.getCapability(SAPICapabilities.SCOPE_CAPABILITY, null);
92+
if(scope != null)
93+
event.setFOV(scope.transformFOV(event.getFOV()));
94+
}
95+
}
96+
}
97+
98+
@SubscribeEvent(priority = EventPriority.LOWEST)
99+
public void onDecideQE(FilterQEEvent event) {
100+
if(event.getEntity() instanceof EntityLivingBase) {
101+
EntityLivingBase viewer = (EntityLivingBase) event.getEntity();
102+
ItemStack active = viewer.getActiveItemStack();
103+
if(active != null) {
104+
IFilter filter = active.getCapability(SAPICapabilities.FILTER_CAPABILITY, null);
105+
if(filter != null)
106+
event.setQE(filter.transformQE(event.getWavelength(), event.getQE()));
107+
}
108+
}
109+
}
110+
111+
112+
private float getFilterQE(EntityViewRenderEvent event, Wavelength wavelengthIn, float initialQE) {
113+
return getFilterQE(event.getRenderer(), event.getEntity(), event.getState(), event.getRenderPartialTicks(), wavelengthIn, initialQE);
114+
}
115+
116+
private float getFilterQE(EntityRenderer renderer, Entity entity, IBlockState state, double renderPartialTicks, Wavelength wavelengthIn, float initialQE) {
117+
FilterQEEvent event = new FilterQEEvent(renderer, entity, state, renderPartialTicks, wavelengthIn, initialQE);
118+
MinecraftForge.EVENT_BUS.post(event);
119+
return event.getQE();
81120
}
82121

83122
@SubscribeEvent(priority = EventPriority.LOWEST)
84123
public void onDecideFogColor(EntityViewRenderEvent.FogColors event) {
85-
IOpticalProp filter = SAPIReferences.getFilter(event.getEntity());
124+
//IOpticalProp filter = SAPIReferences.getFilter(event.getEntity());
125+
float[] eff = new float[3];
126+
for(EnumRGBA color : EnumRGBA.RGB)
127+
eff[color.ordinal()] = this.getFilterQE(event, Wavelength.colorWaveMap.get(color), 1.0f);
86128

87-
double[] value = EyeDetector.getInstance().process(1.0, filter,
88-
new double[] { event.getRed(), event.getGreen(), event.getBlue() });
89-
event.setRed((float) Math.min(value[0], 1.0));
90-
event.setGreen((float) Math.min(value[1], 1.0));
91-
event.setBlue((float) Math.min(value[2], 1.0));
129+
event.setRed((float) Math.min(event.getRed() * eff[0], 1.0));
130+
event.setGreen((float) Math.min(event.getGreen() * eff[1], 1.0));
131+
event.setBlue((float) Math.min(event.getBlue() * eff[2], 1.0));
92132

93-
if (!(filter instanceof NakedFilter)) {
133+
if (eff[0] != 1.0f || eff[1] != 1.0f || eff[2] != 1.0f) {
94134
DynamicTexture texture;
95135
try {
96136
texture = (DynamicTexture) lightMapField.get(event.getRenderer());
@@ -101,12 +141,9 @@ public void onDecideFogColor(EntityViewRenderEvent.FogColors event) {
101141
int green = ((data & 0x0000ff00) >> 8);
102142
int blue = data & 0x000000ff;
103143

104-
double[] modified = EyeDetector.getInstance().process(1.0, filter,
105-
new double[] { red / 255.0, green / 255.0, blue / 255.0 });
106-
107-
red = Math.min(0xff, (int) (modified[0] * 0xff));
108-
green = Math.min(0xff, (int) (modified[1] * 0xff));
109-
blue = Math.min(0xff, (int) (modified[2] * 0xff));
144+
red = Math.min(0xff, (int) (red * eff[0]));
145+
green = Math.min(0xff, (int) (green * eff[1]));
146+
blue = Math.min(0xff, (int) (blue * eff[2]));
110147

111148
texture.getTextureData()[i] = 255 << 24 | red << 16 | green << 8 | blue;
112149
}
@@ -130,7 +167,6 @@ public void renderGameOverlay(RenderGameOverlayEvent.Post event) {
130167
@SubscribeEvent
131168
public void onTick(TickEvent.ClientTickEvent event) {
132169
if (event.phase == TickEvent.Phase.START) {
133-
//Minecraft mc = Minecraft.getMinecraft();
134170
overlay.updateOverlay();
135171
}
136172
}

src/main/java/stellarapi/SAPIForgeEventHook.java renamed to src/main/java/stellarapi/SAPICommonEventHook.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import net.minecraft.world.World;
55
import net.minecraftforge.event.entity.player.PlayerSleepInBedEvent;
66
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
7+
import net.minecraftforge.fml.common.Mod;
78
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
9+
import net.minecraftforge.fml.relauncher.Side;
810
import stellarapi.api.SAPIReferences;
911

10-
public class SAPIForgeEventHook {
12+
public class SAPICommonEventHook {
1113
@SubscribeEvent
1214
public void onSleepInBed(PlayerSleepInBedEvent event) {
1315
if (!SAPIReferences.getSleepWakeManager().isEnabled() || event.getEntityPlayer().world.isRemote) {

src/main/java/stellarapi/SAPIOwnEventHook.java

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

src/main/java/stellarapi/StellarAPI.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public static Configuration getConfiguration(File configDir, String subName) {
5858

5959
private Logger logger;
6060

61-
private SAPIForgeEventHook eventHook = new SAPIForgeEventHook();
61+
private SAPICommonEventHook eventHook = new SAPICommonEventHook();
6262
private SAPITickHandler tickHandler = new SAPITickHandler();
6363
private StellarAPINetworkManager networkManager = new StellarAPINetworkManager();
6464

@@ -118,8 +118,6 @@ public void preInit(FMLPreInitializationEvent event) {
118118

119119
SAPIReferences.registerPerDimResourceHandler(PerDimensionResourceRegistry.getInstance());
120120

121-
SAPIReferences.getEventBus().register(new SAPIOwnEventHook());
122-
123121
PROXY.preInit(event);
124122

125123
CompatManager.getInstance().onPreInit();

src/main/java/stellarapi/api/SAPICapabilities.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,17 @@
22

33
import net.minecraftforge.common.capabilities.Capability;
44
import net.minecraftforge.common.capabilities.CapabilityInject;
5+
import stellarapi.api.interact.IFilter;
6+
import stellarapi.api.interact.IScope;
57

68
public class SAPICapabilities {
79
@CapabilityInject(ICelestialWorld.class)
810
public static final Capability<ICelestialWorld> CELESTIAL_CAPABILITY = null;
11+
12+
13+
@CapabilityInject(IScope.class)
14+
public static final Capability<IScope> SCOPE_CAPABILITY = null;
15+
16+
@CapabilityInject(IFilter.class)
17+
public static final Capability<IFilter> FILTER_CAPABILITY = null;
918
}

src/main/java/stellarapi/api/SAPIReferences.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ public final class SAPIReferences {
4949

5050
private PerDimensionResourceManager resourceManager = new PerDimensionResourceManager();
5151

52-
private EventBus stellarEventBus = new EventBus();
53-
5452
private static final SAPIReferences INSTANCE = new SAPIReferences();
5553

5654
/** Getter for the daytime checker. */
@@ -188,13 +186,6 @@ public static void registerPerDimResourceHandler(IPerDimensionResourceHandler ha
188186
INSTANCE.resourceManager.register(handler);
189187
}
190188

191-
/**
192-
* Gets the event bus for Stellar API.
193-
*/
194-
public static EventBus getEventBus() {
195-
return INSTANCE.stellarEventBus;
196-
}
197-
198189
/**
199190
* Gets celestial coordinate for certain world.
200191
* <p>

src/main/java/stellarapi/api/event/FilterQEEvent.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
package stellarapi.api.event;
22

3-
import gnu.trove.map.TObjectFloatMap;
3+
import net.minecraft.block.state.IBlockState;
4+
import net.minecraft.client.renderer.EntityRenderer;
45
import net.minecraft.entity.Entity;
6+
import net.minecraftforge.client.event.EntityViewRenderEvent;
57
import stellarapi.api.optics.Wavelength;
68

79
/**
810
* Event that determines quantum efficiency of filter for an entity.
911
* */
10-
public class FilterQEEvent extends PerEntityEvent {
11-
public final Wavelength wavelength;
12+
public class FilterQEEvent extends EntityViewRenderEvent {
13+
private final Wavelength wavelength;
1214
private float efficiency;
1315

14-
public FilterQEEvent(Entity entity, Wavelength wavelengthIn, float initialQE) {
15-
super(entity);
16+
public FilterQEEvent(EntityRenderer renderer, Entity entity, IBlockState state, double renderPartialTicks, Wavelength wavelengthIn, float initialQE) {
17+
super(renderer, entity, state, renderPartialTicks);
1618
this.wavelength = wavelengthIn;
1719
this.efficiency = initialQE;
1820
}
1921

22+
public Wavelength getWavelength() {
23+
return this.wavelength;
24+
}
25+
2026
public float getQE() {
2127
return this.efficiency;
2228
}

src/main/java/stellarapi/api/event/PerEntityEvent.java

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

src/main/java/stellarapi/api/event/interact/CheckEntityOpticalViewerEvent.java

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

0 commit comments

Comments
 (0)