added changing criterion to scoreboard_add #624
This commit is contained in:
1 parent
f9bce2b50e
commit
055c26d44a
5 files changed
+42
-3
No files matched your search
@@ -10,8 +10,9 @@ With specified `objective` and
|
|||||||
|
|
||||||
### `scoreboard_add(objective, criterion?)`
|
### `scoreboard_add(objective, criterion?)`
|
||||||
|
|
||||||
Adds a new objective to scoreboard. If `criterion` is not specified, assumes `'dummy'`. Returns `false` if objective
|
Adds a new objective to scoreboard. If `criterion` is not specified, assumes `'dummy'`.
|
||||||
already existed, `true` otherwise.
|
If the objective already exists, changes the criterion of that objective and returns false.
|
||||||
|
If the objective was added, returns true.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
scoreboard_add('counter')
|
scoreboard_add('counter')
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package carpet.mixins;
|
||||||
|
|
||||||
|
import net.minecraft.scoreboard.ScoreboardCriterion;
|
||||||
|
import net.minecraft.scoreboard.ScoreboardObjective;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
@Mixin(ScoreboardObjective.class)
|
||||||
|
public interface ScoreboardObjective_scarpetMixin {
|
||||||
|
@Accessor("criterion")
|
||||||
|
void setCriterion(ScoreboardCriterion criterion);
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package carpet.mixins;
|
||||||
|
|
||||||
|
import net.minecraft.scoreboard.Scoreboard;
|
||||||
|
import net.minecraft.scoreboard.ScoreboardCriterion;
|
||||||
|
import net.minecraft.scoreboard.ScoreboardObjective;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Mixin(Scoreboard.class)
|
||||||
|
public interface Scoreboard_scarpetMixin {
|
||||||
|
@Accessor("objectivesByCriterion")
|
||||||
|
Map<ScoreboardCriterion, List<ScoreboardObjective>> getObjectivesByCriterion();
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package carpet.script.api;
|
package carpet.script.api;
|
||||||
|
|
||||||
|
import carpet.mixins.ScoreboardObjective_scarpetMixin;
|
||||||
|
import carpet.mixins.Scoreboard_scarpetMixin;
|
||||||
import carpet.script.CarpetContext;
|
import carpet.script.CarpetContext;
|
||||||
import carpet.script.Expression;
|
import carpet.script.Expression;
|
||||||
import carpet.script.LazyValue;
|
import carpet.script.LazyValue;
|
||||||
@@ -11,6 +13,7 @@ import carpet.script.value.NumericValue;
|
|||||||
import carpet.script.value.StringValue;
|
import carpet.script.value.StringValue;
|
||||||
import carpet.script.value.FormattedTextValue;
|
import carpet.script.value.FormattedTextValue;
|
||||||
import carpet.script.value.Value;
|
import carpet.script.value.Value;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.scoreboard.Scoreboard;
|
import net.minecraft.scoreboard.Scoreboard;
|
||||||
@@ -127,8 +130,13 @@ public class Scoreboards {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScoreboardObjective objective = scoreboard.getObjective(objectiveName);
|
ScoreboardObjective objective = scoreboard.getObjective(objectiveName);
|
||||||
if (objective != null)
|
if (objective != null) {
|
||||||
|
((Scoreboard_scarpetMixin)scoreboard).getObjectivesByCriterion().get(objective.getCriterion()).remove(objective);
|
||||||
|
((ScoreboardObjective_scarpetMixin) objective).setCriterion(criterion);
|
||||||
|
(((Scoreboard_scarpetMixin)scoreboard).getObjectivesByCriterion().computeIfAbsent(criterion, (criterion1) -> Lists.newArrayList())).add(objective);
|
||||||
|
scoreboard.updateObjective(objective);
|
||||||
return LazyValue.FALSE;
|
return LazyValue.FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
scoreboard.addObjective(objectiveName, criterion, new LiteralText(objectiveName), criterion.getCriterionType());
|
scoreboard.addObjective(objectiveName, criterion, new LiteralText(objectiveName), criterion.getCriterionType());
|
||||||
return LazyValue.TRUE;
|
return LazyValue.TRUE;
|
||||||
|
|||||||
@@ -164,6 +164,8 @@
|
|||||||
"BlockItem_scarpetEventMixin",
|
"BlockItem_scarpetEventMixin",
|
||||||
"PlayerManager_scarpetEventsMixin",
|
"PlayerManager_scarpetEventsMixin",
|
||||||
"PlayerInventory_scarpetEventMixin",
|
"PlayerInventory_scarpetEventMixin",
|
||||||
|
"ScoreboardObjective_scarpetMixin",
|
||||||
|
"Scoreboard_scarpetMixin",
|
||||||
|
|
||||||
"ChunkTicketManager_scarpetMixin",
|
"ChunkTicketManager_scarpetMixin",
|
||||||
"StatType_scarpetMixin",
|
"StatType_scarpetMixin",
|
||||||
|
|||||||
Reference in new issue
Block a user