Merge pull request #631 from replaceitem/scoreboard-criterion-mod
Added ability to change criterion with scoreboard_add Fixes #624
This commit is contained in:
5 files changed
+44
-4
No files matched your search
@@ -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;
|
||||
|
||||
import carpet.mixins.ScoreboardObjective_scarpetMixin;
|
||||
import carpet.mixins.Scoreboard_scarpetMixin;
|
||||
import carpet.script.CarpetContext;
|
||||
import carpet.script.Expression;
|
||||
import carpet.script.LazyValue;
|
||||
@@ -11,6 +13,7 @@ import carpet.script.value.NumericValue;
|
||||
import carpet.script.value.StringValue;
|
||||
import carpet.script.value.FormattedTextValue;
|
||||
import carpet.script.value.Value;
|
||||
import com.google.common.collect.Lists;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.boss.BossBar;
|
||||
import net.minecraft.entity.boss.BossBarManager;
|
||||
@@ -133,8 +136,15 @@ public class Scoreboards {
|
||||
}
|
||||
|
||||
ScoreboardObjective objective = scoreboard.getObjective(objectiveName);
|
||||
if (objective != null)
|
||||
if (objective != null) {
|
||||
if(lv.size() == 1) return (_c, _t) -> StringValue.of(objective.getCriterion().getName());
|
||||
if(objective.getCriterion().equals(criterion) || lv.size() == 1) return LazyValue.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;
|
||||
}
|
||||
|
||||
scoreboard.addObjective(objectiveName, criterion, new LiteralText(objectiveName), criterion.getCriterionType());
|
||||
return LazyValue.TRUE;
|
||||
|
||||
Reference in new issue
Block a user