Skip to content

Commit 33dd429

Browse files
davenonymousthraaawn
authored andcommitted
Added is_compactsky advancement trigger
This allows restricting advancements to the Compact Sky world type.
1 parent ded7b56 commit 33dd429

File tree

4 files changed

+172
-1
lines changed

4 files changed

+172
-1
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.dave.compactmachines3.init;
2+
3+
import net.minecraft.util.ResourceLocation;
4+
import org.dave.compactmachines3.CompactMachines3;
5+
import org.dave.compactmachines3.misc.BaseTrigger;
6+
7+
public class Triggerss {
8+
public static final BaseTrigger IS_SKYWORLD = new BaseTrigger(new ResourceLocation(CompactMachines3.MODID, "is_compactsky"));
9+
}
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
package org.dave.compactmachines3.misc;
2+
3+
import com.google.common.collect.Lists;
4+
import com.google.common.collect.Maps;
5+
import com.google.common.collect.Sets;
6+
import com.google.gson.JsonDeserializationContext;
7+
import com.google.gson.JsonObject;
8+
import net.minecraft.advancements.ICriterionTrigger;
9+
import net.minecraft.advancements.PlayerAdvancements;
10+
import net.minecraft.advancements.critereon.AbstractCriterionInstance;
11+
import net.minecraft.entity.player.EntityPlayerMP;
12+
import net.minecraft.util.ResourceLocation;
13+
14+
import java.util.List;
15+
import java.util.Map;
16+
import java.util.Set;
17+
18+
public class BaseTrigger implements ICriterionTrigger<BaseTrigger.Instance> {
19+
private final ResourceLocation ID;
20+
private final Map<PlayerAdvancements, Listeners> listeners = Maps.<PlayerAdvancements, BaseTrigger.Listeners>newHashMap();
21+
22+
public BaseTrigger(String parString) {
23+
super();
24+
ID = new ResourceLocation(parString);
25+
}
26+
27+
public BaseTrigger(ResourceLocation parRL) {
28+
super();
29+
ID = parRL;
30+
}
31+
32+
@Override
33+
public ResourceLocation getId() {
34+
return ID;
35+
}
36+
37+
@Override
38+
public void addListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener<BaseTrigger.Instance> listener) {
39+
BaseTrigger.Listeners basetrigger$listeners = this.listeners.get(playerAdvancementsIn);
40+
41+
if (basetrigger$listeners == null) {
42+
basetrigger$listeners = new BaseTrigger.Listeners(playerAdvancementsIn);
43+
this.listeners.put(playerAdvancementsIn, basetrigger$listeners);
44+
}
45+
46+
basetrigger$listeners.add(listener);
47+
}
48+
49+
@Override
50+
public void removeListener(PlayerAdvancements playerAdvancementsIn, ICriterionTrigger.Listener<BaseTrigger.Instance> listener) {
51+
BaseTrigger.Listeners basetrigger$listeners = this.listeners.get(playerAdvancementsIn);
52+
53+
if (basetrigger$listeners != null) {
54+
basetrigger$listeners.remove(listener);
55+
56+
if (basetrigger$listeners.isEmpty()) {
57+
this.listeners.remove(playerAdvancementsIn);
58+
}
59+
}
60+
}
61+
62+
@Override
63+
public void removeAllListeners(PlayerAdvancements playerAdvancementsIn) {
64+
this.listeners.remove(playerAdvancementsIn);
65+
}
66+
67+
@Override
68+
public BaseTrigger.Instance deserializeInstance(JsonObject json, JsonDeserializationContext context) {
69+
return new BaseTrigger.Instance(this.getId());
70+
}
71+
72+
public void trigger(EntityPlayerMP parPlayer) {
73+
BaseTrigger.Listeners basetrigger$listeners = this.listeners.get(parPlayer.getAdvancements());
74+
75+
if (basetrigger$listeners != null) {
76+
basetrigger$listeners.trigger(parPlayer);
77+
}
78+
}
79+
80+
public static class Instance extends AbstractCriterionInstance {
81+
82+
public Instance(ResourceLocation parID) {
83+
super(parID);
84+
}
85+
86+
public boolean test() {
87+
return true;
88+
}
89+
}
90+
91+
static class Listeners {
92+
private final PlayerAdvancements playerAdvancements;
93+
private final Set<Listener<Instance>> listeners = Sets.<ICriterionTrigger.Listener<BaseTrigger.Instance>>newHashSet();
94+
95+
public Listeners(PlayerAdvancements playerAdvancementsIn) {
96+
this.playerAdvancements = playerAdvancementsIn;
97+
}
98+
99+
public boolean isEmpty() {
100+
return this.listeners.isEmpty();
101+
}
102+
103+
public void add(ICriterionTrigger.Listener<BaseTrigger.Instance> listener) {
104+
this.listeners.add(listener);
105+
}
106+
107+
public void remove(ICriterionTrigger.Listener<BaseTrigger.Instance> listener) {
108+
this.listeners.remove(listener);
109+
}
110+
111+
public void trigger(EntityPlayerMP player) {
112+
List<Listener<Instance>> list = null;
113+
114+
for (ICriterionTrigger.Listener<BaseTrigger.Instance> listener : this.listeners) {
115+
if (listener.getCriterionInstance().test()) {
116+
if (list == null) {
117+
list = Lists.<ICriterionTrigger.Listener<BaseTrigger.Instance>>newArrayList();
118+
}
119+
120+
list.add(listener);
121+
}
122+
}
123+
124+
if (list != null) {
125+
for (ICriterionTrigger.Listener<BaseTrigger.Instance> listener1 : list) {
126+
listener1.grantCriterion(this.playerAdvancements);
127+
}
128+
}
129+
}
130+
}
131+
}

src/main/java/org/dave/compactmachines3/proxy/CommonProxy.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.dave.compactmachines3.proxy;
22

3+
import net.minecraft.advancements.CriteriaTriggers;
4+
import net.minecraft.advancements.ICriterionTrigger;
35
import net.minecraft.block.Block;
46
import net.minecraft.block.material.Material;
57
import net.minecraft.item.Item;
@@ -12,14 +14,19 @@
1214
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
1315
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
1416
import net.minecraftforge.fml.common.registry.GameRegistry;
17+
import net.minecraftforge.fml.relauncher.ReflectionHelper;
1518
import org.dave.compactmachines3.CompactMachines3;
1619
import org.dave.compactmachines3.block.*;
1720
import org.dave.compactmachines3.compat.CompatHandler;
1821
import org.dave.compactmachines3.init.Blockss;
22+
import org.dave.compactmachines3.init.Triggerss;
1923
import org.dave.compactmachines3.item.*;
2024
import org.dave.compactmachines3.misc.SoundHandler;
2125
import org.dave.compactmachines3.tile.*;
2226

27+
import java.lang.reflect.InvocationTargetException;
28+
import java.lang.reflect.Method;
29+
2330
@Mod.EventBusSubscriber
2431
public class CommonProxy {
2532
@SubscribeEvent
@@ -62,11 +69,23 @@ public static void registerItems(RegistryEvent.Register<Item> event) {
6269
event.getRegistry().register(new ItemRedstoneTunnelTool().setUnlocalizedName("redstonetunneltool").setRegistryName(CompactMachines3.MODID, "redstonetunneltool"));
6370
}
6471

72+
void registerTriggers() {
73+
Method method;
74+
try {
75+
method = ReflectionHelper.findMethod(CriteriaTriggers.class, "register", "func_192118_a", ICriterionTrigger.class);
76+
method.setAccessible(true);
77+
method.invoke(null, Triggerss.IS_SKYWORLD);
78+
} catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
79+
e.printStackTrace();
80+
}
81+
}
82+
6583
public void preInit(FMLPreInitializationEvent event) {
6684
CompatHandler.registerCompat();
6785
}
6886

6987
public void init(FMLInitializationEvent event) {
88+
registerTriggers();
7089
}
7190

7291
public void postInit(FMLPostInitializationEvent event) {

src/main/java/org/dave/compactmachines3/skyworld/SkyWorldEvents.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.dave.compactmachines3.skyworld;
22

33
import net.minecraft.entity.item.EntityItem;
4+
import net.minecraft.entity.player.EntityPlayerMP;
45
import net.minecraft.item.ItemStack;
56
import net.minecraft.util.math.BlockPos;
67
import net.minecraft.util.text.TextComponentTranslation;
@@ -9,13 +10,19 @@
910
import net.minecraftforge.event.world.BlockEvent;
1011
import net.minecraftforge.event.world.WorldEvent;
1112
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
12-
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
1313
import net.minecraftforge.fml.common.gameevent.TickEvent;
1414
import org.dave.compactmachines3.init.Itemss;
15+
import org.dave.compactmachines3.init.Triggerss;
1516
import org.dave.compactmachines3.utility.Logz;
1617
import org.dave.compactmachines3.utility.ShrinkingDeviceUtils;
1718

19+
import java.util.HashSet;
20+
import java.util.Set;
21+
import java.util.UUID;
22+
1823
public class SkyWorldEvents {
24+
private static Set<UUID> alreadyTriggered = new HashSet<>();
25+
1926
@SubscribeEvent
2027
public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
2128
World world = event.player.world;
@@ -27,6 +34,11 @@ public static void onPlayerTick(TickEvent.PlayerTickEvent event) {
2734
return;
2835
}
2936

37+
if(world.getWorldType() instanceof SkyWorldType && !alreadyTriggered.contains(event.player.getUniqueID())) {
38+
Triggerss.IS_SKYWORLD.trigger((EntityPlayerMP) event.player);
39+
alreadyTriggered.add(event.player.getUniqueID());
40+
}
41+
3042
WorldServer worldServer = (WorldServer)world;
3143
if(!(worldServer.getChunkProvider().chunkGenerator instanceof SkyChunkGenerator)) {
3244
return;

0 commit comments

Comments
 (0)