Skip to content

Commit 98c4b08

Browse files
committed
Advancements framework, better tele handling, player history start
1 parent 36bda1d commit 98c4b08

39 files changed

+738
-225
lines changed

build.gradle

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ minecraft {
5252
// Recommended logging level for the console
5353
property 'forge.logging.console.level', 'debug'
5454

55+
property 'mixin.env.remapRefMap', 'true'
56+
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
57+
5558
args '--username', 'Dev##'
5659

5760
mods {
@@ -70,6 +73,9 @@ minecraft {
7073
// Recommended logging level for the console
7174
property 'forge.logging.console.level', 'debug'
7275

76+
property 'mixin.env.remapRefMap', 'true'
77+
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
78+
7379
mods {
7480
compactmachines {
7581
source sourceSets.main
@@ -86,7 +92,13 @@ minecraft {
8692
// Recommended logging level for the console
8793
property 'forge.logging.console.level', 'debug'
8894

89-
args '--mod', 'compactmachines', '--existing', file('src/main/resources'), '--all', '--output', file('src/generated/resources/')
95+
property 'mixin.env.remapRefMap', 'true'
96+
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
97+
98+
args '--mod', mod_id
99+
args '--existing', file('src/main/resources')
100+
args '--all'
101+
args '--output', file('src/generated/resources/')
90102

91103
mods {
92104
compactmachines {

src/generated/resources/.cache/cache

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ bb446af024870e7a07d31a3c78cab75797392cd5 assets/compactmachines/models/tunnels/n
1313
2781d8f8d22db668495872f1bb39e2dd1290ab66 assets/compactmachines/models/tunnels/south.json
1414
955410e7497ca2252d75eac53d02fb96992d94c7 assets/compactmachines/models/tunnels/up.json
1515
f8748baf2b48a44db2cf8d3872bd09b54a822560 assets/compactmachines/models/tunnels/west.json
16+
26f679025def0ce9b0a9ec9d0e5f6ee83ea50bc3 data/compactmachines/advancements/how_did_you_get_here.json
1617
e012e4b65799a56d195a6324c82e2cdf7a5a91be data/compactmachines/advancements/recipes/compactmachines/personal_shrinking_device.json
1718
fd7ccf69e4445ba0a2d7b2cd405ebe2ae85be240 data/compactmachines/advancements/recipes/compactmachines/wall.json
19+
8533fe67af279b20dda70b20dbcb03a20b6c4f23 data/compactmachines/advancements/root.json
1820
fb5c7560898ae604661d0655c2a39e923eb1d4b4 data/compactmachines/loot_tables/blocks/machine_giant.json
1921
056d363f46ab1cc37c16f08428a3d2a9e0dd66d2 data/compactmachines/loot_tables/blocks/machine_large.json
2022
38a7648eb331daf18f5076126f31f31b6021ac51 data/compactmachines/loot_tables/blocks/machine_maximum.json
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"parent": "compactmachines:root",
3+
"display": {
4+
"icon": {
5+
"item": "compactmachines:personal_shrinking_device"
6+
},
7+
"title": {
8+
"translate": "advancement.compactmachines.how_did_you_get_here"
9+
},
10+
"description": {
11+
"translate": "advancement.compactmachines.how_did_you_get_here.desc"
12+
},
13+
"frame": "challenge",
14+
"show_toast": false,
15+
"announce_to_chat": true,
16+
"hidden": true
17+
},
18+
"criteria": {
19+
"got_stuck": {
20+
"trigger": "compactmachines:how_did_you_get_here",
21+
"conditions": {}
22+
}
23+
},
24+
"requirements": [
25+
[
26+
"got_stuck"
27+
]
28+
]
29+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"display": {
3+
"icon": {
4+
"item": "compactmachines:machine_normal"
5+
},
6+
"title": {
7+
"translate": "advancement.compactmachines.root"
8+
},
9+
"description": {
10+
"translate": "advancement.compactmachines.root.desc"
11+
},
12+
"frame": "task",
13+
"show_toast": false,
14+
"announce_to_chat": false,
15+
"hidden": true,
16+
"background": "compactmachines:textures/block/wall.png"
17+
},
18+
"criteria": {
19+
"root": {
20+
"trigger": "minecraft:impossible"
21+
}
22+
},
23+
"requirements": [
24+
[
25+
"root"
26+
]
27+
]
28+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.robotgryphon.compactmachines.advancement;
2+
3+
import com.robotgryphon.compactmachines.advancement.trigger.HowDidYouGetHereTrigger;
4+
import net.minecraft.advancements.CriteriaTriggers;
5+
6+
public class AdvancementTriggers {
7+
8+
public static final HowDidYouGetHereTrigger HOW_DID_YOU_GET_HERE = CriteriaTriggers.register(new HowDidYouGetHereTrigger());
9+
10+
public static void init() {}
11+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.robotgryphon.compactmachines.advancement;
2+
3+
import java.util.Set;
4+
import com.google.common.collect.Sets;
5+
import net.minecraft.advancements.ICriterionInstance;
6+
import net.minecraft.advancements.ICriterionTrigger;
7+
import net.minecraft.advancements.PlayerAdvancements;
8+
9+
public class GenericAdvancementTriggerListener<T extends ICriterionInstance> {
10+
11+
private final PlayerAdvancements advancements;
12+
private final Set<ICriterionTrigger.Listener<T>> listeners = Sets.newHashSet();
13+
14+
public GenericAdvancementTriggerListener(PlayerAdvancements advancements) {
15+
this.advancements = advancements;
16+
}
17+
18+
public void add(ICriterionTrigger.Listener<T> listener) {
19+
listeners.add(listener);
20+
}
21+
22+
public void remove(ICriterionTrigger.Listener<T> listener) {
23+
listeners.remove(listener);
24+
}
25+
26+
public boolean empty() {
27+
return listeners.isEmpty();
28+
}
29+
30+
public void trigger() {
31+
listeners.forEach(a -> a.run(advancements));
32+
}
33+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.robotgryphon.compactmachines.advancement;
2+
3+
import javax.annotation.Nullable;
4+
import java.util.Map;
5+
import com.google.common.collect.Maps;
6+
import com.robotgryphon.compactmachines.advancement.trigger.HowDidYouGetHereTrigger;
7+
import net.minecraft.advancements.ICriterionInstance;
8+
import net.minecraft.advancements.ICriterionTrigger;
9+
import net.minecraft.advancements.PlayerAdvancements;
10+
import net.minecraft.entity.player.ServerPlayerEntity;
11+
12+
public class GenericAdvancementTriggerListenerList<T extends ICriterionInstance> {
13+
private final Map<PlayerAdvancements, GenericAdvancementTriggerListener<T>> listeners = Maps.newHashMap();
14+
15+
16+
public void addPlayerListener(PlayerAdvancements advancements, ICriterionTrigger.Listener<T> listener) {
17+
GenericAdvancementTriggerListener<T> listeners = this.listeners.computeIfAbsent(advancements, GenericAdvancementTriggerListener::new);
18+
listeners.add(listener);
19+
}
20+
21+
public void removePlayerListener(PlayerAdvancements advancements, ICriterionTrigger.Listener<T> listener) {
22+
GenericAdvancementTriggerListener<T> listeners = this.listeners.get(advancements);
23+
if (listeners != null) {
24+
listeners.remove(listener);
25+
if (listeners.empty()) {
26+
this.listeners.remove(advancements);
27+
}
28+
}
29+
}
30+
31+
public void removePlayerListeners(PlayerAdvancements advancements) {
32+
this.listeners.remove(advancements);
33+
}
34+
35+
@Nullable
36+
public GenericAdvancementTriggerListener<T> getListeners(ServerPlayerEntity player) {
37+
return listeners.get(player.getAdvancements());
38+
}
39+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.robotgryphon.compactmachines.advancement.trigger;
2+
3+
import com.google.gson.JsonObject;
4+
import com.robotgryphon.compactmachines.advancement.GenericAdvancementTriggerListener;
5+
import com.robotgryphon.compactmachines.advancement.GenericAdvancementTriggerListenerList;
6+
import com.robotgryphon.compactmachines.api.core.Advancements;
7+
import net.minecraft.advancements.ICriterionTrigger;
8+
import net.minecraft.advancements.PlayerAdvancements;
9+
import net.minecraft.advancements.criterion.CriterionInstance;
10+
import net.minecraft.advancements.criterion.EntityPredicate;
11+
import net.minecraft.entity.player.ServerPlayerEntity;
12+
import net.minecraft.loot.ConditionArrayParser;
13+
import net.minecraft.util.ResourceLocation;
14+
15+
public class HowDidYouGetHereTrigger implements ICriterionTrigger<HowDidYouGetHereTrigger.Instance> {
16+
17+
private final GenericAdvancementTriggerListenerList<HowDidYouGetHereTrigger.Instance> listeners = new GenericAdvancementTriggerListenerList<>();
18+
19+
@Override
20+
public ResourceLocation getId() {
21+
return Advancements.HOW_DID_YOU_GET_HERE;
22+
}
23+
24+
@Override
25+
public void addPlayerListener(PlayerAdvancements advancements, Listener<Instance> list) {
26+
listeners.addPlayerListener(advancements, list);
27+
}
28+
29+
@Override
30+
public void removePlayerListener(PlayerAdvancements advancements, Listener<Instance> list) {
31+
listeners.removePlayerListener(advancements, list);
32+
}
33+
34+
@Override
35+
public void removePlayerListeners(PlayerAdvancements advancements) {
36+
listeners.removePlayerListeners(advancements);
37+
}
38+
39+
@Override
40+
public Instance createInstance(JsonObject json, ConditionArrayParser conditions) {
41+
return new Instance(EntityPredicate.AndPredicate.fromJson(json, "player", conditions));
42+
}
43+
44+
public void trigger(ServerPlayerEntity player) {
45+
final GenericAdvancementTriggerListener<Instance> listeners = this.listeners.getListeners(player);
46+
if(listeners != null)
47+
listeners.trigger();
48+
}
49+
50+
public static class Instance extends CriterionInstance {
51+
52+
public Instance(EntityPredicate.AndPredicate player) {
53+
super(Advancements.HOW_DID_YOU_GET_HERE, player);
54+
}
55+
56+
public static Instance create() {
57+
return new Instance(EntityPredicate.AndPredicate.ANY);
58+
}
59+
}
60+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.robotgryphon.compactmachines.api.core;
2+
3+
import net.minecraft.util.ResourceLocation;
4+
5+
public class Advancements {
6+
public static final ResourceLocation HOW_DID_YOU_GET_HERE = new ResourceLocation(Constants.MOD_ID, "how_did_you_get_here");
7+
public static final ResourceLocation ROOT = new ResourceLocation(Constants.MOD_ID, "root");
8+
}

src/main/java/com/robotgryphon/compactmachines/api/core/Messages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ public abstract class Messages {
77
public static final ResourceLocation NO_MACHINE_DATA = new ResourceLocation(Constants.MOD_ID, "no_machine_data");
88
public static final ResourceLocation MACHINE_SPAWNPOINT_SET = new ResourceLocation(Constants.MOD_ID, "spawnpoint_set");
99
public static final ResourceLocation TELEPORT_OUT_OF_BOUNDS = new ResourceLocation(Constants.MOD_ID, "teleport_oob");
10+
public static final ResourceLocation HOW_DID_YOU_GET_HERE = new ResourceLocation(Constants.MOD_ID, "how_did_you_get_here");
1011
}

0 commit comments

Comments
 (0)