ChestShop-3/src/main/java/com/Acrobot/ChestShop/Events/ShopCreatedEvent.java
Phoenix616 b718fcc429 Use shop owner for LWC protections and not the creator
Also fix a bug where it was possible for shops to be created with shop owners that did not have a valid Account information when other plugins manipulated the name line after the NameChecker checked it. Now it gets checked twice, once at the start (to abort early and to populate the ownerAccount field) and once at the end to check again when the name line changed.
2019-08-22 14:03:27 +01:00

127 lines
3.1 KiB
Java

package com.Acrobot.ChestShop.Events;
import com.Acrobot.ChestShop.Database.Account;
import org.bukkit.block.Chest;
import org.bukkit.block.Container;
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import javax.annotation.Nullable;
/**
* Represents a state after shop creation
*
* @author Acrobot
*/
public class ShopCreatedEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private final Player creator;
private final Sign sign;
private final String[] signLines;
@Nullable private final Account ownerAccount;
@Nullable private final Container container;
@Deprecated
public ShopCreatedEvent(Player creator, Sign sign, @Nullable Chest chest, String[] signLines) {
this(creator, sign, (Container) chest, signLines);
}
@Deprecated
public ShopCreatedEvent(Player creator, Sign sign, @Nullable Container container, String[] signLines) {
this(creator, sign, container, signLines, null);
}
public ShopCreatedEvent(Player creator, Sign sign, @Nullable Container container, String[] signLines, @Nullable Account ownerAccount) {
this.creator = creator;
this.sign = sign;
this.container = container;
this.signLines = signLines.clone();
this.ownerAccount = ownerAccount;
}
/**
* Returns the text on the sign
*
* @param line Line number (0-3)
* @return Text on the sign
*/
public String getSignLine(short line) {
return signLines[line];
}
/**
* Returns the text on the sign
*
* @return Text on the sign
*/
public String[] getSignLines() {
return signLines;
}
/**
* Returns the shop's creator
*
* @return Shop's creator
*/
public Player getPlayer() {
return creator;
}
/**
* Returns the shop's sign
*
* @return Shop's sign
*/
public Sign getSign() {
return sign;
}
/**
* Returns the shop's container (if applicable)
*
* @return Shop's container
*/
@Nullable public Container getContainer() {
return container;
}
/**
* @deprecated Use {@link #getContainer()}
*/
@Deprecated
@Nullable public Chest getChest() {
return container instanceof Chest ? (Chest) container : null;
}
/**
* Get the account of the shop's owner
*
* @return The account of the shop's owner; null if no Account could be found
*/
@Nullable
public Account getOwnerAccount() {
return ownerAccount;
}
/**
* Check whether or not the created shop is owned by the creator
*
* @return <tt>true</tt> if the owner account is the creators one (or null); <tt>false</tt> if it's not
*/
public boolean createdByOwner() {
return ownerAccount == null || ownerAccount.getUuid().equals(creator.getUniqueId());
}
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}