Clean repo for open source release
Remove build artifacts, dev tool configs, unused dependencies, and third-party source dumps. Add proper README, update .gitignore, clean up Makefile.
This commit is contained in:
210
src/main/java/com/tiedup/remake/bounty/Bounty.java
Normal file
210
src/main/java/com/tiedup/remake/bounty/Bounty.java
Normal file
@@ -0,0 +1,210 @@
|
||||
package com.tiedup.remake.bounty;
|
||||
|
||||
import java.util.UUID;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Represents a single bounty placed on a player.
|
||||
*
|
||||
* Phase 17: Bounty System
|
||||
*
|
||||
* A bounty is created when a player (client) offers a reward for capturing
|
||||
* another player (target). Anyone who delivers the target to the client
|
||||
* receives the reward.
|
||||
*/
|
||||
public class Bounty {
|
||||
|
||||
private final String id;
|
||||
private final UUID clientId;
|
||||
private final UUID targetId;
|
||||
private String clientName;
|
||||
private String targetName;
|
||||
private final ItemStack reward;
|
||||
private final long creationTime; // System.currentTimeMillis()
|
||||
private final int durationSeconds; // How long the bounty lasts
|
||||
|
||||
/**
|
||||
* Create a new bounty.
|
||||
*/
|
||||
public Bounty(
|
||||
UUID clientId,
|
||||
String clientName,
|
||||
UUID targetId,
|
||||
String targetName,
|
||||
ItemStack reward,
|
||||
int durationSeconds
|
||||
) {
|
||||
this.id = UUID.randomUUID().toString();
|
||||
this.clientId = clientId;
|
||||
this.clientName = clientName;
|
||||
this.targetId = targetId;
|
||||
this.targetName = targetName;
|
||||
this.reward = reward.copy();
|
||||
this.creationTime = System.currentTimeMillis();
|
||||
this.durationSeconds = durationSeconds;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a bounty from NBT data.
|
||||
*/
|
||||
private Bounty(
|
||||
String id,
|
||||
UUID clientId,
|
||||
String clientName,
|
||||
UUID targetId,
|
||||
String targetName,
|
||||
ItemStack reward,
|
||||
long creationTime,
|
||||
int durationSeconds
|
||||
) {
|
||||
this.id = id;
|
||||
this.clientId = clientId;
|
||||
this.clientName = clientName;
|
||||
this.targetId = targetId;
|
||||
this.targetName = targetName;
|
||||
this.reward = reward;
|
||||
this.creationTime = creationTime;
|
||||
this.durationSeconds = durationSeconds;
|
||||
}
|
||||
|
||||
// ==================== GETTERS ====================
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public UUID getClientId() {
|
||||
return clientId;
|
||||
}
|
||||
|
||||
public UUID getTargetId() {
|
||||
return targetId;
|
||||
}
|
||||
|
||||
public String getClientName() {
|
||||
return clientName;
|
||||
}
|
||||
|
||||
public String getTargetName() {
|
||||
return targetName;
|
||||
}
|
||||
|
||||
public ItemStack getReward() {
|
||||
return reward.copy();
|
||||
}
|
||||
|
||||
public int getDurationSeconds() {
|
||||
return durationSeconds;
|
||||
}
|
||||
|
||||
public long getCreationTime() {
|
||||
return creationTime;
|
||||
}
|
||||
|
||||
// ==================== TIME CALCULATIONS ====================
|
||||
|
||||
/**
|
||||
* Get remaining time in seconds.
|
||||
*/
|
||||
public int getSecondsRemaining() {
|
||||
long elapsed = (System.currentTimeMillis() - creationTime) / 1000;
|
||||
return Math.max(0, durationSeconds - (int) elapsed);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get remaining time as [hours, minutes].
|
||||
*/
|
||||
public int[] getRemainingTime() {
|
||||
int seconds = getSecondsRemaining();
|
||||
int hours = seconds / 3600;
|
||||
int minutes = (seconds % 3600) / 60;
|
||||
return new int[] { hours, minutes };
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if bounty has expired.
|
||||
*/
|
||||
public boolean isExpired() {
|
||||
return getSecondsRemaining() <= 0;
|
||||
}
|
||||
|
||||
// ==================== PLAYER CHECKS ====================
|
||||
|
||||
/**
|
||||
* Check if player is the client (creator) of this bounty.
|
||||
*/
|
||||
public boolean isClient(UUID playerId) {
|
||||
return clientId.equals(playerId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if player is the target of this bounty.
|
||||
*/
|
||||
public boolean isTarget(UUID playerId) {
|
||||
return targetId.equals(playerId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if bounty matches (client receives target).
|
||||
*/
|
||||
public boolean matches(UUID clientId, UUID targetId) {
|
||||
return this.clientId.equals(clientId) && this.targetId.equals(targetId);
|
||||
}
|
||||
|
||||
// ==================== REWARD DESCRIPTION ====================
|
||||
|
||||
/**
|
||||
* Get a description of the reward (e.g., "Diamond x 5").
|
||||
*/
|
||||
public String getRewardDescription() {
|
||||
if (reward.isEmpty()) {
|
||||
return "Nothing";
|
||||
}
|
||||
return reward.getHoverName().getString() + " x " + reward.getCount();
|
||||
}
|
||||
|
||||
// ==================== NAME UPDATES ====================
|
||||
|
||||
/**
|
||||
* Update client name (for when player was offline during creation).
|
||||
*/
|
||||
public void setClientName(String name) {
|
||||
this.clientName = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update target name (for when player was offline during creation).
|
||||
*/
|
||||
public void setTargetName(String name) {
|
||||
this.targetName = name;
|
||||
}
|
||||
|
||||
// ==================== NBT SERIALIZATION ====================
|
||||
|
||||
public CompoundTag save() {
|
||||
CompoundTag tag = new CompoundTag();
|
||||
tag.putString("id", id);
|
||||
tag.putUUID("clientId", clientId);
|
||||
tag.putUUID("targetId", targetId);
|
||||
tag.putString("clientName", clientName);
|
||||
tag.putString("targetName", targetName);
|
||||
tag.put("reward", reward.save(new CompoundTag()));
|
||||
tag.putLong("creationTime", creationTime);
|
||||
tag.putInt("durationSeconds", durationSeconds);
|
||||
return tag;
|
||||
}
|
||||
|
||||
public static Bounty load(CompoundTag tag) {
|
||||
return new Bounty(
|
||||
tag.getString("id"),
|
||||
tag.getUUID("clientId"),
|
||||
tag.getString("clientName"),
|
||||
tag.getUUID("targetId"),
|
||||
tag.getString("targetName"),
|
||||
ItemStack.of(tag.getCompound("reward")),
|
||||
tag.getLong("creationTime"),
|
||||
tag.getInt("durationSeconds")
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user