001package net.tnemc.item.component.impl;
002/*
003 * The New Item Library
004 * Copyright (C) 2022 - 2025 Daniel "creatorfromhell" Vidmar
005 *
006 * This program is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * This program is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public License
017 * along with this program; if not, write to the Free Software Foundation,
018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
019 */
020
021import net.tnemc.item.AbstractItemStack;
022import net.tnemc.item.JSONHelper;
023import net.tnemc.item.component.SerialComponent;
024import net.tnemc.item.platform.ItemPlatform;
025import org.json.simple.JSONObject;
026
027import java.util.Objects;
028
029/**
030 * JukeBoxComponent
031 *
032 * @author creatorfromhell
033 * @since 0.0.1.0
034 */
035public abstract class JukeBoxComponent<I extends AbstractItemStack<T>, T> implements SerialComponent<I, T> {
036
037  protected String song;
038
039  public JukeBoxComponent() {
040
041  }
042
043  public JukeBoxComponent(final String song) {
044
045    this.song = song;
046  }
047
048  /**
049   * @return the type of component this is.
050   * @since 0.2.0.0
051   */
052  @Override
053  public String identifier() {
054
055    return "jukebox";
056  }
057
058  /**
059   * Converts the {@link SerialComponent} to a JSON object.
060   *
061   * @return The JSONObject representing this {@link SerialComponent}.
062   * @since 0.2.0.0
063   */
064  @Override
065  public JSONObject toJSON() {
066
067    final JSONObject jukebox = new JSONObject();
068    jukebox.put("name", "jukebox-component");
069
070    return jukebox;
071  }
072
073  /**
074   * Reads JSON data and converts it back to a {@link SerialComponent} object.
075   *
076   * @param json The JSONHelper instance of the json data.
077   * @since 0.2.0.0
078   */
079  @Override
080  public void readJSON(final JSONHelper json, final ItemPlatform<I, T, ?> platform) {
081
082    song = json.getString("song");
083  }
084
085  /**
086   * Used to determine if some data is equal to this data. This means that it has to be an exact
087   * copy of this data. For instance, book copies will return false when compared to the original.
088   *
089   * @param component The component to compare.
090   *
091   * @return True if similar, otherwise false.
092   * @since 0.2.0.0
093   */
094  @Override
095  public boolean similar(final SerialComponent<?, ?> component) {
096
097    if(component instanceof final JukeBoxComponent<?, ?> jukeBox) {
098
099      return Objects.equals(jukeBox.song, this.song);
100    }
101    return false;
102  }
103
104  public String song() {
105
106    return song;
107  }
108
109  public void song(final String song) {
110
111    this.song = song;
112  }
113}