001/* 002 * Trident - A Multithreaded Server Alternative 003 * Copyright 2014 The TridentSDK Team 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018package net.tridentsdk.base; 019 020import net.tridentsdk.util.TridentLogger; 021 022import javax.annotation.concurrent.Immutable; 023 024/** 025 * Immutable value representing the pitch of a note played 026 * 027 * @author The TridentSDK Team 028 * @since 0.3-alpha-DP 029 */ 030@Immutable 031public final class Note { 032 private final short id; 033 034 public Note(int id) { 035 if (id > 24) { 036 TridentLogger.get().error(new IllegalArgumentException("Note is too high!")); 037 } else if (id < 0) { 038 TridentLogger.get().error(new IllegalArgumentException("Note is too low!")); 039 } 040 041 this.id = (short) id; 042 } 043 044 /** 045 * Returns a note one step sharper than this 046 */ 047 public Note sharpen() { 048 if ((int) this.id + 1 > 24) { 049 TridentLogger.get().error(new IllegalArgumentException("Cannot sharpen this note, it is already the max")); 050 } 051 return new Note((int) this.id + 1); 052 } 053 054 /** 055 * Returns a note flatter than this 056 */ 057 public Note flatten() { 058 if ((int) this.id - 1 < 0) { 059 TridentLogger.get().error(new IllegalArgumentException("Cannot flatten this note, it is already the min")); 060 } 061 return new Note((int) this.id - 1); 062 } 063 064 public short id() { 065 return id; 066 } 067}