Skip to content

Commit

Permalink
Add donation totals and counts into the scoreboard
Browse files Browse the repository at this point in the history
  • Loading branch information
Gegy committed Oct 25, 2023
1 parent 19523bb commit 09039e5
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class DonationListeners {

static {
LISTENERS.add(DonationListeners::announceDonation);
LISTENERS.add(new DonationScoreboard());
}

private static void announceDonation(final MinecraftServer server, final String name, final double amount, final DonationState state) {
Expand Down
38 changes: 38 additions & 0 deletions src/main/java/com/lovetropics/donations/DonationScoreboard.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.lovetropics.donations;

import net.minecraft.network.chat.Component;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerScoreboard;
import net.minecraft.util.Mth;
import net.minecraft.world.scores.Objective;
import net.minecraft.world.scores.criteria.ObjectiveCriteria;

public class DonationScoreboard implements DonationListener {
private static final DonationGroup[] DONATION_GROUPS = DonationGroup.values();
private static final String TOTALS_OBJECTIVE = "donations.totals";
private static final String COUNTS_OBJECTIVE = "donations.counts";

@Override
public void handleDonation(final MinecraftServer server, final String name, final double amount, final DonationState state) {
updateScoreboard(server.getScoreboard(), state);
}

private static void updateScoreboard(final ServerScoreboard scoreboard, final DonationState state) {
final Objective totalsObjective = getOrCreateObjective(scoreboard, TOTALS_OBJECTIVE);
final Objective countsObjective = getOrCreateObjective(scoreboard, COUNTS_OBJECTIVE);
for (final DonationGroup group : DONATION_GROUPS) {
final int total = Mth.floor(state.getAmount(group));
final int count = state.getCount(group);
scoreboard.getOrCreatePlayerScore(group.getSerializedName(), totalsObjective).setScore(total);
scoreboard.getOrCreatePlayerScore(group.getSerializedName(), countsObjective).setScore(count);
}
}

private static Objective getOrCreateObjective(final ServerScoreboard scoreboard, final String name) {
final Objective objective = scoreboard.getObjective(name);
if (objective == null) {
return scoreboard.addObjective(name, ObjectiveCriteria.DUMMY, Component.literal("Donations"), ObjectiveCriteria.RenderType.INTEGER);
}
return objective;
}
}

0 comments on commit 09039e5

Please sign in to comment.